数字高程模型(DEM)基础
各位同学,今天我们来聊聊DEM。说白了,数字高程模型就是地球表面的「数字骨架」。没有它,地形匹配导航就是空中楼阁。我做了这么多年导航系统,最深的体会就是:DEM选得好,导航差不了;DEM选得糙,系统满街跑。
DEM数据来源:从哪儿搞到靠谱的高程数据?
数据来源这块,我把它分成三类。你想想看,就像盖房子要选砖头,不同砖头盖出来的房子质量天差地别。
- 卫星遥感:SRTM、ASTER GDEM、ALOS World 3D。我个人最常用SRTM,全球覆盖,30米分辨率,够用。ASTER GDEM精度稍差,但胜在免费。
- 航空摄影测量:用飞机搭载激光雷达(LiDAR)或者立体相机。精度高,但成本也高。我在做某山区项目时用过LiDAR数据,那精度,啧啧,地面上的石头都能看出来。
- 地面测量:RTK-GPS、全站仪实测。精度最高,但效率最低。一般只用于小范围验证或者特殊区域补测。
分辨率与精度:别把这两个概念搞混了
很多新手容易把分辨率和精度混为一谈。我刚开始做这行时也犯过这个错。分辨率是「格网大小」,精度是「高程误差」。举个例子:
| 参数 | 分辨率 | 精度(RMSE) |
|---|---|---|
| SRTM 30m | 30米 | 约10米 |
| ASTER GDEM | 30米 | 约15-20米 |
| LiDAR | 0.5-2米 | 0.1-0.5米 |
看到了吗?同样是30米分辨率,SRTM和ASTER的精度差了一倍。为什么会这样?因为SRTM用的是雷达干涉测量,ASTER用的是光学立体像对。原理不同,精度自然不同。
常用DEM格式:GeoTIFF vs DTED
格式问题,说白了就是「怎么把高程数据存到文件里」。我主要用两种格式:
GeoTIFF
这是我最喜欢的格式。它把图像数据和地理坐标信息打包在一起。你打开一个GeoTIFF文件,看到的是一张灰度图,每个像素的值就是高程。嗯,这里要注意:GeoTIFF支持多种位深,16位整型最常用,精度够用,文件也不大。
# 用GDAL读取GeoTIFF的示例
from osgeo import gdal
dataset = gdal.Open('srtm_30m.tif')
band = dataset.GetRasterBand(1)
elevation = band.ReadAsArray()
print(f"高程范围: {elevation.min()} ~ {elevation.max()} 米")
# 输出:高程范围: 0 ~ 8848 米
DTED(Digital Terrain Elevation Data)
这是美国国防部的标准格式。我早期做军工项目时接触最多。DTED分三个级别:DTED0(约900米分辨率)、DTED1(约90米)、DTED2(约30米)。它的结构很死板,但兼容性极好,几乎所有导航系统都支持。
坐标系与投影:别让坐标把你坑了
这是DEM应用中最容易出问题的地方。我见过太多人因为坐标系搞错,导致导航结果偏到姥姥家去了。
先说坐标系。DEM数据常用的坐标系有:
- 地理坐标系:WGS84(经纬度)。SRTM、ASTER都用这个。简单直观,但计算距离时麻烦。
- 投影坐标系:UTM(通用横轴墨卡托)。把地球表面投影到平面上,距离计算方便。我建议做地形匹配时,先把DEM转成UTM,再处理。
再说投影。UTM把地球分成60个带,每个带6度。中国主要覆盖UTM 43-53带。嗯,这里有个坑:同一个地方,不同带的UTM坐标值差很大。我曾经有个同事,把北京的数据用了UTM 50带的投影,结果算出来的位置偏了300多公里。
知识体系结构图
下面这张图,是我自己总结的DEM知识体系。你把它存下来,以后遇到DEM相关的问题,先看这张图,心里就有数了。
好了,DEM基础就讲到这里。记住一句话:DEM是地形匹配导航的「地图」,地图不准,导航必偏。下一节我们讲怎么用DEM做地形匹配算法,到时候我会分享一些实战中的坑和技巧。