资讯动态

云南省30米DEM处理全流程:从选型到填洼验证的实战指南

发布时间:2026/10/3 11:04:31 来源:尧图企业网站定制
简介云南省DEM30米分辨率数据集基于2019年发布的ASTER GDEM V3全球数字高程模型采用GeoTIFF格式与WGS84坐标系提供覆盖全省的高精度地形高程信息。数据源采用ASTER卫星遥感影像反演生成空间分辨率达三十米垂直精度满足区域级应用需求。该资源面向GIS开发者、测绘人员、环境与规划研究者适用于洪水风险评估、地质灾害分析、土地利用规划、交通线路设计等场景。压缩包共10个文件以三十米分辨率TIFF高程文件为核心配套云南省行政边界SHP、投影信息PRJ、坐标配准TFW、属性DBF与元数据XML等辅助文件总大小约603.1MB可直接在QGIS、ArcGIS等软件中加载分析。已有1053人浏览学习。通过该数据用户可以查看云南省地形起伏提取坡度、坡向进行流域分析、三维地形可视化等结合边界文件快速裁剪或叠加其他专题数据为区域研究与空间决策支持提供可靠的地形底图。1. 云南省DEM 30米分辨率拿到数据只是项目的第一步做云南的项目无论是国土、水利、林业还是交通规划第一件事往往是找一份靠谱的高程数据。云南省DEM 30米分辨率就是这个圈子里默认的“起步盘”——它比90米SRTM细又比12米甚至1米的商业数据便宜覆盖全省能支撑流域分析、坡度坡向提取、可视域计算、线路选线等绝大多数前期工作。但很多人拿到这份数据后直接在ArcGIS里打开就开干结果后续一系列问题填洼填出“梯田”、坡度图出现“断崖”、河网在平坝区乱流。这篇笔记的目的就是把这些年处理云南省30米DEM的路线和坑都捋一遍从选型到镶嵌、填洼、提等高线再到最后怎么验证照着做能少走不少弯路。2. 云南省30米DEM的来源与选型SRTM、ASTER还是ALOS哪个更可信2.1 三个主流30米DEM产品的差异目前公开可用的30米分辨率DEM主要有三个来源NASA的SRTM航天飞机雷达地形测绘、METI和NASA合作的ASTER GDEM先进星载热发射和反射辐射计以及日本JAXA的ALOS AW3D30先进陆地观测卫星。三者都宣称30米但在云南省这种高山峡谷密布的区域差异非常明显。SRTM在2000年由奋进号航天飞机搭载C波段雷达获取全球覆盖范围是北纬60度到南纬56度云南完全覆盖。它的优势是雷达信号穿透性好在植被稀疏的高山地区表现稳定缺点是在陡峭峡谷和阴影区会有数据空洞。ASTER GDEM是光学立体像对反演分辨率标称30米但在云南西部高黎贡山、怒江两岸这类云雾多的区域容易有异常凸起或凹陷也就是俗称的“麻点”。ALOS AW3D30是用光学立体影像生成2015年发布标称30米但实际平面分辨率约25米在山地和城市区域细节比SRTM好但在极端地形下的空洞处理不一定比SRTM干净。对于云南省来说我的首选是SRTM V3也就是SRTMGL3因为它的后处理版本已经用辅助数据填补了大部分空洞而且SRTM在高山区的山谷形态更平滑。ASTER GDEM做地形粗提取也可以但要先做降噪处理。ALOS适合做小范围精细地形覆盖全省时数据量偏大而且它的投影坐标系是UTM需要额外处理。结论是如果你只想要一份“不折腾”的云南省30米DEM直接下载SRTMGL3的分幅数据自己拼接切片。2.2 云南省境内SRTM与ASTER的实际表现以滇西北的梅里雪山为例SRTM V3在卡瓦格博峰附近的高程值相对稳定ASTER GDEM在同样的位置能看到明显的条带状高程起伏局部地区相对误差能达到30米以上。在滇东南的喀斯特峰丛洼地ASTER对圆润的峰林表现较好SRTM反而在一些陡崖处出现锯齿。所以不存在全面优胜者关键看用途。做水动力分析和流域划分SRTM更稳妥做植被切坡和地形细节展示ALOS更细腻做初步的坡度分级ASTER也能凑合。我一般会在下载前先拉一个自己熟悉的区域做对比比如昆明周边的西山一带用已知高程点验证。具体做法是把三个产品都裁到测试区然后用ArcGIS栅格计算器算出与实测高程点比如测绘院公开的GPS控制点的差值看平均值和标准差。挑选全局误差最小的那个作为主数据源。这个过程不复杂但很多人直接跳过后面才后悔。2.3 数据下载前必须确认的坐标系与瓦片拼接问题无论你从地理空间数据云这类平台下载还是从USGS EarthExplorer下载都要注意一个关键参数坐标系。SRTM和ALOS原始产品通常是WGS84地理坐标系经纬度而国内很多项目要求用CGCS2000或者西安80的高斯投影。所以下载时如果平台支持选择输出坐标系建议直接选目标投影如果不支持就下载后在本地转。另外30米DEM是一格一格分幅的覆盖云南省大约需要几十幅每幅1度×1度。下载后先建一个文件清单用GDAL的gdalbuildvrt把它们合并成一个虚拟栅格再做正式拼接。这一步很多人直接在ArcGIS里用Mosaic To New Raster一次搞定但如果某些瓦片有重叠或NoData值不统一很容易出现拼接缝。下面这个命令是万无一失的做法# 用GDAL制作云南DEM虚拟栅格再用gdal_translate输出GeoTIFF gdalbuildvrt yunnan_dem.vrt srtm_*.tif gdal_translate -co COMPRESSDEFLATE -co TILEDYES -ot Float32 yunnan_dem.vrt yunnan_dem_raw.tif这段命令先把所有分幅文件合并为VRT不实际拷贝数据以后好管理再用gdal_translate压缩输出为GeoTIFF。-ot Float32这一步非常关键因为SRTM原始高程值存储为Int16但经过填洼和差值计算后会用到小数提前转浮点避免数据截断。COMPRESSDEFLATE既能减小体积又能保持无损。3. 把碎片DEM拼成完整云南省镶嵌、裁剪与投影转换3.1 用ArcGIS或者QGIS做镶嵌的流程拿到手的分幅DEM通常是一个一个文件完整的一张云南省DEM需要自己做镶嵌。ArcGIS的“Mosaic To New Raster”工具是大多数人的首选但参数对最终成果影响巨大。注意这里有一层窗户纸ArcGIS中的“Mosaic”不是简单的贴图它会对重叠区域做羽化和颜色匹配但如果选择的“Mosaic Operator”配置不对重叠区会变成两片高层的“山脊”或“沟”。我的做法是先把所有分幅文件放到一个文件夹确保它们坐标系统一都是WGS84然后在ArcGIS Pro或ArcMap中打开“Mosaic To New Raster”。Input rasters选择所有分幅Output location指定结果文件夹Raster dataset name填yunnan_demPixel type选“32 bit float”Band Count为1Mosaic Method选“Blend”Mosaic Operator选“Last”或者“Blend”。关键参数解释如下Blend方法对重叠区域按距离权重融合能消除明显的接缝但也会轻微模糊地形细节。First / Last方法直接保留先/后被写入的像元值适合没有重叠或重叠区参考值一致的情况。NoData处理如果某个分幅在边界有无效值一定要把“NoData”勾选上并将背景值设为-32768或-9999否则结果会出现黑色网格。另一个选择是QGIS的Raster Merge工具它本质也是调用GDAL参数好看一些而且免费。我经常在服务器上用QGIS的界面做测试再导出一个XML参数给团队复制。3.2 投影转换与坡度坡向计算的坐标系陷阱云南省经度跨度从东经97度到106度横跨多个UTM分带47N、48N。在做坡度、坡向或汇流累积量时如果直接在WGS84经纬度坐标系下算可能会产生非几何畸变因为1度经度和1度纬度的长度不同。虽然30米DEM在局部看起来不是大问题但全省范围拼接后北部和南部的坡度分析结果不可比。所以我通常建议在镶嵌完成后先把整幅DEM投影到“Albers Equal Area Conic”自定义坐标系中央经线设置为东经102度两条标准纬线设为北纬22度和北纬28度。这样整个云南省在投影后面积畸变最小坡度计算结果也更可验证。在ArcGIS里启用“Project Raster”工具填好坐标系参数采样方法选“Bilinear”双线性插值而不是“Nearest”因为DEM是连续表面最近邻采样会让斜坡变成阶梯状。如果你用的SRTM是GeoTIFF格式投影转换后一定要检查“Cell Size”是否为30米。很多人在这一步发现输出分辨率变成29.9998米或者31.2米那是因为原始瓦片没有正确定义坐标系导致重采样后像素漂移。3.3 裁剪到云南省省界用矢量边界还是栅格范围拿到“云南省DEM”并不意味着你只要计算云南省的边界范围。覆盖全省的数据通常比省界大一圈如果直接使用分析范围里包含了四川、贵州、广西、西藏的局部区域导致流域提取时河流会跨省界汇入无法正确计算云南境内的分水岭。所以裁剪是必须的。裁剪方式有两种选择。第一种是用云南省的省界矢量面提取# 用省界矢量裁剪DEM保持边界外的NoData gdalwarp -cutline yunnan_boundary.shp -crop_to_cutline -of GTiff -tr 30 30 -r bilinear yunnan_dem_projected.tif yunnan_dem_clip.tif这里-cutline指向省界shp-crop_to_cutline表示裁剪到面边界-tr 30 30强制输出像元大小为30米避免重采样带来变形。注意这条命令要求yunnan_dem_projected.tif与省界shp的坐标系一致否则gdalwarp会先做临时变换。第二种是只裁剪到与省界相切的外接矩形。这种做法适合简单可视化不适合做水文分析因为流域边界和行政边界本来就不重合。在我看来做水文分析最好用“子流域多边形”而不是省界来裁剪。但如果你只是要一份“云南省DEM”交差用省界裁剪即可。4. 从DEM到可用数据填洼、流向、河网与等高线生成4.1 填洼为什么是很多云南项目的第一道坎DEM中会存在许多没有实际出口的凹陷区域如果直接计算流向水流会在这里停滞导致河网断裂。典型的例子是云南的喀斯特区域漏斗状洼地遍地都是但这些洼地在30米分辨率上大多是虚假洼地是DEM噪声或插值造成的而不是真实的地表形态。水文分析前必须先“填洼”。ArcGIS的Fill工具默认将Z Limit设为空会把所有洼地都填平包括真实的落水洞和湖泊。而最后一章我们还会聊验证这里先说参数选择在云南我一般把Z Limit设置为10到20米。这样只填充深度小于20米的虚假洼地而保留有些真实的陷塘和落水洞。具体填法如下在栅格计算器里运行import arcpy arcpy.env.workspace rG:\yunnan_dem arcpy.Fill_sa(yunnan_dem_clip.tif, yunnan_dem_fill.tif, , 20)参数解释最后一个参数“20”就是Z Limit单位是米表示只填充深度小于20米的洼地。如果你不确定可以先做一次直方图统计查看洼地深度的分布再定阈值。填洼后的结果必须对比原DEM检查是否有大面积囚闭盆地被填平。在QGIS里可用“Fill Sinks (Wang Liu)”工具参数更透明但速度不如ArcGIS。如果数据量在千万级像元ArcGIS或GDAL的效率更高。填洼这一步一旦做错后面所有流向河网都跟着错所以是“一着不慎满盘皆输”的环节。4.2 流向与河网提取的参数设置填洼完成后下一步是计算D8流向。D8表示水流从中心像元流向八邻域中最陡下坡方向的那个像元。ArcGIS的Flow Direction工具可以生成流向栅格然后Make Pour Points生成汇流累积量最后用Con函数设阈值提取河网。阈值设置是另一个坑。在云南省如果用默认的1000像元即需要1000个像元面积汇水才形成河流在金沙江干热河谷会得到极其稀疏的河网因为那里干旱少雨地形看不出明显沟道而在高黎贡山以西的湿润区1000像元又会生成密密麻麻的伪沟道。我一般是分区域处理先按全省统一阈值提取再对滇西北和滇南分别取不同阈值对比。下面用Python实现一次完整的流向与河网提取方便命令行自动化import arcpy from arcpy.sa import * arcpy.env.extent yunnan_dem_fill.tif arcpy.env.cellSize 30 # 流向计算强制使用D8 flow_dir FlowDirection(yunnan_dem_fill.tif, NORMAL, D8) flow_acc FlowAccumulation(flow_dir, NORMAL, FLOAT) # 设置汇流累积量阈值1000等效于0.9平方千米的汇水面积 stream_grid Con(flow_acc 1000, 1) # 转为矢量线 stream_net StreamToFeature(stream_grid, flow_dir)参数说明“FlowDirection”中的“NORMAL”表示平坦区域使用自然流向“D8”强制八方向。“FlowAccumulation”输出每个像元汇入的总像元数30米分辨率下1000个像元就是约90万平方米。如果阈值设得太小河网会过度密集太大则主河道呈现断头河。实际调参时我比较喜欢把阈值从500到5000间隔500做一个循环输出几张河网图叠加影像对比选最贴近实际山脊线和沟谷的阈值。4.3 等高线生成从DEM到矢量线的完整命令很多项目需要等高线作为交付成果特别适合和地形图套合检查。ArcGIS中直接用Contour工具输入填洼前或填洼后的DEM都可以但填洼后生成的等高线更平滑有时会丢失真实地形细节如落水洞的凹痕。所以我建议用原始DEM生成等高线用来做可视化用填洼后的DEM生成等高线用来做水文分析背景。GDAL的gdal_contour命令也能做这件事而且比ArcGIS快得多# 从原始DEM生成5米间距等高线导出GeoPackage或shapefile gdal_contour -a elev -i 5.0 -field elev yunnan_dem_clip.tif yunnan_contour_5m.gpkg-a elev表示每个线要素的属性字段名是elev-i 5.0指定等高距为5米。在云南省山地5米等高距文件量很大动辄几百万个线段用GeoPackage比shapefile更快且支持空间索引。如果你用ArcGISContour工具输出shapefile时如果等高线数量太多会卡到怀疑人生。我的经验是先用gdal_contour刷一遍再在QGIS里做简化Simplify和检查。等高线生成后一定要检查负值区域比如干涸盆地或断裂带的地方可能出现负高程。这些异常值大概率是原始DEM的NoData被赋予0值导致的而不是真正低于海平面。解决办法是用栅格计算器做一次条件运算将高程小于0的像元置为NoData。5. 云南省DEM 30米处理避坑指南五个真实翻车现场5.1 现象填洼后地形变成“梯田”——原因是SRTM的条纹噪声有一次处理滇西北的DEM填洼后生成的山体模型沿着东西方向出现一层一层的“梯田”纹理非常难看。检查后发现SRTM V3在原始数据采集时存在轨道方向的系统性高程误差表现为周期性的条带。虽然30米分辨率看起来不明显但填洼会把这种噪声放大因为填洼过程将局部极小值全部抬升形成阶梯状“褶皱”。解决方法是在填洼前先做一次低通滤波。用ArcGIS的Focal Statistics工具取3×3窗口的均值输出然后以滤波后的栅格作为填洼输入可以消除条带。注意滤波会轻微平滑地形如果项目需要高精度地形细节只对填洼这一步使用滤波后续河网分析仍用原始值。5.2 现象坡度图在河谷出现断崖——原因是投影坐标系与地理坐标系混淆一位朋友用下载的ASTER GDEM直接做坡度分析在金沙江峡谷两岸的坡度图上一个坡面突然出现一条完全笔直的异常陡坡线像是刀切一样。我让他截图看图层属性果然坐标系是“GCS_WGS_1984”而坡度分析工具默认按地面单位计算导致其内部用经纬度算坡度时把1度经度当作等效的111公里而实际在云南地区1度经度只有95公里左右于是东西向的坡度被虚增。解决方法是先投影到Albers或UTM。上面第3.2节讲的投影转换要在所有地形分析之前完成。如果你已经投影还是看到类似的线再检查是否在填洼时用了不同的投影范围导致栅格像元发生扭曲。记住坡度、坡向、曲率等所有派生地形因子都必须是投影坐标系后计算。5.3 现象裁剪后边缘出现黑边——原因是NoData值处理不当用gdalwarp裁剪出来的tid有时周围有一圈纯黑色区域用ArcGIS打开时默认显示为0值。这是因为原始DEM的NoData值在裁剪输出时被写为0但项目里0米以下的海拔真实存在比如一些深谷不可能低于0所以0被当作有效值参与后续计算造成了虚假的低地。解决方法是统一NoData值。在运行gdalwarp前先用gdalinfo查看原始文件的NoData值gdalinfo srtm_47_03.tif | grep -i nodata如果NoData是-32768或0就在gdalwarp命令行后显式设置-dstnodata -9999。比如gdalwarp -cutline yunnan_boundary.shp -crop_to_cutline -dstnodata -9999 -of GTiff -tr 30 30 -r bilinear input.tif output.tif-dstnodata -9999指定输出文件的无效值为-9999。这样在ArcGIS中设置NoData显示为透明背景就不会再有黑边了。另外用Mosaic To New Raster时把NoData值设为“NONE”也是常见的“黑边”来源。5.4 现象河网在平坝区乱流——原因是阈值设置过低在昆明周边的滇池一带及陆良坝子地形平坦D8流向算法会在这里出现平行或交叉的假河网因为微小的高程噪声会决定水流方向。有人用汇流累积量阈值500提取河流结果坝子里全是密密麻麻的小水线根本没法看。解决方法是针对平坝区做高程“加噪”或者使用“扰动”算法。简单办法是在平坦区域把DEM值乘一个极小随机数或者用Conditional函数将坡度小于1度的区域航运到方向权重不同的“臭名昭著”的工具我一般用“Flatness”指标来区分真实平地与地形噪声。实际操作中最好将阈值提高到2000以上或者用Flow Accumulation weighted with rainfall把低洼坝子的河网过滤掉。还有一招是使用“Burn Streams”方法——如果你有真实的河流矢量可以将其转为栅格把DEM在河流位置降低一定幅度比如5米强制流向沿着真实河道走。这在云南的干热河谷尤其有效因为那里季节性冲沟多但卫星影像上不明显。5.5 现象dem文件打不开——原因是位深与压缩格式不兼容有用户反映下载的“dem文件”用ArcGIS打开是黑屏或者打开后全是刺眼的雪花。很多时候不是数据损坏而是你下到的不是标准GeoTIFF而是IMG或DTED格式或者压缩格式是LZW但软件版本太老不支持。有些“dem安装包”实际是SRTM二进制的DTED文件没有prj坐标文件直接拖进ArcGIS会无法识别。解决方法是先确认格式。用GDAL的ogrinfo或gdalinfo或者直接在ArcToolbox里“Copy Raster”转换。命令行快速检查gdalinfo file.dem如果gdalinfo输出显示“Driver: DEM”说明它是USGS DEM格式需要转成GEOTIFF才能用。转换命令gdal_translate -of GTiff file.dem file.tif顺便说一句有些朋友在找“dem安装包”其实DEM是数据文件不是软件不需要安装。你只需要把它的格式理顺就能在主流GIS里打开。另外32位浮点型的DEM在ArcMap的符号化里默认拉伸方式可能显示为全灰色改一下样式即可。6. 验证你的DEM成果用实测高程和等高线交叉检查6.1 用GPS实测点对比DEM高程刚处理完一份云南省DEM不能只看颜色顺不顺眼就交付。第一步验证是拿外业采集的GPS控制点高程数据精度通常在亚米到米级与DEM提取值对比。将GPS点转为shp后使用Extract Multi Values To Points提取每个点的DEM高程然后计算差值均方根误差RMSE。如果RMSE小于10米说明这份30米DEM的垂直精度在合理范围内如果超过15米就要检查是否有投影变换错误或填洼过度。注意对比前一定要确保控制点和DEM都是相同的椭球基准否则差值可能包含系统性的高程基准偏移。我通常还会做一次“双样本检验”在随机抽取的验证点中有至少20个点落在陡坡区20个落在平坝区。因为DEM在陡坡上误差比平地大如果全用平地点管理可能掩盖山区的真实误差。6.2 生成等高线与已有地形图套合第二个验证方法是把生成的等高线叠到已有1:50000或1:10000地形图上。在QGIS中把等高线设为半透明旋转对比重点看冲沟、山脊线和鞍部位置是否吻合。30米DEM生成的5米等高线在云南的山地一般能看出轮廓但在平坝区会显得杂乱无章。这时候不要急着怪数据先检查是不是在生成等高线前用了填洼后的DEM。填洼会抹平实际存在的微小凸起让平坝区等高线变成稀疏的直线。我有个习惯生成等高线后随手抽出几条与地形图的同名高程线做剖面叠加。如果最大偏差在半个等高距2.5米以内基本过关。6.3 我的习惯先做小流域试算再全云南跑最后说一个细活。云南省面积约39.4万平方公里全分辨率跑一遍填洼和流向计算少说十几分钟但如果你参数设错重跑一次的成本往往更高。我的习惯是先找一个100平方千米的小流域——比如大理的洱海西侧片区——完整跑一遍填洼、流向、河网提取做5.3节里说的那些避坑检查。确认没问题后再套用到全省范围。这个小流域就成了“试验田”所有参数都在这里定下来。做DEM处理这几年我最大的教训是不要把工具输出当权威特别是DEM这类天然包含误差的模型。每个处理步骤都可能在无意中引入偏差填洼、投影、裁剪、重采样每步一个微小误差积累到最后可能让分析结果完全失真。所以每跑完一个流程一定要回到原始数据上检查一步。希望这篇文章能帮你把云南省30米DEM的坑填平大半少走几次弯路。如果后面有更细的问题比如具体某个区域的填洼阈值怎么选欢迎带着数据和场景来聊。希望帮到你。全文完本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑