市级30m DEM数据处理全流程:从坐标系检查到坡度坡向与水文分析

发布时间:2026/10/11 11:47:30
市级30m DEM数据处理全流程:从坐标系检查到坡度坡向与水文分析 简介这份资源面向地理信息科学、城市规划、环境研究与灾害风险评估等领域的从业者与学习者提供江西省赣州市30米分辨率的DEM数字高程数据并附带本市级行政范围矢量文件可用于地形分析、坡度坡向计算、水文与交通线路规划等场景。压缩包共12个文件约139.7MB主要包含tif高程栅格及其ovr、tfw、xml等配套元数据以及shp、shx、dbf、prj、sbn、sbx等Shapefile几何、属性、投影与索引文件覆盖栅格与矢量两类常用GIS数据格式。目前已有1110人学习下载。借助这套数据读者可在ArcGIS或QGIS中直接加载地形与行政边界提取高程信息、计算地形特征并与人口、植被等图层叠加开展空间分析为区域规划与决策提供科学依据。1. 拿到一份市级 30m DEM 压缩包先别急着往 GIS 里拖做水文、选址、坡度分析或者三维地形渲染的人迟早会碰到一个尴尬全国范围的 DEM 数据要么分辨率太粗要么切片下载拼接到手软而项目偏偏只关心一个市。这时候一份「市级范围 30m 分辨率 带行政边界 shp」的打包数据价值就出来了。这次拆的是赣州市的 30m 数字高程数据压缩包里除了栅格高程文件还附了本市级范围的 shp 边界等于把「裁切范围」这件事提前替你办了一半。30m 这个格网间距对应的是 1:5 万比例尺地形图的信息密度做流域提取、坡度坡向、通视分析够用又不至于像 12.5m、5m 那样让单机内存直接翻车。它适合谁做区域地理信息分析的学生、跑水文模型的工程师、需要给三维场景垫地形底座的开发者。但先别双击解压就往 ArcGIS 或 QGIS 里拖坐标系和 NoData 这两个坑足够让新手卡一整个下午。2. 拆包先看三样东西坐标系、格网间距、边界范围2.1 为什么 30m 分辨率是个「够用又不贵」的平衡点DEM 的分辨率本质是采样密度。30m 意味着地面上每隔 30 米取一个高程值一个像元代表 900 平方米。这个尺度下丘陵和山地的大地形走势能完整保留但小于 30 米的冲沟、陡坎会被平滑掉。赣州地处赣南地形以丘陵山地为主用 30m 数据做坡度分级、汇流分析是合理的如果你要做城市内涝那种米级精度的模拟这份数据就不够得换更高分辨率的来源。从数据量看30m 全国 DEM 单省往往在几百 MB 到 1GB 量级市级裁剪后通常压到几十 MB普通笔记本 8GB 内存完全跑得动。这就是它「不贵」的地方——你不需要为了一次坡度分析去配 32GB 内存的工作站。常见做法是先用这份 30m 数据把分析流程和参数跑通确认方法没问题再决定要不要上更高精度重跑。2.2 坐标系不确认后面全是白干拿到任何 DEM第一件事不是打开看颜色而是确认它的坐标参考。国内常见的 30m DEM 有两种来源一种是地理坐标系经纬度如 CGCS2000 或 WGS84单位是度另一种是投影坐标系如 UTM 或高斯-克吕格单位是米。这两者直接决定你后面算坡度、算距离时数字对不对。判断方法很简单用 GDAL 命令行看一眼元数据# 查看栅格的基本信息重点看 Coordinate System 和 Pixel Size gdalinfo赣州市_dem_30m.tif输出里如果Pixel Size是(0.000277..., 0.000277...)这种小数说明是经纬度坐标约等于 30 米如果是(30, 30)说明已经是投影坐标单位就是米。这个区别很关键经纬度坐标下直接算欧氏距离会得到「度」不是米坡度分析也会因为纬度不同而产生形变。提示如果发现是经纬度坐标做面积、距离、坡度这类量算前先投影到适合赣州的高斯-克吕格带或 UTM 带别在经纬度上硬算。2.3 用 shp 边界做裁切别拿整幅全国数据硬跑压缩包里那个本市级范围 shp最大的用处就是裁切。很多人图省事直接拿全国或全省 DEM 跑分析结果研究区外的像元也参与计算边界处出现一堆无意义的边缘效应。正确做法是用 shp 把 DEM 裁到赣州市范围。QGIS 里操作栅格菜单 → 提取 → 按掩膜图层裁剪栅格掩膜图层选那个 shp勾选「保持裁剪范围」。命令行用 GDAL 更利索# 用 shp 边界裁切 DEM-crop_to_cutline 让输出范围贴合边界 gdalwarp -cutline 赣州市边界.shp -crop_to_cutline \ -dstnodata -9999 赣州市_dem_30m.tif 赣州市_dem_clip.tif-cutline指定裁切边界-crop_to_cutline让输出影像的外接矩形紧贴边界而不是保留原图幅-dstnodata -9999把边界外的区域统一设成 -9999。这里 -9999 是约定俗成的 NoData 值别用 0因为 0 在赣州部分低洼地区可能是真实高程混在一起后面填洼会出错。裁完之后建议再确认一次范围# 对比裁切前后的范围确认裁切生效 gdalinfo -stats 赣州市_dem_clip.tif | grep -E Upper Left|Lower Right如果裁切后范围还是整幅图那么大多半是 shp 和 DEM 坐标系不一致gdalwarp 没做重投影匹配。加-t_srs显式指定目标坐标系或者先把 shp 转成和 DEM 一致再裁。3. 从高程栅格到可用地形因子坡度、坡向、填洼一条龙3.1 填洼不是可选项是水文分析的前置动作原始 DEM 里普遍存在「洼地」——那些四周高、中间低的像元。它们有的是真实地形比如火山口、喀斯特洼地有的是数据采集误差造成的假洼地。做汇流分析时假洼地会让水流「困」在里面出不来最后汇流结果断断续续。所以填洼Fill Sinks是水文分析的标准前置步骤。QGIS 里用「填洼Wang Liu」算法或者用 WhiteboxTools。命令行用 GDAL 的gdaldem配合fillnodata只能补空洞真正填洼建议用 RichDEM 或 WhiteboxTools# 用 WhiteboxTools 填洼输出填洼后的 DEM whitebox_tools -rFillDepressions -v \ --dem赣州市_dem_clip.tif \ --output赣州市_dem_filled.tif-rFillDepressions指定填洼算法--dem是输入--output是输出。填洼后可以用-rD8FlowAccumulation直接算汇流累积量验证水流是否连通。注意填洼会改变原始高程值填洼后的 DEM 只用于水文分析不要拿它去做高程统计或体积计算否则结果偏大。3.2 坡度坡向一个参数设错结果全歪坡度Slope和坡向Aspect是最常用的两个地形因子。GDAL 一条命令就能出# 计算坡度-p 表示输出为百分比坡度不加则输出度 gdaldem slope 赣州市_dem_filled.tif 赣州市_slope.tif -p # 计算坡向-zero_for_flat 把平地坡向设为 0 而不是 -9999 gdaldem aspect 赣州市_dem_filled.tif 赣州市_aspect.tif -zero_for_flat-p输出百分比坡度工程上做边坡稳定性分析常用百分比做地形分类常用度。坡向默认平地输出 -9999加-zero_for_flat改成 0方便后续分类。这里有个血泪经验坡度计算前一定要确认 DEM 的垂直单位和高程单位一致。如果 DEM 是经纬度坐标、高程是米GDAL 会自动做纬度校正但如果你自己写脚本用相邻像元差算坡度忘了把度转成米坡度会大得离谱。3.3 用 Python 批量跑地形因子避免重复点鼠标如果手头不止赣州一个市或者要反复调参数用 Python 脚本批量处理更省事。基于 rasterio 和 richdem 的写法import rasterio import richdem as rd import numpy as np # 读取裁切后的 DEM dem_path 赣州市_dem_clip.tif with rasterio.open(dem_path) as src: dem src.read(1) profile src.profile nodata src.nodata # 把 NoData 转成 richdem 能识别的 nan dem dem.astype(np.float32) dem[dem nodata] np.nan # 填洼 dem_filled rd.FillDepressions(rd.rdarray(dem, no_datanp.nan), in_placeFalse) # 算坡度度 slope rd.TerrainAttribute(dem_filled, attribslope_degrees) # 写回 GeoTIFF保持原投影和变换 profile.update(dtyperasterio.float32, nodatanp.nan) with rasterio.open(赣州市_slope_py.tif, w, **profile) as dst: dst.write(slope.astype(np.float32), 1)这段代码的逻辑先用 rasterio 读栅格和元数据把 NoData 统一成 nan 避免污染计算richdem 的FillDepressions做填洼TerrainAttribute算坡度最后用原 profile 写回保证坐标系和地理变换不丢。参数上attrib可以换成aspect、curvature等一次读入多次计算比反复开软件快得多。4. 避坑排查这五条我几乎每次都要提醒一遍4.1 现象裁切后边界外全是 0不是 -9999原因gdalwarp没指定-dstnodata或者原 DEM 本身 NoData 就是 0裁切后边界外继承了 0。解决显式加-dstnodata -9999并在后续分析前用gdal_translate -a_nodata -9999统一 NoData 标记。4.2 现象坡度图出现大片异常高值或条纹原因DEM 里混入了 NoData 像元算法把 -9999 当成真实高程参与差分。解决计算前先确认 NoData 值用gdalinfo -stats看最小值是不是 -9999 或 -32768必要时先做掩膜。4.3 现象shp 和 DEM 叠不上边界偏到海里原因两者坐标系不一致一个是 CGCS2000 经纬度一个是投影坐标。解决用ogr2ogr或 QGIS 把 shp 重投影到和 DEM 一致再裁切。别指望软件自动对齐它不会替你判断哪个对。4.4 现象填洼后汇流还是断原因填洼只处理了单像元洼地平坦区域如水库、宽河谷需要额外做「平坦区处理」。解决WhiteboxTools 里用FillDepressions后再跑BreachDepressions或者直接用FillDepressions的-fix_flats选项。4.5 现象Python 读进来全是 nan原因rasterio 读出的数组里 NoData 值没被识别或者 DEM 本身是整型而 nan 是浮点。解决先src.nodata看标记值再手动替换确保数组转成 float32 再赋 nan。5. 进阶把 30m DEM 接进三维场景和流域划分5.1 生成山体阴影快速检查数据质量在正式分析前我习惯先生成一张山体阴影Hillshade用眼睛扫一遍有没有明显的拼接缝、条带或者空洞。GDAL 一行命令# 生成山体阴影-az 315 是常用光照方位角-alt 45 是高度角 gdaldem hillshade 赣州市_dem_filled.tif 赣州市_hillshade.tif \ -az 315 -alt 45 -z 2-z 2是垂直夸张系数丘陵地区用 2 到 3 能让地形起伏更明显。如果阴影图里出现规则的方格或条纹说明原始数据有拼接问题得回去查数据来源。5.2 用流域划分验证 DEM 是否「通」流域划分是检验 DEM 水文连通性的终极手段。用 WhiteboxTools 一条龙# 填洼 → 汇流累积 → 提取河网 → 划分子流域 whitebox_tools -rFillDepressions --dem赣州市_dem_clip.tif --outputdem_f.tif whitebox_tools -rD8FlowAccumulation --demdem_f.tif --outputflow_acc.tif whitebox_tools -rExtractStreams --flow_accumflow_acc.tif \ --outputstreams.tif --threshold1000 whitebox_tools -rBasins --demdem_f.tif --outputbasins.tif--threshold1000表示汇流累积超过 1000 个像元才认定为河道这个值要按赣州的降水和地形调太大河网稀疏太小全是毛刺。划出来的子流域如果边界连续、没有断头河说明 DEM 的水文一致性没问题。5.3 接进三维引擎前先转成引擎认的格式如果要把地形垫进三维场景比如 Cesium、Unity通常需要把 GeoTIFF 转成地形切片或高度图。常见做法是用gdal_translate转成 PNG 高度图或者用ctb工具切成 terrain 瓦片。转之前记得把 NoData 区域填成该区域最低高程否则三维里会出现黑洞。用途推荐格式关键参数GIS 分析GeoTIFF保留坐标系NoData 设 -9999三维高度图PNG 16bit拉伸到 0-65535记录 min/max地形切片terrain 瓦片按层级切注意边界接缝从那以后我每次拿到一份新 DEM都强制走一遍「gdalinfo 看坐标系 → 山体阴影扫质量 → 填洼 → 汇流验证」这四步哪怕数据来源再可靠也不跳过。这套流程帮我拦下过好几次坐标系错位和 NoData 污染的问题省下的返工时间远比这四步多。希望帮到你。本文还有配套的精品资源点击获取

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询