
简介这份资源面向地理信息、城市规划、环境研究及遥感分析方向的学习者与从业者提供云南省普洱市30米分辨率的数字高程模型DEM及配套行政边界矢量数据可用于地形分析、制图渲染、洪水模拟与空间规划等场景。压缩包共12个文件约211.48MB以tif栅格高程数据为核心辅以shp、dbf、prj、shx等Shapefile系列文件描述区域边界与坐标系统另有ovr、tfw、xml等辅助文件保障影像显示与元数据完整性。目前已有527人学习下载。通过这套数据读者可借助QGIS或ArcGIS直接开展高程提取、坡度坡向计算、流域分析与专题制图并利用边界文件完成区域裁剪与叠加分析是掌握DEM处理流程与GIS空间分析方法的实用练习素材。1. 普洱30m DEM加shp范围这套数据到底解决什么问题拿到「云南省普洱市DEM数字高程数据30m含区域范围shp文件.zip」这个标题很多人第一反应是去搜哪里能下载但真正干过项目的人会先问一句这套数据拿来干什么。普洱地处滇西南横断山脉南延段地形从澜沧江、把边江的低热河谷一路爬到无量山、哀牢山的高海拔山脊相对高差动辄上千米。30m 分辨率意味着每个栅格像元代表地面 30×30 米的实际范围对市级尺度的坡度分析、流域划分、茶园适宜性评价、公路选线这类工作来说这个精度刚好卡在「能看出地形骨架、文件又不至于大到跑不动」的甜点上。配套的 shp 范围文件解决的是另一个高频痛点——你从公开渠道拿到的 DEM 往往是跨省甚至跨国的瓦片直接裁剪靠坐标范围容易切歪有了行政边界矢量掩码提取才能干净利落。这套数据适合做区域规划、水文建模、遥感预处理的从业者也适合刚接触 GIS 想拿真实地形练手的人。2. 30m DEM 与 shp 范围文件的选型逻辑2.1 为什么是 30m 而不是 5m 或 90m分辨率的选择本质是精度、体积、算力三者的博弈。90m 的 SRTM 覆盖全球、免费易得但放到普洱这种沟壑纵横的地方一条几十米宽的山脊会被抹平做小流域提取时河网会明显偏移。5m 精度当然诱人可普洱全市面积约 4.5 万平方公里5m 栅格的数据量是 30m 的 36 倍单是拼接和裁剪就能把普通工作站的硬盘和内存吃满而且很多公开的 5m 数据在植被茂密区其实是 DSM 而非 DEM树冠高度混进了地形里。30m 是 ASTER GDEM、SRTM 这类全球数据集的主流规格在市级尺度上既能保留主要地形特征又能让 ArcGIS、QGIS 流畅处理。常见做法是区域宏观分析用 30m局部工程勘察再叠加更高精度数据。2.2 shp 范围文件在裁剪里的真实作用很多人以为 shp 只是告诉你「数据覆盖哪里」其实它更大的价值在于裁剪和统计。DEM 栅格是矩形阵列而普洱市行政边界是不规则多边形直接用矩形范围裁出来的结果会带进周边州市的地形做面积统计、均值计算时全是噪声。用 shp 做掩码提取能把栅格严格限制在边界内边界外的像元被赋为 NoData。这里要区分两个容易混的操作按掩膜提取Extract by Mask会保留边界内像元并输出新栅格而裁剪Clip在部分工具里只是按矩形范围切。做行政区统计必须用掩膜提取否则边界像元会被算错。2.3 拿到 zip 后先做什么目录结构与坐标系核查解压后一般能看到栅格文件.tif 或 .img和矢量文件.shp/.shx/.dbf/.prj 一整套。第一件事不是急着打开而是核查坐标系。DEM 常见的是地理坐标系 WGS84 或 CGCS2000单位是度shp 可能是投影坐标系单位是米。两者不一致时裁剪会错位甚至报错。用 ArcGIS 的话在 Catalog 里右键看属性用 QGIS 直接看右下角坐标显示。如果一个是地理坐标一个是投影坐标先用「投影」工具把两者统一再谈裁剪。# 用 GDAL 快速查看 DEM 和 shp 的坐标系与范围 gdalinfo puer_dem_30m.tif | grep -E Coordinate|Origin|Pixel Size ogrinfo -al -so puer_boundary.shp | grep -E Extent|SRS这段命令做的是「体检」gdalinfo 输出栅格的坐标参考、原点坐标和像元大小ogrinfo 输出矢量的范围和空间参考。重点看两者的 SRS 是否一致、shp 的 Extent 是否落在 DEM 的范围内。如果 shp 范围明显超出 DEM说明数据不匹配得先换数据而不是硬裁。3. 用 shp 裁剪 30m DEM 的完整操作链3.1 ArcGIS 里按掩膜提取的标准步骤ArcGIS 是很多单位的主力工具操作路径是ArcToolbox → Spatial Analyst Tools → Extraction → Extract by Mask。输入栅格选 DEM掩膜选普洱 shp输出指定路径。如果 Spatial Analyst 许可没开这个工具是灰的得先在自定义里勾选扩展模块。跑完之后用「识别」工具点几个边界外的位置确认值是 NoData 而不是 0 或负值。有个细节如果 shp 有多个多边形比如普洱下辖各区县Extract by Mask 会把所有多边形并集一起裁想按区县分别出图得先做筛选或分割。3.2 QGIS 与 GDAL 命令行的高效替代不想依赖商业软件的话QGIS 的「按掩膜图层裁剪栅格」和 GDAL 的 gdalwarp 都能干这活。命令行更适合批处理尤其是要按十个区县分别裁剪时写个循环比手点快得多。# 用 gdalwarp 按 shp 掩膜裁剪 DEM-cutline 指定矢量-crop_to_cutline 让输出范围贴合边界 gdalwarp -cutline puer_boundary.shp \ -crop_to_cutline \ -dstnodata -9999 \ -tr 30 30 \ -r bilinear \ puer_dem_30m.tif puer_dem_clip.tif参数逐个说-cutline 指定裁剪用的矢量边界-crop_to_cutline 让输出栅格的外接矩形紧贴矢量范围而不是保留原图幅-dstnodata -9999 把边界外像元设为 -9999方便后续统计时排除-tr 30 30 强制输出像元保持 30 米避免重采样改变分辨率-r bilinear 是重采样方法连续型高程数据用双线性比最近邻更平滑。跑完用 gdalinfo 再看一眼确认行列数和范围已经缩小到普洱边界。3.3 裁剪后必做的三项校验裁完不是就完事了至少做三件事。第一统计像元数和高程范围普洱最低点约在河谷 300 多米最高点在无量山一带超过 3000 米如果统计出来最大值只有几百米八成是裁错了区域或数据本身有问题。第二检查 NoData 区域是否和 shp 边界吻合把裁剪结果和 shp 叠在一起看边界外应该全是透明或指定值。第三算一下投影面积和 shp 属性表里的面积是否接近差太多说明坐标系或像元大小有问题。# 用 rasterio 快速校验裁剪结果的高程统计 import rasterio import numpy as np with rasterio.open(puer_dem_clip.tif) as src: data src.read(1) nodata src.nodata valid data[data ! nodata] # 排除 NoData print(有效像元数:, valid.size) print(高程范围: %.1f - %.1f 米 % (valid.min(), valid.max())) print(平均高程: %.1f 米 % valid.mean()) print(像元大小:, src.res)这段代码读入裁剪后的栅格用 nodata 值过滤掉边界外像元再输出有效像元数、高程极值和均值。如果有效像元数为 0说明 nodata 设置和实际值不匹配如果高程范围离谱回去查数据源。像元大小应该稳定输出 30 米左右偏差大说明重采样参数没设对。4. 避坑与排查DEM 裁剪里最容易翻车的五件事4.1 现象裁剪结果全黑或全是 NoData原因通常是坐标系不匹配。DEM 是地理坐标度shp 是投影坐标米两者数值量级差了几十万倍掩膜范围完全对不上。解决办法是先统一坐标系用 ArcGIS 的「投影栅格」或 GDAL 的 gdalwarp 把两者转到同一套坐标下再裁。别想着靠调范围硬凑那是给自己挖坑。4.2 现象边界处出现锯齿或像元被切一半这是栅格分辨率和矢量边界精度不匹配导致的。30m 像元意味着边界只能精确到 30 米边界线穿过像元时工具要么保留整个像元要么丢弃必然有锯齿。如果做面积统计这种误差会累积。缓解办法是裁剪时不做重采样保持原分辨率统计时用「以表格显示分区统计」按 shp 分区算让工具处理边界像元的归属而不是自己按像元中心点判断。4.3 现象Extract by Mask 和 Clip 结果不一样这两个工具在 ArcGIS 里行为不同。Clip 只按矩形范围切输出还是矩形Extract by Mask 按多边形掩膜边界外变 NoData。做行政区分析必须用后者。有人图省事用 Clip结果统计面积时把周边地市的地形也算进去了数据直接废掉。记住一句话要形状贴合边界用掩膜提取。4.4 现象裁剪后文件体积没变小如果用了 -crop_to_cutline 但没生效或者输出格式压缩没开文件可能还是原大小。检查 gdalwarp 是否加了该参数输出 GeoTIFF 时可以加 -co COMPRESSLZW 做无损压缩。另外确认裁剪范围确实缩小了用 gdalinfo 看行列数如果和原图一样说明掩膜没起作用。4.5 现象高程值出现异常负值或突变除了 -9999 这类人为 NoData真实地形里也可能有数据空洞被填成极端值。拿到数据先看直方图普洱正常高程在 300 到 3300 米之间出现 -32768 或 9999 这类值基本是填充码。处理办法是在栅格计算器里把异常值设为 NoData或者用众数滤波局部修补。别直接拿带异常值的数据做坡度结果会离谱到没法看。5. 从 30m DEM 到可用地形因子的进阶玩法裁剪只是第一步真正让数据产生价值的是后续派生。用普洱这套 30m DEM 加 shp我一般会先算坡度和坡向这两个是茶园选址、光伏选址的硬指标。坡度用 ArcGIS 的 Slope 工具或 GDAL 的 gdaldem slope输出单位选度。普洱很多区域坡度超过 25 度属于退耕还林重点区这个阈值在分析里经常用到。坡向则影响光照和水分南坡和北坡的差异在山区农业里很关键。# 用 gdaldem 从裁剪后的 DEM 生成坡度和坡向 gdaldem slope puer_dem_clip.tif puer_slope.tif -p -compute_edges gdaldem aspect puer_dem_clip.tif puer_aspect.tif -compute_edges-p 表示输出坡度用百分比还是度不加 -p 默认度-compute_edges 让边界像元也能算出值避免边缘一圈 NoData。坡向输出是 0 到 360 度正北为 0顺时针增加。这两个文件出来后可以再用 shp 分区统计得到每个区县的平均坡度和优势坡向。再往深走一步是做水文分析。30m 分辨率下填洼、流向、流量累积、河网提取这一套流程能跑出比较合理的流域边界。普洱是澜沧江和红河的分水岭地带流域划分对水资源管理很有意义。填洼用 Fill流向用 Flow Direction流量累积用 Flow Accumulation最后设个阈值提取河网。阈值怎么定没有标准答案我一般先用流量累积大于 500 个像元试再对照实际水系图调。这里有个血泪经验填洼不彻底会导致流向出现死循环流量累积算出来全是断头河所以填洼后一定用「汇」工具检查一遍。最后说验证。派生结果不能只看图漂亮得拿实测数据或公开水系、路网做交叉验证。比如把提取的河网和 shp 里的水系图层叠加看主干河道是否吻合把坡度图和实地照片对比看陡坡位置是否一致。我自己的习惯是每做完一个派生图层都随机抽十个点用「识别」工具读值和预期范围对一遍这个笨办法帮我拦下过好几次坐标系没统一的事故。这套 30m DEM 加 shp 的组合价值不在于数据本身多稀有而在于它能让区域尺度的地形分析快速跑通省去到处找数据、对坐标系的折腾。希望帮到你。本文还有配套的精品资源点击获取