我试图使用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
谁能告诉我我做错了什么?
答案 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)。