2015-12-21 108 views
1

我有一个具有高程数据init的geotiff栅格数据集。光栅图像中没有数据由-9999定义。当我尝试做与下面这段代码一个情节:如何通过imshow在python中绘制geotiff数据

import gdal 
import numpy as np 
from mayavi import mlab 

ds = gdal.Open('data.tif') 
dem = ds.ReadAsArray() 
gt = ds.GetGeoTransform() 
ds = None 

mlab.imshow(dem) 
mlab.colorbar() 
mlab.show() 

问题是,当我做图,还绘制无数据值。我的问题是如何从光栅图像中排除-9999值(或选择要绘制的值范围)。

数据的链接是:

https://drive.google.com/file/d/0B2rkXkOkG7ExR1VsVW5HQXBhSDQ/view?usp=sharing

回答

2

如果你仍然需要一个干净的解决这个问题,我相信你正在寻找的是一个屏蔽数组numpy.ma,如:

import gdal 
import numpy as np 
from mayavi import mlab 

ds = gdal.Open('data.tif') 
dem = ds.ReadAsArray() 

msk = dem==-9999 # boolean array with True at elements to be masked 
dem = np.ma.array(data=dem, mask=msk, fill_value=np.nan) 

gt = ds.GetGeoTransform() 
ds = None 

mlab.imshow(dem) 
mlab.colorbar() 
mlab.show()