繁体   English   中英

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

[英]How to get the value of lat long from a HDF file?

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

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

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

如果transf数据集的地理变换( 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)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM