如何从HDF文件中获取lat long的值?

时间:2017-12-13 09:11:17

标签: python gdal hdf

我试图使用gdal从HDF file的子数据集中获取经度和纬度的值。但我收到以下错误:

IndexError: index -62399 is out of bounds for axis 1 with size 4800

这是我的代码:

from osgeo import ogr, osr,gdal

hdf_file = gdal.Open("MOD13Q1.A2017321.h31v10.006.2017337222145.hdf")
subDatasets = hdf_file.GetSubDatasets()
val_dict = {}
#print subDatasets[0]
dataset = gdal.Open(subDatasets[1][0])
transf = dataset.GetGeoTransform()
success,transfInv = gdal.InvGeoTransform(transf)
ds = dataset.ReadAsArray()
#lon,lat = -17.586972, 139.158043
lat = -16.718853 
lon = 142.645773
px, py = gdal.ApplyGeoTransform(transfInv, lon, lat)

value = ds[int(px),int(py)]
print value

谁能告诉我我做错了什么?

1 个答案:

答案 0 :(得分:0)

如果查看数据集的地理转换(transf),您可以看到坐标不是纬度/纬度(正弦曲线)。

因此,在应用地理转换转换为像素坐标时,您不应提供纬度/经度值。这些值应与数据集位于同一投影中。

例如,如果输入左上角的坐标,结果会得到(0,0):

mapx = transf[0]
mapy = transf[3]
px, py = gdal.ApplyGeoTransform(transfInv, mapx, mapy)

或者在右下角:

mapx = transf[0] + transf[1] * ds.shape[1]
mapy = transf[3] + transf[5] * ds.shape[0]
px, py = gdal.ApplyGeoTransform(transfInv, mapx, mapy)

结果为(4800,4800)。