news 2026/9/9 13:20:46

中国地形数据DEM处理:从选型下载到坐标系与预处理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
中国地形数据DEM处理:从选型下载到坐标系与预处理

简介:面向GIS与遥感学习者及规划分析人员的一份中国地形栅格数据,压缩包解压后即可在ArcGIS中加载使用。包体内共5个文件,主文件为TIFF格式地形栅格,配套OVR金字塔可加快缩放显示,TFW世界文件用于地理配准,两个XML文件保存元数据与辅助信息,整体仅7.54MB,轻量便捷。已有1872人学习下载。数据反映中国地势西高东低、呈阶梯状分布、自西向东逐级下降的特点,可支撑地形起伏分析、坡度坡向计算、水文分析、可视域分析以及自然地理教学演示等场景。对于需要直接使用标准地形底图的用户,免去了自行下载、裁剪和配准的流程,便于后续与行政区划、河流道路等矢量数据叠加,开展区域规划和资源环境研究。 做地图可视化、地形分析或者户外路线规划的人,早晚都要跟“中国地形数据”这几个字硬碰硬。我第一次给客户做全国山区三维地形底图时,以为从网上下载一份全球DEM裁一下就完事,结果被掩膜偏移、数据空洞、坐标参数三个问题连续折腾了几个晚上。后来坑踩得多了,才摸清一套相对稳定的做法。这篇文章围绕中国地形数据的选型、下载、坐标系处理和预处理链路展开,把容易出问题的环节一次说清楚,适合刚开始接触DEM的GIS学生、做可视化开发的前端,以及需要用地形数据做分析、规划和制图的人。

1. 中国区域地形数据源:不要一上来就只认SRTM

1.1 主流公开DEM的精度与适用场景

公开的高程模型里,最常被提到的是SRTM、ASTER GDEM、ALOS AW3D30和NASADEM这四类,另外还有一公里分辨率的GTOPO30用于宏观底图。它们都不是“越新越好”,而是各有脾气。

SRTM由NASA和NGA在2000年通过航天飞机干涉雷达测量得到,全球覆盖范围到北纬60度左右,中国全境都在里面。常用的V3版本提供1弧秒约30米分辨率,在东部平原和丘陵地区表现比较干净,但在西部高山峡谷区偶尔会出现数据空洞。ASTER GDEM V3由日本METI和美国NASA基于光学立体像对生成,覆盖全球83度纬线之间,范围比SRTM广,分辨率同样是30米,但南方多云地区容易出现伪影和条纹。ALOS AW3D30是日本JAXA基于ALOS卫星PRISM立体相机生产的30米数据,山区细节往往比SRTM丰富,不过在植被密集或城区边缘会有异常颗粒。NASADEM是在原始SRTM基础上融合其他数据源修复后的版本,30米分辨率,空洞大幅减少,高度过渡更自然。

同一片区域,四个数据源画出来不完全一样。做全国性可视化时这些差异不明显,但放大到一块山谷,沟谷走向、坡度分布、剖面线形状都能看出区别。选择标准只有一个:你的分析目标是什么。做宏观制图,SRTM或者ASTER都够;做山区流域提取,优先考虑ALOS与经过水系修正的数据;做工程选址或城市内涝分析,公开数据只是起点,最好再叠加局部高精度LiDAR。

1.2 各家数据在中国区域的实测表现

我拿中国几个特征明显的地貌区做过对比。甘肃和内蒙古的平坦高原上,SRTM与ALOS相差不大,30米分辨率对宽缓地形来说非常充裕,甚至90米重采样后视觉差异也不明显。到了横断山脉这类切割强烈的区域,SRTM的坡面有时会出现阶梯状纹理,ASTER GDEM在陡坡处偶尔出现“麻点”,ALOS的立体轮廓会更贴近实际山脊线。青藏高原的高海拔区域,SRTM早期版本有一些无数据空洞,NASADEM修复后基本消失,而ASTER在雪线附近偶尔会有异常高值。

平原地区反而是更容易被忽略的坑。长江中下游、华北平原的高差往往只有几十米,30米和90米DEM看起来都是平的,但一旦做洪水淹没模拟或排水路径分析,原始数据里的微小噪声会被放大成假河道。我在这种区域更倾向用经过水文修正的地形数据,或者先把DEM做一次低通滤波,代价是会损失一点细节,但分析结果稳定很多。

1.3 从哪里下载最快、最省事

国内用户下载中国区域地形数据,最常用的是地理空间数据云,提供SRTM 90米、ASTER GDEM 30米等公开数据,优点是访问稳定、无需额外工具就可以按行政区划检索。USGS EarthExplorer是获取SRTM与NASADEM的官方渠道,需要注册账号,但数据最全。JAXA官网提供ALOS AW3D30的免费下载,OpenTopography也聚合了多个数据源,还支持在线处理。

下载时注意几个细节:地理空间数据云上的SRTM 90米实际上是3弧秒重采样版本,做局部精细分析会显得不够用;USGS下载NASADEM时,填写坐标范围最好给目标区域多留一点边距,避免数据边缘缺一圈;ALOS数据下载是按分幅文件给出的,拼接前先确认相邻幅之间有没有重叠带,部分版本边缘存在系统性的微小高差。

2. 坐标系与投影问题:中国地形数据的第一道坎

2.1 WGS84、CGCS2000、高斯-克吕格到底怎么选

大部分公开DEM的原始坐标都是WGS84地理坐标系,也就是经纬度。中国官方测绘成果普遍采用CGCS2000坐标系,从数值上看,两者在中国区域的差异通常在几十厘米到一两米之间,做地形可视化几乎看不出来,但涉及国土面积计算、土地确权、与高精度控制点叠加时,必须统一到CGCS2000。

另一个更实际的问题是投影。经纬度数据直接用于测距、算面积、算坡度都会出问题。全国尺度的地形制图常用Albers等积投影,它在中国范围内面积变形比较小;发布到网页端时又常用Web Mercator,也就是EPSG:3857,符合在线地图的切片规则。局部工程分析,比如一段公路纵断面的坡度计算,应采用高斯-克吕格投影或UTM投影,选对应中央经线的分带,距离和角度会更接近地面真值。

2.2 用经纬度DEM直接算坡度,结果会偏到离谱

很多刚接触DEM的人栽在这里。原始DEM水平单位是度,垂直单位是米,直接丢进坡度工具,软件默认把度当水平距离算,一个像元在纬度方向的实际距离将近111公里,而高程差只有几米,算出来的坡度要么大得夸张,要么接近零。GDAL里处理经纬度DEM时,需要给坡度计算指定高程比例因子,常用参数是-s 111120,即1度约等于111120米。QGIS的坡度工具里也有类似的Scale参数,不填就默认按单位一致处理。

更省心的方法是把DEM先投影到以米为单位的投影坐标系,再计算坡度、坡向、山体阴影等派生数据。对全国范围来说,先转成Albers投影或UTM投影,然后算坡度、剖面曲率,结果在几何上更合理。你付出的代价只是多一次重采样,但对后续分析的可靠性提升非常明显。

2.3 GDAL投影转换与重采样的常用命令

如果你装了GDAL,下面这些命令可以覆盖大部分场景。把经纬度DEM转成CGCS2000经纬度坐标:

gdalwarp -t_srs EPSG:4490 -r bilinear -of GTiff input_wgs84.tif output_cgcs2000.tif

把全国范围的DEM按边界矢量裁剪并转到Web Mercator:

gdalwarp -cutline china_boundary.shp -crop_to_cutline -t_srs EPSG:3857 -r bilinear -of GTiff china_dem.vrt china_dem_3857.tif

重采样方法的选择也影响结果。地形连续面建议用双线性插值或三次卷积,不要用最近邻,否则坡面会出现明显的锯齿;但分类数据、掩膜数据一定要用最近邻,避免产生假类别。

3. 从原始DEM到可用成果:一条完整的预处理链路

3.1 拼接裁剪:用VRT避免一开始就撑爆内存

中国全境的30米DEM如果全部拼接成一个GeoTIFF,像素数量超过100亿,以Float32存储约几十GB,直接操作会非常吃力。更聪明的做法是先用虚拟栅格管理多幅原始数据,不复制数据,只建立索引关系:

gdalbuildvrt china_dem.vrt SRTM_N28E086.tif SRTM_N29E086.tif ...

之后所有分析命令都可以直接读取这个VRT文件,GDAL会在读取时动态拼接。等到需要正式输出成果时,再通过裁剪或重采样生成一个小体积的GeoTIFF。这比一开始就“咔嚓”一下拼成一张巨型栅格图要稳定得多。

裁剪时如果边界矢量与DEM范围不完全重合,可能出现边缘细线或缺失行,解决办法是裁剪前对矢量做几十米的负缓冲区,消除边界混合像元的影响。先裁剪到目标区域,再根据实际需要重采样,能大大减小后续处理的数据量。

3.2 空洞检查与填补,不能假装看不见

SRTM、ALOS等数据在局部区域会有无数据值,ASTER GDEM在云覆盖地区还会出现异常低的坑洞。这些空洞在做山体阴影时看起来像黑斑,做填洼和水文分析时会造成假凹陷。第一步一定要检查空洞:

gdalinfo -stats china_dem.tif

重点关注NoData值和最小最大值。如果看到大面积的的-32768、0或者异常脉冲高值,就要先处理。轻量的空洞可以用GDAL的插值工具填补:

gdal_fillnodata.py -md 100 -si 1 input_dem.tif output_filled.tif

-md 100表示最大插值距离100个像元,-si表示平滑迭代次数。空洞范围很大时,可以用另一套数据源填充,比如用NASADEM补SRTM空值,方法是用gdal_calc将有效区域的选择逻辑写成表达式,把辅助数据源的值填入空值位置。

3.3 派生数据的生产:坡度、山体阴影与分级设色

预处理做完之后,常见的第一步是出图。我一般先生产三份数据:山体阴影用于底图纹理、坡度用于分析、彩色高程分级用于视觉叠加。山体阴影常用命令:

gdaldem hillshade china_dem.tif china_hs.tif -z 2.5 -az 315 -alt 45

-z是垂直夸张倍数,平原地区用1.5到2,山地可以调到3。坡度计算在投影坐标系下进行,如果DEM已经是米制投影,就不需要额外的scale参数:

gdaldem slope china_dem_tmerc.tif china_slope.tif -p

分级设色需要提前准备一个颜色配置文件,把不同海拔映射成不同颜色。一个适用于全国范围的色带示例:

-156 30 144 255 0 173 216 230 200 145 200 80 500 190 230 120 1000 240 230 140 2000 210 180 140 4000 190 120 80 6000 240 245 245 8848 255 255 255

然后运行:

gdaldem color-relief china_dem.tif color_ramp.txt china_color.tif

这样得到的彩色地形图,再叠加山体阴影并调整透明度,质感和信息量都会好很多。

4. 做全国地形数据时容易踩的坑,我一并说清楚

4.1 DEM边缘和行政边界对不齐

用行政边界裁剪DEM后,经常发现边界处出现锯齿,或者河流、山谷线与边界生硬相交。原因是公开DEM的像元网格不可能和矢量边界完全重合,边界线切过像元中心时必然产生锯齿。处理思路不是去修改DEM,而是接受这个现实并做两道工序:先对边界矢量做负缓冲,让裁剪范围略小于真实边界,避免混合像元;裁剪后对边缘几行像元做一下平滑,或者用中值滤波清理孤立的异常值。做全国底图时,最稳妥的做法是预留一个“晕渲带”,让DEM被边界裁掉后仍然保留地形纹理的自然延伸。

4.2 数据空洞、条纹与“海洋零值”的坑

不同数据源的空洞形态不一样。SRTM在高山阴影区是零散的小洞,ALOS在云层覆盖区域是成片的噪声,ASTER GDEM则是成排的南北向条纹。除了用fillnodata填补,还要检查条纹。对ASTER这类条纹,可以在频域滤波处理,也可以用一个9x9或11x11的低通滤波把条纹压下去,但会损失一部分真实地形细节。另一个隐蔽问题是海洋和内陆湖泊的高程值。如果DEM没有预先掩膜,海洋会被设置为0或NoData,做全国渲染时会把海平面变成一片突兀的蓝色或黑色,这时候要把水体掩膜叠加进来,单独处理零值区域。

4.3 大范围渲染卡死不是电脑的问题

全国30米DEM渲染卡死,原因往往是直接把一整块大栅格丢给渲染器,没有构建金字塔。无论电脑内存多大,加载上百亿个像素都是灾难。正确的做法是先建概览金字塔,或者在发布前转成COG格式,利用COG的局部读取特性按需加载数据。GDAL里快速构建概览:

gdaladdo -r average china_dem.tif 2 4 8 16 32 64

处理超大范围时,我通常把全国DEM重采样到500米左右做宏观显示,只在中大比例尺的局部区域保留30米甚至更高分辨率的数据。制图输出也是同理:最终成图图幅大小决定了数据量上限,几千乘几千像素的图根本不需要30米原始分辨率。

5. 我现在做中国地形数据的标准工作流

5.1 一套可以抄作业的分步流程

逐步总结下来,我现在拿到一个新的中国区域需求,基本按照下面这个顺序处理,效率高,返工少。

第一步,明确范围和目的。是全国宏观可视化、省域制图,还是局部流域分析。这直接决定数据源选择,全国范围我常用ASTER GDEM 30米做底图,局部山区会换ALOS,平原水文分析会用修正水系的数据。

第二步,下载数据并检查完整性。在USGS或者地理空间数据云按范围检索,把需要的分幅全部下载,用gdalinfo逐一确认坐标系、分辨率和NoData值。

第三步,建立VRT虚拟拼接,然后按目标坐标系重投影并裁剪。这一步把数百个分幅文件压缩成一个工作文件,后续所有分析都在这个基础上跑。

第四步,检查并填补空洞,做必要的平滑,然后生成坡度、山体阴影、彩色地形等派生数据。

第五步,用QGIS叠加检查。把彩色地形、山体阴影、矢量边界和河流叠加在一起,放大到1:5万左右目视检查一遍,确认没有明显空洞、条纹或者边界锯齿,然后才进入正式出图或分析阶段。

5.2 用QGIS快速验证成果质量

QGIS是我做质量检查的主要工具。加载DEM后先把渲染方式改成单波段假彩色,查看最大最小值是否在合理范围。然后调出地形剖面工具,在图上画一条穿越山脊和山谷的线,看剖面线是否平滑自然。如果剖面线出现密集的锯齿、突然的凹陷或尖刺,就要回头检查空洞填补和滤波参数。再把30米DEM派生出来的等高线叠加在卫星影像上,低海拔地区等高线不与河流平行,高海拔地区等高线不切过山脊,基本可以判定数据质量可靠。

5.3 向更远一步:等深线、地形分类与在线发布

如果只是想从DEM里提取等高线,GDAL一行命令就够了:

gdal_contour -a elev -i 50 input_dem.tif contour_50m.shp

-i 50表示等高距50米,在平原地区建议用10米或5米,山区用50米或100米,否则线太密没法看。地形分类需要结合海拔和起伏度计算,把中国地形分为平原、丘陵、山地、高原等类型,这一步可以用栅格计算器实现,核心是对海拔和邻域高差阈值进行分级。在线发布场景下,把处理好的DEM转成COG格式,配合Web地图服务或瓦片服务,可以让浏览器端非常流畅地加载大范围地形。

这套流程我已经在不同项目里跑了十几次,从全国三维沙盘到南方山区的径流模拟都覆盖到。数据源换来换去,预处理链路大体是一致的。

最后分享一个小经验:处理中国地形数据时,“数据不是越新越好、分辨率不是越高越好”这句话真的值钱。全国尺度的可视化,30米的数据和重采样后的500米数据在打印出来的图上几乎看不出区别,但处理效率差了几个数量级。做局部精细分析,与其纠结公开数据源之间那几米的差异,不如想办法拿到局部LiDAR或者无人机航测数据。想清楚分析对象和目标尺度,再去选数据源和参数,能省下大量返工时间。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/9 13:19:53

unity--webgl 访问本地index.html

目录 1:使用本地服务器 1.1 VSCode Live Server(最推荐,Cocos/Unity 通用) 1.2 使用 Python 的 SimpleHTTPServer 1.3 使用 Node.js 的 http-server 2:让其他人通过 IP 地址来访问你的 Unity WebGL 项目 2.1: 确保服务器可…

作者头像 李华
网站建设 2026/9/9 13:19:46

Proface GT触摸屏光纤张力控制系统配置实战解析

做工业现场这么多年,但凡涉及光纤相关的设备项目,GT系列触摸屏的出场率一直很高。最近刚好在做一个光纤张力控制系统,用Proface GT系列HMI配合PLC做整体控制配置,从GT Designer3软件联调、通信参数设置到控制回路的画面实现&#…

作者头像 李华
网站建设 2026/9/9 13:18:02

台达伺服调试实战:ASDA-Soft上位机软件从连接到调优全解析

简介:面向工业自动化设备调试与运动控制开发场景,台达伺服电机官方上位机软件合集覆盖A3、B3系列两个重要产品线——前者适配中低功率应用,后者满足高功率需求,并支持参数设置、惯量调整与故障诊断。压缩包共收录1624个文件&#…

作者头像 李华
网站建设 2026/9/9 13:16:30

Milvus DataNode Flowgraph 恢复机制设计深度解析

Milvus DataNode Flowgraph 恢复机制设计深度解析 【免费下载链接】milvus Milvus is a high-performance, cloud-native vector database built for scalable vector ANN search 项目地址: https://gitcode.com/GitHub_Trending/mi/milvus 本设计文档梳理了 Milvus 分布…

作者头像 李华
网站建设 2026/9/9 13:15:46

AI时代,Lisp为何是程序员保持独立思考的自留地?

最近在团队里聊AI编程,大家张口闭口都是Agent、Copilot、上下文窗口,我一个人在角落里用Emacs写着Lisp,被旁边的同事瞥了一眼,问了句:“你写这玩意儿,图啥?”我愣了一下,没接话。但这…

作者头像 李华
网站建设 2026/9/9 13:14:35

GESP C++ 5级备考指南:从数组指针到递归算法全解析

1. 为什么 5 级是 GESP 的分水岭——先看清考试定位1.1 5级到底考什么很多刚开始准备 CCF GESP 的同学,一上来就问“5级难不难”。我的答案是:它比 3 级、4 级难出一个明显的台阶,但还不至于像 7 级、8 级那样需要系统学完算法竞赛入门。说白…

作者头像 李华