使用仅限Python的工具读取国家海拔数据集(ArcGrid / GridFloat / IMG)吗?


10

我已经从USGS提供的国家海拔数据集中找到了高精度的海拔数据(1/3-1/9弧秒分辨率)。它具有int IMG,Arcgrid和GridFloat格式。我知道ArcGrid与付费软件包相对应,但是我试图坚持使用免费提供的工具。

我有要与地面相关的GPS数据。

是否有任何Python库可让我使用IMG,ArcGrid或GridFloat格式的数据文件将GPS数据转换为海拔高度?

Answers:


7

使用GDAL绑定,可以直接在python中直接使用IMG文件。例如,您可以将数据直接读取到NumPy数组中:

from osgeo import gdal
geo = gdal.Open('imgn36w100_11.img')
arr = geo.ReadAsArray()
print repr(arr)
array([[ 744.31896973,  743.68762207,  743.1116333 , ...,  550.42498779,
         553.77813721,  556.18640137],
       [ 744.22955322,  743.66082764,  743.05273438, ...,  552.05706787,
         554.81365967,  557.55877686],
       [ 744.0133667 ,  743.49041748,  743.00061035, ...,  553.0123291 ,
         555.78076172,  558.01312256],
       ...,
       [ 568.70880127,  567.33666992,  566.56170654, ...,  447.68035889,
         447.68804932,  447.65426636],
       [ 568.01116943,  566.95739746,  564.23382568, ...,  447.6696167 ,
         447.71224976,  447.62734985],
       [ 565.62896729,  562.65325928,  560.78759766, ...,  447.67129517,
         447.67529297,  447.65179443]], dtype=float32)

有关绘制IMG格式数据的更完整示例,请参阅此脚本该脚本生成了以下图像。为了将GPS数据转换为海拔高度,您必须对所得的NumPy数组进行采样。

在此处输入图片说明


4

National Map Viewer曾经使用不同的软件平台,这使得在选择图块后将数据转换为GeoTIFF成为可能。一些区域数据提供商也确实喜欢GeoTIFF。但这可能对您没有帮助。

但是,好消息是gdal能够使用所有这三种格式。ArcGrid是ESRI二进制格式,GridFloat USGS的DEM数据格式以及制造Imagine软件的Erdas专有的IMG。我可能会下载ArcGrid或IMG格式,然后转换为GeoTIFF:USGS本身有大量的转换脚本gdal 供下载(直接链接到ZIP文件)。您应该在那里找到所需的资源。


感谢您的链接并提及gdal,它看起来非常有用
abnowack 2013年

0

Kelsey的答案起初对我不起作用,因为.img文件使用-inf作为空白空间的值。

我通过添加以下行解决了这个问题:

topo[topo<-1000] = 0

1
这不是原始问题的答案,可能应该是对已接受答案的编辑
nmtoken
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.