ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

青海省30米DEM处理全流程:从数据源选择到DSM转DEM实操

青海省30米DEM处理全流程:从数据源选择到DSM转DEM实操 简介数字高程模型DEM是地形分析与水文模拟的基础数据分辨率选择直接影响计算成本与结果精度。对省级尺度的地形研究而言30米分辨率往往是在细节与效率之间的最佳平衡点。开源DEM数据源众多SRTM、ASTER、ALOS与Copernicus GLO-30各有优劣其中基于雷达干涉测量的GLO-30因精度高、覆盖稳而成为推荐首选。同时GLO-30本质为数字表面模型DSM在森林与建成区需转换为DEM才能用于填洼、河网提取或坡度坡向分析。青海省地形起伏剧烈从批量下载、拼接裁剪、投影转换到空值填补每一步都有实操陷阱。本文梳理了完整的30米DEM处理流程并结合水文分析、地质灾害评估及三维可视化等应用场景帮助读者理解如何高效获取并正确使用省级DEM数据。 上周帮人做青海省的地形分析对方上来就问了一句青海省DEM用30米分辨率够不够我反问他一句你要拿DEM干什么填洼提河网还是做三维展示还是算坡度坡向这事如果没想清楚数据下载一百个G也白搭。我自己的结论很明确青海省范围大、地形起伏剧烈30米分辨率是“性价比天花板”再高一点全流程的处理时间、存储空间、运算成本都会翻着跟头涨。这篇就把我从找数据、下数据、拼数据、处理数据到最终出图的完整流程捋一遍里面包含开源数据源对比、Copernicus GLO-30下载与拼接、DSM转DEM的实操细节以及我踩过的坑和排查方法。1. 为什么选30米分辨率先搞清楚需求再动手1.1 分辨率不是越高越好先算一笔账很多人一上来就找“最高精度”的DEM好像分辨率越高越专业。但实际干活的人都明白高分辨率意味着高成本。这里我给一个非常直观的账按青海省约72万平方公里算如果只用1米分辨率数据单景文件就是天文数字全省拼接起来的栅格量级会让普通工作站直接崩溃就算强行处理完后续的水文分析、填洼计算、河流提取也可能要跑几天几夜。而30米分辨率的数据全省大约只需要几百MB到几个GB的量级用GDAL的脚本处理一个普通笔记本就能跑完。分辨率的选择本质上是在“空间细节”和“计算成本”之间找平衡点。30米这个段位恰好能满足区域尺度地形分析的大部分需求流域划分、河网提取、坡度坡向、地貌分类、可视域分析全都没有问题。尤其青海省这种高原省份主要地形单元是山地、盆地、台地和谷地30米的网格能清晰捕捉到主沟谷和山脊线不会把关键地形信息抹掉。如果你要做城市内涝这种以建筑和道路为对象的精细模拟那30米肯定不够但如果你要做的是省级水文模拟或生态评估30米反而是最合适的起点。这个判断不是我拍脑袋得出的。目前国内外主流的中尺度模型和生态模型比如SWAT水文模型、部分气候模式的地形输入都默认使用30米或类似精度的DEM。原因很简单30米与这些模型本身的网格尺度匹配分辨率再高对模型结果的提升有限反而白白增加运算量。所以在拿到需求之后我通常先问三个问题分析尺度多大要提取什么参数对精度的敏感度有多高把这三个问题答完分辨率基本就定了。1.2 青海省的地形特征与数据现实青海省地处青藏高原东北部平均海拔在3000米以上全省地形从北部的祁连山、中部的柴达木盆地到南部的唐古拉山垂直高差巨大。这种地形对DEM数据有一个直接要求数据源的垂直精度必须可靠否则坡度、坡向这些衍生参数会严重失真。在实际操作中我发现青海省这种高海拔、多裸岩、少植被的区域反而是DEM数据质量最容易出现问题的“重灾区”。因为很多开源DEM在植被茂密区域的表现好坏不好说但在冰川、积雪、陡峭峡谷地带不同数据源之间的差异会非常明显。比如SRTM在扫描时受到雷达阴影和叠掩的影响在一些深切河谷里会产生空洞或异常条带而光学立体像对生成的ASTER DEM在云雪覆盖区域也容易出现无效值。这些“有的选”而不是“没得选”的现实决定了我们在选数据源时必须结合青海省的真实地形特点做判断。我自己的经验是优先选基于干涉雷达测量获取的数据源。因为干涉雷达不受云层影响且对地形轮廓的捕捉更“扎实”。在30米这个分辨率上Copernicus GLO-30是当前综合表现最稳的开源数据源下面我会详细对比各个数据源再给出推荐理由。2. 开源DEM数据源盘点谁才是30米这个段位的首选2.1 常见的30米级开源DEM一说到开源DEM大多数人第一反应是SRTM第二反应是ASTER。这两个确实是老牌数据源但30米这个段位现在已经有更多选择。我按“实际使用频率”来盘一盘SRTMShuttle Radar Topography Mission。2000年由NASA、NGA等机构联合获取覆盖范围大约在56°S到60°N之间。经过多次版本更新目前常见的版本是SRTMGL1也就是俗称的SRTM V3全球范围内都重采样到了30米分辨率1弧秒。它的优点是覆盖范围稳定、数据成熟、使用面广缺点是在高纬度和一些极端地形区域覆盖缺失而且数据采集于2000年距今已经二十多年部分地区地形比如矿区、新城建设区域已经发生变化。ASTER GDEMAdvanced Spaceborne Thermal Emission and Reflection Radiometer Global DEM。由日本METI和美国NASA联合发布通过ASTER传感器的光学立体像对生成。目前公开的最新版本是V3分辨率也是30米。ASTER的覆盖范围比SRTM更广几乎覆盖全球陆地区域但在细节表现上不如雷达数据稳定在云覆盖区域容易产生数据空洞和异常值。ALOS AW3D30Advanced Land Observing Satellite World 3D - 30m。日本JAXA发布基于ALOS卫星的PRISM立体传感器数据生成分辨率30米。AW3D30在部分区域的平面精度很高细节表现也不错但整体覆盖范围和数据获取连续性不如前面两个数据源在某些区域的质量也参差不齐。Copernicus DEM GLO-30Copernicus Global 30 m DEM。欧洲航天局ESA发布基于2011年至2015年的TanDEM-X雷达干涉测量数据生成。这个数据源是目前30米级开源DEM里“底子”最好的一个因为TanDEM-X本身就是专门为高精度地形测量设计的双星干涉雷达系统。它不依赖光学影像因此基本不受云层影响全球覆盖范围广泛垂直精度标称通常在4米左右实际在很多区域的表现比SRTM和ASTER都要好。FABDEMForest And Buildings removed DEM。英国布里斯托大学基于Copernicus GLO-30生成通过模型去掉森林和建筑物高度后得到。它的分辨率同样是30米可以看作是“去掉了地表覆盖物”的GLO-30更接近裸土地形的真实情况。我在后面的DSM转DEM部分会重点讲它。2.2 一张表看透数据源差异光说概念不够直观我直接把常用的几个数据源放在一张表里对比方便你按需求快速定位。数据源发布机构分辨率数据获取方式垂直精度参考优点缺点SRTM V3NASA/NGA30米2000年雷达干涉约6-10米成熟稳定、生态完善时间老、局部空洞ASTER GDEM V3METI/NASA30米光学立体像对约7-14米覆盖广空洞噪声较多ALOS AW3D30JAXA30米光学立体像对约5-10米平面精度较好覆盖和质量不均Copernicus GLO-30ESA30米2011-2015年雷达干涉约4米质量均衡、新、干扰少仍是DSM需去植被FABDEMBristol大学30米由GLO-30加工约4米已去除植被和建筑依赖GLO-30质量2.3 我为什么把Copernicus GLO-30放在第一位如果只让我推荐一个数据源我会毫不犹豫说Copernicus GLO-30。理由很简单它是目前唯一一个“专门为高质量地形测量”设计的数据源。TanDEM-X双星系统在2011到2015年间通过干涉雷达的方式对全球陆地进行了多次扫描最终生产出高精度的全球DEM这个“出身”就决定了它在很多区域的表现不会差。我在青海湖周边的实测对比里GLO-30在平坦湖滨区域的高程变化曲线非常平滑而ASTER在该区域会出现明显的锯齿状跳变。另外GLO-30的全球数据以1°×1°图幅为单位分发命名规则清晰方便通过脚本批量下载。而且它还有数字表面模型DSM和经过处理的DEM版本之分即便是DSM版本在裸岩和草地区域也基本可以直接当作DEM使用。这一点对青海省这种大范围植被稀疏的区域来说非常友好——不需要做太多额外处理就能得到高质量的高程数据。当然我也要提醒一句GLO-30本质上仍然是DSM数字表面模型它记录的是地物“最外层表面”的高度。在森林和城市区域直接使用GLO-30做水文分析的话会有额外的高度偏差。第4章我会专门讲DSM转DEM的实操方法这也是很多人忽略的关键一步。3. 青海省DEM获取实操从下载到拼接裁剪一条龙3.1 下载前的准备工作边界和范围数据源定了接下来就是下载和数据预处理。第一步是准备青海省的边界矢量这一步千万别偷懒。我见过不少人直接手工画一个矩形框裁剪结果做出来的DEM地图边界四四方方看起来很业余。正确做法是拿到精细的省级行政区划边界最好是带缓冲区的边界或者是自己在QGIS里把边界加一个1到2公里的外扩保证后续分析范围不会因为边界贴合过紧而出错。青海省的范围大约是北纬31°36′至39°19′东经89°35′至103°04′东西跨度超过14个经度南北跨度接近8个纬度。对应到Copernicus GLO-30的1°×1°图幅大约需要下载一百多个图幅。如果手工在网站上一个个点工作量巨大。这里我更推荐用命令行直接批量下载下面会给出具体方案。3.2 拿到数据后的拼接与裁剪Copernicus GLO-30数据的下载渠道很多OpenTopography门户网站提供网页版框选下载AWS的公开数据集则提供命令行批量下载。我个人习惯用AWS S3的公开桶因为它的文件命名规则非常清晰文件名格式类似Copernicus_DSM_COG_10_N36_00_E097_00_DEM.tif从文件名里可以直接看出图幅中心点的经纬度坐标比如N36_00_E097_00就代表北纬36度、东经97度这一幅。这样我就能根据青海省的范围用脚本生成所有需要的文件名然后批量下载。# 列出图幅 aws s3 ls s3://copernicus-dem-30m/ --no-sign-request | grep N3[1-9]_00_E | grep E0[0-9][0-9]_00 # 批量下载到本地目录 mkdir -p qinghai_tiles cd qinghai_tiles aws s3 cp s3://copernicus-dem-30m/Copernicus_DSM_COG_10_N36_00_E097_00_DEM.tif . --no-sign-request全部图幅下载完成后先用gdal_merge.py做一个整体拼接把一百多个图幅合成为一张青海省区域的完整栅格# 把文件名写入列表文件避免命令行参数过长 ls Copernicus_DSM_COG_10_N*.tif filelist.txt gdal_merge.py -o qinghai_merged.tif -co COMPRESSDEFLATE --optfile filelist.txt拼接完成后的文件可能还包含省外区域接下来用青海省边界裁剪。这一步我建议用gdalwarp的-cutline参数一步到位gdalwarp -cutline qinghai_boundary.shp -crop_to_cutline \ -dstnodata -32767 -co COMPRESSDEFLATE -overwrite \ qinghai_merged.tif qinghai_dem_30m.tif注意-dstnodata -32767这个参数它会把边界外的像素统一设置为一个无效值。这样后续做填洼和坡度计算时就不会出现边缘像素异常溢出影响结果的情况。3.3 投影与坐标参考系别让坐标系坑了你下载得到的GLO-30数据通常以WGS84经纬度坐标发布EPSG代码是4326。这种坐标系适合全球范围的数据分发但不适合做精确的面积计算和距离分析。在青海省这种大跨度区域我建议在拼接裁剪完成后把数据转换为更适合大范围分析的Albers等积投影或者根据具体目标选择适合的投影。我的经验是如果目标是制图输出和面积统计用Albers等积投影中央经线取96°E两条标准纬线取25°N和47°N左右这样整个青海省范围内的变形最小。如果目标是做局部流域分析比如单条河流的子流域提取直接使用对应的UTM投影或者高斯-克吕格投影会更合适。# 转Albers等积投影 gdalwarp -t_srs projaea lat_125 lat_247 lat_00 lon_096 x_00 y_00 datumWGS84 unitsm no_defs \ qinghai_dem_30m.tif qinghai_dem_30m_albers.tif4. DSM转DEM这一步不能省4.1 DSM和DEM到底差在哪先把概念捋清楚。DSM全称Digital Surface Model数字表面模型记录的是地物最表面的高度包括树冠、房顶、电线塔这些东西。DEM全称Digital Elevation Model数字高程模型记录的是裸地表面的高度。你可以把DSM理解成“站在树顶看地面”而DEM是“把树砍掉后再看地面”。为什么要强调这个区别因为在高分辨率遥感应用里DSM和DEM的差异直接决定分析结论。比如做洪水淹没模拟时如果用DSM森林区域的高程会明显偏高水流会绕开或改变方向模拟结果和实际相差很大。做坡度分析时如果用DSM树冠表面的坡度变化会被错误识别为地形坡度。而青海省虽然整体植被稀疏但在东部和东南部的草原、灌木区域以及一些河谷林地区域DSM和DEM的差异依然存在不能视而不见。Copernicus GLO-30官方发布的就是DSM所以严格来说要把它当作DEM用需要先做“去地表覆盖物”的处理也就是DSM生成DEM的过程。这也是很多初学者踩坑最多的地方——拿着GLO-30当DEM直接用在高植被覆盖区域分析结果失真还不知道问题出在哪。4.2 直接方案用FABDEM取代裸DEM如果不想在“去植被”上花太多时间最省事的方案是直接使用FABDEM数据。FABDEMForest And Buildings removed DEM就是布里斯托大学团队基于GLO-30做的加工产品他们已经用机器学习模型把森林和建筑物高度从原始DSM中移除输出的是更接近裸地形的DEM。使用FABDEM有个很明显的优势它和GLO-30的分辨率一致30米坐标系一致处理流程完全通用。在我的实际操作中FABDEM在青海省河谷林区域的效果明显优于直接使用GLO-30地形剖面线更平滑没有那种“树冠顶出来的刺”。唯一的缺点是它基于GLO-30生产所以GLO-30在个别区域的空洞或噪声也会继承过来。获取FABDEM的方式也比较简单布里斯托大学的官方数据仓库提供全球分幅下载或者通过GEE等平台直接加载。在GEE里可以直接这样取数// GEE中加载FABDEM数据集 var fabdem ee.Image(projects/sat-io/open-datasets/FABDEM/FABDEM_v1-2); // 导出青海省范围的FABDEM Export.image.toDrive({ image: fabdem, description: qinghai_fabdem, scale: 30, region: qinghai_boundary, maxPixels: 1e13, fileFormat: GeoTIFF });4.3 动手方案基于树高数据做校正如果因为项目要求必须使用GLO-30原始数据那就需要自己做DSM转DEM的校正。通用的方法是用全球树高数据做“减法”。具体而言先加载全球树高产品比如ETH发布的10米全球树高数据然后把DSM中对应于森林区域的高程减去树高得到近似的裸地高程。在GEE里可以这样实现一个简化版处理// 加载Copernicus GLO-30 var dsm ee.Image(COPERNICUS/DEM/GLO30); // 加载ETH 10米全球树高数据 var treeHeight ee.Image(users/nlang/ETH_GlobalCanopyHeight_2020_10m_v1); // 树高阈值判断只处理树高大于5米的区域 var forestMask treeHeight.gt(5); // 从DSM中减去树高注意乘一个经验系数 var dem dsm.subtract(treeHeight.multiply(0.8)).updateMask(forestMask); // 导出结果 Export.image.toDrive({ image: dem, description: qinghai_dem_corrected, scale: 30, region: qinghai_boundary, maxPixels: 1e13, fileFormat: GeoTIFF });注意上面代码里的multiply(0.8)这个0.8是我根据经验加的一个“树高折减系数”。原因很简单树高数据本身存在测量误差且树冠的实际表面高度往往比树高数据偏低直接用1.0去减很容易把地面挖出一个凹坑。这个系数没有一个放之四海而皆准的值需要结合当地典型植被高度和实测点校核。如果你不想引入太多主观经验那就老老实实用FABDEM它在全球范围内已经做过系统校准。4.4 校正后要做的质量验证不管是直接用FABDEM还是自己校正处理之后都必须做质量验证。我常用的验证方法是找一批已知高程的控制点比如实测的GPS点、已有的测绘控制点数据与处理后的DEM对应位置的高程值做差异统计看均值误差和均方根误差是否在合理范围内。在青海省这种地形起伏大的区域我还会专门看地形剖面线观察处理后的DEM在沟谷和山脊处的形态是否自然如果出现锯齿状跳变或者明显的洼地说明校正过度或者数据源本身有噪声。另一个快速验证的办法是把处理前后的DEM都做一次坡度分析检查森林区域坡度是否明显降低——如果坡度没有显著变化说明“去植被”动作可能没有生效。5. 质量检查与常见问题排查实录5.1 空值与“黑洞”怎么填补在实际处理中我最常遇到的问题是数据空洞。GLO-30在陡峭山谷、高反射率地表和水体周边区域偶尔会出现无效像素表现在影像上就是一个个“黑洞”。这些黑洞如果不去处理后续水文分析时会产生大量伪洼地河流提取结果直接“断头”。处理空值的标准方法是用邻域插值。GDAL提供了gdal_fillnodata.py工具可以根据空洞周围的有效像素进行插值填补# 填补nodata空洞设定搜索半径 gdal_fillnodata.py -md 10 qinghai_dem_30m.tif qinghai_dem_filled.tif这里的-md 10表示最大搜索距离为10个像素也就是300米范围。如果空洞面积特别大比如被大片云雪覆盖的区域靠插值填补可能会掩盖真实地形这种情况下建议直接寻找替代数据源或者检查原始图幅是否下载完整。5.2 拼接后的接边与条带问题多图幅拼接后另一个常见问题是“接边差”。不同图幅之间因为获取时间、传感器状态的差异在接边处可能产生细小的系统高程偏差表现为影像上的“接缝”。这个问题在大范围拼接时尤其明显一百多个图幅拼起来如果每一条边都有几米偏差整个区域的拼接结果就像一件打满补丁的衣服。排查接边问题的手段是先可视化检查再用统计方式量化。我通常会在拼接结果上叠加一个1°×1°的格网对每个格网统计其高程均值和中位数如果某个格网与相邻格网之间存在明显跳跃就需要重点检查那个图幅的原始数据。轻度的接边差可以用局部直方图匹配或低通滤波来缓解但严重的话建议重新检查对应图幅的下载质量而不是盲目平滑。5.3 垂直基准与椭球高的坑还有一个容易被新手忽略的问题垂直基准。Copernicus GLO-30的高程值是相对于WGS84椭球面的椭球高而我们日常所说的“海拔”是相对于大地水准面的正常高。在很多低海拔地区椭球高与正常高之间的差异只有几米甚至忽略不计但在青藏高原这种大地水准面起伏剧烈的区域二者之间的差异可能达到几十米。如果你只是做坡度、坡向、流域分析垂直基准的差异不会影响结果因为这些参数基于相对高差。但如果你需要与实测海拔点对比或需要输出绝对海拔数据给其他模型用就必须做垂直基准转换。常见做法是引入EGM2008大地水准面模型把椭球高减去本地大地水准面差距得到正常高。ArcGIS和QGIS都有现成工具支持这个操作这里不展开命令但一定要在数据处理流程里留意这一步否则你拿到的DEM高程值和实测点永远对不上。5.4 常见问题速查表我把这些年在DEM处理中遇到的高频问题整理成一张速查表方便直接对照排查。问题现象可能原因解决方法局部区域出现“黑洞”空值雷达阴影、水体反射、原始数据缺测使用gdal_fillnodata插值填补严重时更换数据源拼接后有明显的条带或接缝不同图幅获取时间或轨道差异检查图幅原始质量用直方图匹配消除系统间差高程值与实测点相差几十米垂直基准不一致椭球高未转换引入EGM2008大地水准面模型做垂直基准转换森林区域地形起伏异常直接使用了DSM未去除树冠高度使用FABDEM或基于树高数据做DSM转DEM边界外有大量异常像素裁剪前未设置nodata值重新执行裁剪添加-dstnodata参数坡度分析结果偏大分辨率太高导致局部噪声被放大对DEM做轻度平滑或者检查原始数据是否含噪声6. 处理完的DEM能干什么几个实际应用方向6.1 水文分析提取河网与流域拿到处理好的青海省30米分辨率DEM之后最常见的应用就是水文分析。水流从高处往低处流DEM正好记录了这些高低起伏。通过填洼、计算流向、计算累积流量、设定汇流累积阈值就能自动提取出河网并划分出子流域。以青海省为例黄河穿省而过澜沧江源头也在这里如果要做源头区的水资源评估30米DEM是一个非常适合的输入。填洼这一步我特别提醒一句原始DEM里总有一些“假洼地”可能是数据噪声也可能是插值遗留的伪地形。直接填洼会把真实的地貌洼地也填掉影响后续的汇流路径。比较稳妥的做法是先分析洼地深度设定一个合理的填洼阈值只填掉那些浅的和面积小的伪洼地保留真正的地形特征。6.2 地形因子与地质灾害分析30米DEM在青海省的地质灾害风险评估中也很有价值。从DEM可以派生出坡度、坡向、地形粗糙度、地形湿度指数等地形因子。比如在滑坡敏感性分析中坡度是核心变量之一30米分辨率足够识别出大范围的陡坡区域配合地质图和降雨数据做出初步的易发性分区。在青海省这种高海拔地区冻融作用导致的地表变化需要长期监测不同年份的DEM做差分还能粗略识别地表垂直形变趋势。虽然30米分辨率对微小的形变不敏感但对大规模侵蚀、滑坡体边界描绘依然有意义。我自己在项目里就做过一次DEM差分用于评估某河谷区域近十年间的堆积与侵蚀范围效果比单纯看影像直观得多。6.3 三维可视化与辐射分析如果说前面的应用都偏“理性计算”那三维可视化就是DEM的“感官输出”。把30米DEM转换为山体阴影图再叠加卫星影像可以生成非常震撼的青海省三维地形图。用QGIS的Qgis2threejs插件或者Blender里直接导入DEM栅格几分钟就能出一个可交互的三维地形模型。另外DEM还可以用于太阳辐射分析。基于坡度、坡向和高程可以模拟地表接收的太阳辐射量这在生态学研究中很有用比如估算不同坡向的高山草甸生产力或者评估光伏电站选址的可行性。青海省日照资源丰富这类“DEM辐射模型”的组合应用空间很大。我个人的建议是第一次接触DEM数据处理的读者不要贪多求全。先拿一个局部区域比如青海湖周边或者某一个县的范围走一遍“下载-拼接-裁剪-DSM校正-填洼-坡度计算”的完整流程把每一步的输出都停下来看一眼确认数据形态正常再继续。这套流程走通之后再扩展到全省范围你就能做到心中有数每一步都不会慌。另外再分享一个小习惯处理DEM这种大文件时一定要给每步输出起清晰的名字最好加版本号或日期后缀比如qinghai_dem_30m_filled_v2.tif。因为中间过程文件非常多如果没有清晰的命名规范最后你会面对一堆没有意义的tif完全分不清哪个是哪个只能重新跑一遍流程。这个习惯我从入行保留到现在帮我省了无数返工的时间。本文还有配套的精品资源点击获取
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进