由于项目需求,需要用到开源的软件开发,就开始研究GDAL,这个开源库,目前来说,调用GDAL库,最方便的语言还是python ,简单记录下,用python语言做GDAL开发的一些东西吧。一个在开发中经常遇见的问题,就是一个点数据所对应的像素值,这是很常见的,上代码:
#下面是GDAL打开shp数据,不细说了。
driver = ogr.GetDriverByName('ESRI Shapefile')
ds = driver.Open(sub_dir, 0)
sublayer = ds.GetLayer(0)
# 存放每个点的xy坐标的数组
xValues = []
yValues = []
#从这里开始
# 打开一个栅格数据Tif
dr = gdal.Open(Tif)
#存储着栅格数据集的地理坐标信息
transform = dr.GetGeoTransform()
# 影像左上角横坐标
x_origin = transform[0]
# 影像左上角纵坐标
y_origin = transform[3]
# 遥感图像的水平空间分辨率或者东西方向上的像素分辨率
pixel_width = transform[1]
# 遥感图像的垂直空间分辨率或者南北方向上的像素分辨率
pixel_height = transform[5]
x_offset = int((x - x_origin) / pixel_width)
y_offset = int((y - y_origin) / pixel_height)
pixelValue= dr.ReadAsArray(x_offset, y_offset,1, 1)
上面的代码就可以读取点对应的像素值pixelValue,重点要说,在GDAL中,影像都是左上角为起点,就是(0,0)点,看图:
备注:原创
开始时我也不理解,计算x_offset为啥要用x- x_origin,看见这个图就明白了。
再说下这个函数,ReadAsArray,这个函数就可以读取像素值,当然了,这个函数有很多的重载,感兴趣的可以再深入研究下。