1. 认识.hgt文件:数字高程模型的载体
第一次遇到.hgt文件时,我也曾一头雾水。这种文件实际上是SRTM(Shuttle Radar Topography Mission)任务采集的数字高程数据标准格式,由NASA在2000年通过航天飞机雷达测绘获得。每个.hgt文件对应地球上1°×1°的区域(约120km×120km),包含该区域的海拔高度数据,精度分为1弧秒(约30米)和3弧秒(约90米)两种。
注意:SRTM数据覆盖北纬60°至南纬56°之间的区域,超出此范围需要寻找替代数据源
文件命名规则直接反映了其地理位置。例如"N40E116.hgt"表示北纬40°东经116°开始的区域。这种命名方式虽然直观,但新手容易混淆经纬度顺序——纬度(N/S)在前,经度(E/W)在后,且必须使用三位数表示经度(如E116而非E116.5)。
2. 主流工具打开.hgt文件的方法对比
2.1 专业GIS软件方案
QGIS作为开源GIS的标杆,处理.hgt文件堪称完美。安装后只需将文件拖入界面,系统会自动识别为高程图层。我推荐使用"Layer > Add Layer > Add Raster Layer"的规范流程,这样能确保正确加载坐标系(默认WGS84)。加载后右键图层选择"Properties",在"Symbology"选项卡中选择"Singleband pseudocolor"渲染,可以直观看到地形起伏。
Global Mapper是商业软件中的轻量级选择,其优势在于批量处理能力。我曾用它一次性拼接20个相邻.hgt文件,通过"File > Open Data Files"导入后,使用"Tools > Combine/Grid Elevation Data"即可生成连续地形图。软件还提供剖面分析工具,非常适合户外路线规划。
2.2 编程语言处理方案
Python+gdal的方案适合需要自动化处理的场景。以下是基础读取代码:
python复制from osgeo import gdal
import numpy as np
dataset = gdal.Open('N34W119.hgt')
band = dataset.GetRasterBand(1)
elevation = band.ReadAsArray()
print(f"该区域最高点海拔:{np.max(elevation)}米")
对于Matlab用户,只需使用geotiffread函数即可读取。但要注意.hgt文件虽然类似GeoTIFF,实际是二进制格式,需要指定正确的数据格式(int16)和字节顺序(大端序)。
2.3 轻量级查看工具
MicroDEM是专门针对SRTM数据优化的免费工具,其"File > Open SRTM"功能能自动纠正常见的文件格式问题。我特别喜欢它的3D预览功能,按住Ctrl键拖动鼠标即可旋转观察地形。
对于只需要简单查看的用户,NASA提供的SRTM Viewer在线工具可以直接上传.hgt文件生成等高线图。不过要注意文件大小限制(通常不超过25MB)。
3. 常见问题排查与数据修复
3.1 文件无法打开的典型原因
最常遇到的问题是文件损坏。SRTM数据下载时可能因网络问题中断,导致文件不完整。可以通过检查文件大小初步判断:
- 1弧秒数据应为25,934,592字节(约25MB)
- 3弧秒数据应为2,884,352字节(约2.8MB)
使用HxD等十六进制编辑器查看文件头部,正常.hgt文件前4字节应为"0000"。如果看到"HTTP"等字样,说明下载的是错误页面而非数据文件。
3.2 高程值异常的处理
SRTM数据中的特殊值需要特别处理:
- -32768表示无数据区域(如水域)
- 0值可能是真实海拔也可能是缺失值
建议在QGIS中使用栅格计算器过滤异常值:
code复制("elevation@1" != -32768) * "elevation@1"
3.3 坐标系校正技巧
当发现加载的地形图位置偏移时,通常需要手动设置坐标系。在QGIS中右键图层选择"Set CRS",输入"EPSG:4326"(WGS84地理坐标系)。如果要做精确测量,建议转换为UTM投影坐标系,方法是在"Processing Toolbox"中搜索"Reproject Layer"。
4. 进阶应用:高程数据的实用处理流程
4.1 多文件拼接与裁剪
使用GDAL的虚拟栅格功能可以无损拼接多个.hgt文件。以下命令生成VRT索引文件:
bash复制gdalbuildvrt output.vrt N*.hgt
如需裁剪特定区域,可以使用:
bash复制gdalwarp -te 116.3 39.9 116.6 40.1 input.hgt output_crop.tif
其中-te参数指定范围(minx miny maxx maxy)。
4.2 生成等高线
在QGIS中生成等高线的完整流程:
- 加载.hgt文件
- 打开"Processing Toolbox"
- 搜索"Contour"
- 设置间隔(如50米)
- 勾选"Create 3D vectors"获取带高程属性的等高线
4.3 地形可视化技巧
使用QGIS的"Qgis2threejs"插件可以创建惊艳的3D场景:
- 安装插件后点击"Create 3D Map"
- 设置垂直 exaggeration(通常2-3倍增强视觉效果)
- 添加卫星影像底图(建议使用QuickMapServices插件加载)
- 导出HTML交互式视图
5. 数据获取与更新方案
虽然.hgt是传统格式,但NASA仍在更新数据。2015年发布的SRTM 1弧秒全球数据(SRTMGL1)是目前最精细的公开版本。推荐通过Earthdata网站下载,注册账号后搜索"SRTM"即可找到数据目录。
对于需要更高精度数据的场景,可以考虑:
- AW3D30(日本提供的30米分辨率数据)
- TanDEM-X(商业数据,分辨率达12米)
- 本地LiDAR数据(厘米级精度)
在处理大批量.hgt文件时,我习惯使用wget批量下载:
bash复制wget -c -r -nd -np -A .hgt https://e4ftl01.cr.usgs.gov/MEASURES/SRTMGL1.003/2000.02.11/
参数说明:
- -c 断点续传
- -r 递归下载
- -nd 不创建目录结构
- -np 不追溯父目录
- -A .hgt 仅下载.hgt文件
