市级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 污染的问题省下的返工时间远比这四步多。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

WinForms自绘TabControl:从OwnerDraw到高DPI适配的完整实现

WinForms自绘TabControl:从OwnerDraw到高DPI适配的完整实现

简介:这是一份面向C#桌面应用开发者的TabControl控件定制化学习资源,聚焦Windows Forms界面美化与交互增强,适用于希望突破默认UI限制、提升产品视觉表现力的中初级开发者。资源提供完整的美化版TabControl源码实现,涵盖自定义绘制…

2026/10/11 11:47:15 阅读更多 →
思考慢到 13.4 秒?用 MTP 投机解码把 GEV 的 System 2 提速 1.8 倍

思考慢到 13.4 秒?用 MTP 投机解码把 GEV 的 System 2 提速 1.8 倍

思考慢到 13.4 秒?用 MTP 投机解码把 GEV 的 System 2 提速 1.8 倍 【免费下载链接】GEV-26B-Decide 项目地址: https://ai.gitcode.com/hf_mirrors/autotrust/GEV-26B-Decide 当一个大模型「回答一个问题要等 13 秒」,你会怎么想?如…

2026/10/11 11:47:15 阅读更多 →
Pastel 下载历史版本时如何保护 Apple 账户安全?钥匙串与 AES-256-GCM 会话加密完整指南

Pastel 下载历史版本时如何保护 Apple 账户安全?钥匙串与 AES-256-GCM 会话加密完整指南

【免费下载链接】Pastel-macOS 在 Mac 上搜索并下载 iOS、iPadOS 与 visionOS App 的历史版本,管理 IPA,并通过隔空投送发送至 iPhone 或 iPad。 项目地址: https://gitcode.com/gh_mirrors/ipa/Pastel-macOS 点击查看 免费下载 &#x1f51…

2026/10/11 11:47:15 阅读更多 →

最新新闻

python深入讲解魔术方法

python深入讲解魔术方法

前言 魔术方法(magic methods)就是那些名字两头带双下划线、由 Python 语法隐式调用的特殊方法,比如 __init__、__repr__、__eq__。它们不是给你手动调的接口,而是给语言本身看的钩子:你写了 __len__,len(o…

2026/10/11 12:45:34 阅读更多 →
从零到一页专业简历:7步完整教程教你用LaTeX简历模板resume-template(ATS关键词+双语+AI全打通)

从零到一页专业简历:7步完整教程教你用LaTeX简历模板resume-template(ATS关键词+双语+AI全打通)

【免费下载链接】resume-template The best LaTeX resume template. 项目地址: https://gitcode.com/gh_mirrors/resumetemplate3/resume-template 点击查看 免费下载 🎯 本教程手把手带你使用开源项目 resume-template(LaTeX 简历模板&…

2026/10/11 12:45:34 阅读更多 →
机器码重置背后的授权绑定机制:从硬件指纹到License管理

机器码重置背后的授权绑定机制:从硬件指纹到License管理

1. 为什么机器码会突然“变脸”1.1 那次求助的完整经过前两天技术交流群里有人抛出一个问题,标题就一句话:“一键重置机器码!问题解决了”。乍看像某个工具的广告,但点进去才知道是群友在求助:某款行业软件绑定了机器码…

2026/10/11 12:45:34 阅读更多 →
多网段互通实验:静态路由配置与回程路由排错全攻略

多网段互通实验:静态路由配置与回程路由排错全攻略

多网段互通实验,这个题目在网工学习路线里出现频率相当高。一提起静态路由配置实验,很多新手第一反应就是“两边配个静态路由就能通”,但真上手一测,要么单向通,要么中间某个网段压根出不去。这个实验之所以值得单独拿…

2026/10/11 12:45:34 阅读更多 →
政务采购安全资质Agent推荐:信创与安全合规

政务采购安全资质Agent推荐:信创与安全合规

政务信息化采购的门槛,正从"功能能不能用"转向"资质能不能过"。Agent 类产品要进入政务场景,必须先回答三个问题:资质齐不齐、信创适配全不全、数据出不出域。一、政务采购的三道硬门槛 1.1 资质门槛:从单一等…

2026/10/11 12:45:34 阅读更多 →
外贸企业建站避坑全指南:为什么你的网站上线半年没询盘

外贸企业建站避坑全指南:为什么你的网站上线半年没询盘

去年,石家庄一家做丝网出口的企业老板找到我诉苦:花了两万多找建站公司做了个英文网站,上线半年,谷歌搜不到、询盘没几个。这不是个例。做了十几年外贸推广,我见过太多企业在建站这件事上栽跟头。2026年,外…

2026/10/11 12:44:33 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →