资讯动态

赣州30m DEM数字高程数据实战:从裁剪、坡度分析到流域提取与淹没模拟

发布时间:2026/10/27 18:27:18 来源:尧图企业网站定制
简介这份资源面向地理信息科学、城乡规划、环境与灾害研究等领域的从业者及学生提供江西省赣州市30米分辨率的DEM数字高程数据并附带本市行政范围的矢量边界文件可用于地形分析、坡度坡向计算、水文建模与地图制图等场景。压缩包共12个文件约139.7MB以tif栅格高程数据为核心配合shp、shx、dbf等Shapefile几何与属性文件另有prj投影定义、tfw坐标配准、ovr与xml元数据及sbn、sbx空间索引构成一套可直接在ArcGIS或QGIS中加载的完整数据集。目前已有1110人学习下载。借助该数据读者可提取赣州市高程信息、生成晕渲与等高线并结合行政边界开展土地利用、交通选线与灾害风险评估等空间分析为区域研究与决策提供基础支撑。1. 拿到赣州 30m DEM 之后先搞清楚它能干什么、不能干什么如果你手头正好有一个「江西省赣州市DEM数字高程数据30m含本市级范围shp文件.zip」别急着双击解压就往 ArcMap 里拖。我见过太多人拿到 DEM 第一反应是「赶紧出个山体阴影图」结果投影没定、范围没裁、NoData 一片黑最后怀疑数据有问题。其实 30m 分辨率的 DEM 在市级尺度上是非常实用的底图数据——它能支撑坡度坡向分析、流域提取、淹没模拟、选址踏勘甚至给遥感影像做正射校正的辅助高程。赣州地处赣南丘陵山区地形起伏大用这份数据做地形因子计算比用全国 90m 数据靠谱得多。但它的边界也很清楚30m 意味着两个高程点之间隔了 30 米你拿它去算一栋楼的土方量那是自欺欺人。这份资源适合做区域规划、水文分析、地形可视化的从业者也适合刚接触 GIS 想拿真实行政边界练手的新手。下面我按「数据是什么 → 怎么裁怎么用 → 坑在哪 → 进阶怎么玩」的顺序把这份包拆开讲透。2. 拆包先看三样东西投影、范围、NoData2.1 解压后到底有哪些文件拿到 zip 先别急着在 ArcMap 里点「添加数据」。我一般会先解压到一个纯英文路径下比如D:\gis_data\ganzhou_dem中文路径在部分老版本 ArcGIS 里会出玄学问题。解压完通常能看到这几类文件文件/文件夹典型命名作用DEM 栅格ganzhou_dem_30m.tif或.img主高程数据30m 分辨率市级范围矢量ganzhou_boundary.shp及配套.dbf/.shx/.prj赣州市行政边界用于裁剪和掩膜说明文件readme.txt或metadata.xml记录投影、高程基准、数据来源可能的索引图index.jpg快速预览覆盖范围重点看.prj文件在不在。如果 shp 没有.prjArcMap 会提示「未知空间参考」这时候你直接做裁剪出来的结果可能偏移几百米。常见做法是打开 DEM 的属性看它的坐标系然后给 shp 手动定义成一致的。2.2 投影和基准别让「地理坐标系」坑了你30m DEM 最常见的两种空间参考一种是地理坐标系 WGS84 或 CGCS2000单位是度另一种是投影坐标系比如 UTM 或高斯-克吕格单位是米。你打开 DEM 属性看「XY 坐标系」那一栏。如果是GCS_WGS_1984那它的像元大小会显示成0.000277...度左右而不是 30。这时候你做坡度分析ArcMap 会警告「像元大小以度为单位坡度结果可能不准确」。提示做地形分析前强烈建议把数据投影到以米为单位的坐标系。赣州在 CGCS2000 高斯投影下通常用 3 度带中央经线 114°E 或 117°E具体看数据说明。我一般会用一个「投影转换」的批量脚本把 DEM 和 shp 一起转成CGCS2000_3_Degree_GK_CM_114E。转换完再检查像元大小是不是接近 30。这一步不做后面坡度坡向全是错的血泪经验。2.3 用 shp 裁剪 DEM掩码提取和普通裁剪的区别热搜里有人问「arcmap 中依靠面图层裁剪dem栅格tif文件 和依靠面图层掩码提取有啥区别」。这个问题很关键。普通裁剪Clip是按 shp 的外包矩形切边界外的像元直接删掉但边界内的像元值不变。掩码提取Extract by Mask是把 shp 外的像元设为 NoDatashp 内的保留原值。对于赣州市这种不规则边界如果你要做全市统计必须用掩码提取否则外包矩形里的邻市区域会混进来。操作路径Spatial Analyst Tools → Extraction → Extract by Mask。输入栅格选 DEM掩码选ganzhou_boundary.shp输出ganzhou_dem_masked.tif。跑完之后用「识别」工具点一下边界外的区域应该显示 NoData。如果还能看到高程值说明掩码没生效检查 shp 的坐标系是否和 DEM 一致。3. 从 DEM 到可用地形因子坡度、坡向、山体阴影的实操参数3.1 坡度分析Z 因子到底填多少坡度是 DEM 最常用的衍生数据。ArcMap 里Spatial Analyst → Surface → Slope输入裁剪后的 DEM输出坡度栅格。关键参数是Z factor。如果你的 DEM 已经是投影坐标系、单位是米Z factor 填 1。如果还是地理坐标系、单位是度Z factor 要填一个换算值大约1/111320乘以纬度余弦的倒数赣州大概在 0.0000089 左右。但我不建议这么干误差太大还是先投影。# ArcPy 批量计算坡度假设 DEM 已投影到米制坐标系 import arcpy from arcpy.sa import Slope arcpy.env.workspace rD:\gis_data\ganzhou_dem arcpy.CheckOutExtension(Spatial) dem ganzhou_dem_masked.tif out_slope ganzhou_slope.tif # Z factor 1因为输入是投影坐标系单位米 slope_result Slope(dem, DEGREE, 1) slope_result.save(out_slope) print(坡度计算完成输出, out_slope)这段脚本里Slope的第二个参数DEGREE表示输出角度制如果你要百分比坡度就改成PERCENT_RISE。第三个参数1就是 Z factor。跑完检查一下最大值赣州山区坡度超过 60 度的地方不多如果出现 89 度大概率是 DEM 有异常尖峰或者投影没转。3.2 坡向和山体阴影光照角度怎么设才自然坡向用Aspect工具输出是 0 到 360 度正北是 0顺时针增加。平坡会输出 -1记得在符号化时把 -1 设为透明或单独颜色。山体阴影用Hillshade三个参数方位角、高度角、Z factor。方位角我一般设 315西北方向高度角设 45这样出来的立体感最符合人眼习惯。Z factor 同样填 1。from arcpy.sa import Aspect, Hillshade out_aspect ganzhou_aspect.tif out_hillshade ganzhou_hillshade.tif Aspect(dem).save(out_aspect) # 方位角315高度角45Z factor 1 Hillshade(dem, 315, 45, 1).save(out_hillshade) print(坡向和山体阴影完成)跑完山体阴影把它和坡度图叠加用透明度 50% 显示能快速看出赣州哪些区域是陡坡、哪些是河谷平地。这个组合图拿去做踏勘底图非常实用。3.3 等值线和高程分级出图前的最后一步如果你要出地形图等值线是少不了的。Spatial Analyst → Surface → Contour输入 DEM等高距根据区域高差定。赣州海拔从几十米到一千多米等高距设 50 米或 100 米比较合适。输出是线要素可以再叠加高程注记。高程分级用Reclassify把 DEM 分成若干带比如 0-100、100-200、200-500、500-1000、1000 以上每带给不同颜色。这样出图比连续色带更清晰。注意等值线生成后检查线是否闭合。如果出现断线通常是 DEM 边缘 NoData 导致的用掩码后的 DEM 重新生成即可。4. 避坑与排查这五个问题我几乎每次都能遇到4.1 裁剪后全是 NoData 或黑边现象用 shp 裁剪 DEM 后输出栅格一片黑或者只有边缘有值。原因shp 和 DEM 坐标系不一致或者 shp 的几何有问题比如自相交。解决先用Define Projection给 shp 定义正确坐标系再用Repair Geometry修复几何最后重新裁剪。如果还不行检查 shp 是不是 MultiPolygon转成 SinglePolygon 再试。4.2 坡度结果出现 89 度或 -1现象坡度图最大值 89.999或者出现负值。原因DEM 里有异常尖峰或洼地或者 Z factor 设错。解决用Focal Statistics做 3x3 均值滤波平滑 DEM再算坡度。负值通常是 NoData 被当成 0 参与计算检查环境设置里的Mask和Extent。4.3 山体阴影看起来像「鬼片」现象山体阴影明暗对比过强或者方向反了。原因方位角设成了 45 或 225导致光照方向不自然。解决方位角改回 315高度角 45。如果还是不对检查 DEM 是否被翻转有些数据 Y 轴是反的用Flip工具翻转。4.4 投影转换后范围偏移现象投影转换后DEM 和 shp 错位几百米。原因转换时只转了 DEM没转 shp或者转换参数选错。解决用Project Raster和Project分别转确保目标坐标系一致。赣州用 CGCS2000 3 度带中央经线看数据说明别随便选。4.5 内存不足或工具报错 999999现象跑坡度或掩码时 ArcMap 崩溃报错 999999。原因DEM 太大32 位 ArcMap 内存不够。解决先用Split Raster分块或者换 ArcGIS Pro 64 位。我一般会在跑大工具前把其他图层全关掉清空缓存。5. 进阶玩法用 DEM 做流域提取和淹没模拟5.1 水文分析填洼、流向、流量累积DEM 做水文分析是重头戏。流程Fill填洼 →Flow Direction流向 →Flow Accumulation流量累积 →Con提取河网。填洼阈值一般设 100 到 500看区域大小。赣州丘陵区我一般设 200。流量累积大于 200 的像元设为 1其余 NoData就得到河网栅格。再用Stream to Feature转成矢量和 shp 叠加能看出河流和行政边界的关系。from arcpy.sa import Fill, FlowDirection, FlowAccumulation, Con from arcpy.sa import StreamToFeature filled Fill(dem) flow_dir FlowDirection(filled) flow_acc FlowAccumulation(flow_dir) # 阈值200大于200为河网 streams Con(flow_acc 200, 1) streams.save(ganzhou_streams.tif) StreamToFeature(streams, flow_dir, ganzhou_streams.shp, SIMPLIFY) print(河网提取完成)这段脚本里Fill是填洼消除 DEM 里的伪洼地。FlowDirection用 D8 算法每个像元流向最陡的下坡方向。FlowAccumulation统计每个像元上游汇水面积。阈值 200 是经验值你可以根据实际河网密度调整。5.2 淹没模拟给定水位算淹没范围用 DEM 做淹没模拟很简单设定一个水位值比如 150 米用Con(dem 150, 1)提取淹没区。但实际做的时候要考虑连通性不能只看高程。我一般会结合河网和流向从河道向外扩散。更严谨的做法是用Cost Distance或者水文连通性分析但那个计算量大。快速出图的话直接高程阈值就够了。from arcpy.sa import Con # 假设水位150米 flood Con(dem 150, 1) flood.save(ganzhou_flood_150m.tif) print(淹没范围提取完成)跑完把淹没栅格转成矢量和 shp 叠加算一下淹没面积占比。这个结果拿去做初步风险评估够用了。5.3 验证数据质量三个快速检查第一看 DEM 的最小最大值。赣州最低海拔几十米最高一千多米如果出现负值或超过 2000数据有问题。第二随机抽几个点用 Google Earth 或天地图对比高程误差在 10 米以内算正常。第三检查 NoData 占比如果超过 20%说明数据覆盖不全。我每次拿到新 DEM 都会走一遍这三步从那以后我每次用新数据做分析前都强制走一遍验证流程省得后面返工。希望帮到你。本文还有配套的精品资源点击获取

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

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

免费获取报价 →
↑