
简介这份资源面向GIS从业者、地理信息专业师生及从事地形分析、城市规划、灾害评估的技术人员提供安徽省黄山市12.5米分辨率的数字高程模型数据并附带市级行政范围矢量边界可解决高精度地形建模与空间分析中基础数据不足的问题。压缩包共13个文件约80.37MB以tif高程栅格为核心辅以shp、shx、dbf构成的完整shapefile边界数据另有prj投影文件、tfw坐标信息、ovr金字塔及sbn、sbx索引文件以及若干xml元数据便于在ArcGIS等平台中直接加载与快速渲染。相比常见的30米DEM该数据能更细致地刻画山地起伏与沟谷特征适合开展洪水模拟、坡度坡向计算、工程选址等任务。目前已有161人学习下载可为学术研究、工程设计与政策决策提供可靠的地形底图支撑。1. 黄山市 12.5 米 DEM 数据到手后先搞清楚它能干什么如果你正在做皖南山区的水文分析、坡度分级、光伏选址或者越野路线规划大概率绕不开黄山市这块地方。黄山地处皖南山区地形起伏剧烈从海拔不到 100 米的新安江河谷到 1864 米的莲花峰高差接近 1800 米。这种地形条件下用 30 米分辨率的公开 DEM 做坡度分析很多沟谷会被抹平汇流路径也会出现明显偏移。12.5 米 DEM 的价值就在这里——它能把黄山地区的地形细节拉到可用的精度级别同时又不至于像 5 米或 1 米数据那样让普通工作站直接爆内存。这份数据包含两个核心内容一套 12.5 米格网的 DEM 栅格文件以及黄山市行政范围的 shp 矢量文件。前者用来做地形计算后者用来裁剪、统计和出图。适合做流域提取、坡度坡向分析、洪水淹没模拟、道路选线等需要中等精度地形的场景。如果你只是做全省尺度的气候区划30 米够用但一旦落到区县甚至小流域级别12.5 米就是性价比最高的选择。2. 拿到 7z 压缩包之后解压、检查与坐标系统确认2.1 解压与文件结构排查7z 格式在 Windows 上用 7-Zip 解压最稳Linux 下用 p7zip。解压后通常会看到若干分幅的 DEM 文件可能是 GeoTIFF 或 .img 格式以及一个 shp 文件包.shp/.shx/.dbf/.prj 四件套。第一步不是急着打开 ArcGIS而是先确认文件完整性。# Linux 下解压 7z 并列出内容 7z x huangshan_dem_12.5m.7z -o./huangshan_dem # 查看解压后的文件列表和大小 ls -lh ./huangshan_dem/ # 检查 shp 文件是否配套完整 ls ./huangshan_dem/*.shp ./huangshan_dem/*.shx ./huangshan_dem/*.dbf ./huangshan_dem/*.prj逻辑说明先解压到独立目录避免和已有数据混在一起。ls -lh看文件大小是否合理——12.5 米分辨率下黄山市全域约 9800 平方公里单幅 GeoTIFF 通常在几百 MB 量级。如果某个文件只有几 KB大概率是解压不完整。shp 文件必须四个配套文件齐全缺 .prj 意味着坐标系统信息丢失后续空间分析会出大问题。参数说明-o指定输出目录路径不要带中文和空格否则 GDAL 命令行工具容易报错。如果你在 Windows 上用 7-Zip右键解压时注意勾选“完整路径”避免分幅文件散落。2.2 坐标系统确认与统一这是最容易翻车的一步。DEM 数据和 shp 文件的坐标系统如果不一致裁剪出来的结果要么是空白要么位置偏移到十万八千里。黄山地区常见的情况是DEM 用 WGS84 地理坐标系EPSG:4326而 shp 文件可能用了 CGCS2000 投影坐标系如 EPSG:4547 或 EPSG:4548。# 查看 DEM 的坐标系统信息 gdalinfo huangshan_dem.tif | grep -A 5 Coordinate System # 查看 shp 的坐标系统信息 ogrinfo -al -so huangshan_boundary.shp | grep -A 3 Layer SRS逻辑说明gdalinfo输出栅格的元数据重点看 Coordinate System 部分。ogrinfo -al -so只输出摘要信息不打印所有要素适合快速检查。如果两者 EPSG 代码不同必须统一。我的习惯是全部转到 CGCS2000 高斯克吕格投影下因为做面积和距离计算时地理坐标系度为单位会引入严重误差。参数说明黄山位于 3 度带第 39 带中央经线 117°E对应 EPSG:4547CGCS2000 / 3-degree Gauss-Kruger CM 117E。如果你用的数据是 6 度带对应 EPSG:4499 或 4500 系列。转换用gdalwarp# 将 DEM 重投影到 CGCS2000 3度带 gdalwarp -t_srs EPSG:4547 -r bilinear -of GTiff \ huangshan_dem.tif huangshan_dem_cgcs2000.tif # 将 shp 也转到同一坐标系 ogr2ogr -t_srs EPSG:4547 huangshan_boundary_cgcs2000.shp huangshan_boundary.shp-r bilinear表示重采样用双线性插值适合连续地形数据。不要用 nearest否则会出现阶梯状伪影。转换后务必再用 gdalinfo 确认一次 EPSG 代码。注意如果原始 DEM 是地理坐标系像元大小是度约 0.0001 度重投影后像元大小会变成米约 12.5 米。这个变化是正常的但要在后续计算中留意单位。3. 用 QGIS 和 GDAL 把 DEM 裁到黄山市范围步骤与参数3.1 按掩膜裁剪的两种方式裁剪 DEM 到黄山市行政范围最直接的方法是gdalwarp加-cutline参数。但这里有个细节shp 文件可能包含多个多边形比如黄山市下辖的区县如果你只想保留市域整体轮廓需要先用dissolve合并。# 用 shp 裁剪 DEM只保留市域范围内的栅格 gdalwarp -cutline huangshan_boundary_cgcs2000.shp \ -crop_to_cutline -dstnodata -9999 \ -of GTiff huangshan_dem_cgcs2000.tif huangshan_dem_clip.tif逻辑说明-cutline指定裁剪边界-crop_to_cutline让输出范围严格对齐边界外接矩形-dstnodata -9999把边界外的区域设为 NoData。这样得到的栅格在 GIS 里打开时市域外是透明的不会干扰后续统计。参数说明-dstnodata的值建议用 -9999 或 -32768不要用 0因为 0 可能是合法高程值比如沿海地区。如果你在 QGIS 里操作对应的是“栅格”菜单下的“提取”-“按掩膜图层裁剪”界面里勾选“将裁剪范围与掩膜图层对齐”和“为裁剪区域外的像元指定 NoData 值”。3.2 裁剪后的完整性检查裁剪完成后不要直接进入分析。先做三件事检查像元数量、检查 NoData 比例、检查高程范围是否合理。# 用 rasterio 快速检查裁剪结果 import rasterio import numpy as np with rasterio.open(huangshan_dem_clip.tif) as src: data src.read(1) nodata src.nodata valid data[data ! nodata] print(f像元总数: {data.size}) print(fNoData 像元数: {np.sum(data nodata)}) print(f有效高程范围: {valid.min():.1f} ~ {valid.max():.1f} 米) print(f像元大小: {src.res[0]:.2f} x {src.res[1]:.2f})逻辑说明这段代码读取裁剪后的栅格统计有效像元的高程分布。黄山最高峰莲花峰 1864 米最低点在新安江河谷约 100 米左右。如果你看到最大值超过 2000 米或最小值低于 0 米说明数据有问题——可能是裁剪时混入了其他区域或者原始 DEM 本身有异常值。参数说明src.res返回像元大小12.5 米数据在投影坐标系下应该是 12.5 x 12.5。如果显示 0.0001 左右说明重投影没成功。NoData 比例一般在 5% 到 15% 之间因为黄山市边界不是规则矩形。如果超过 30%检查 shp 是否包含了不该有的飞地。4. 基于 12.5 米 DEM 的坡度与汇流分析参数怎么设4.1 坡度计算Z 因子和单位换算坡度分析是 DEM 最常用的场景之一。在 QGIS 里用“坡度”工具或者在 GDAL 里用gdaldem slope核心参数只有一个Z 因子。当你的 DEM 水平单位是米、高程单位也是米时Z 因子设为 1。但如果你用的是地理坐标系度就必须设 Z 因子为 111320赤道处每度约 111.32 公里。# 在投影坐标系下计算坡度Z 因子为 1 gdaldem slope huangshan_dem_clip.tif huangshan_slope.tif -of GTiff -compute_edges # 如果需要坡度百分比而非度数加 -p 参数 gdaldem slope -p huangshan_dem_clip.tif huangshan_slope_pct.tif逻辑说明-compute_edges让边缘像元也能计算坡度否则边界一圈会是 NoData。默认输出是度加-p输出百分比坡度。黄山地区很多山坡坡度在 25° 到 40° 之间超过 35° 的区域在工程上通常被划为陡坡需要特别注意。参数说明Z 因子是唯一需要根据坐标系调整的参数。如果你在 QGIS 里操作坡度工具里的“Z 因子”输入框默认是 1.0投影坐标系下不用改。但如果你偷懒没重投影直接在地理坐标系上算坡度结果会偏小约 10 万倍完全不可用。4.2 汇流累积量填洼与流量阈值水文分析的第一步是填洼。12.5 米 DEM 里通常会有一些小的洼地可能是真实地形如喀斯特溶洞也可能是数据噪声。不填洼直接算流向汇流路径会断掉。# 用 WhiteboxTools 做填洼和汇流累积 whitebox_tools -rFillDepressions -v \ --demhuangshan_dem_clip.tif \ --outputhuangshan_filled.tif whitebox_tools -rD8FlowAccumulation -v \ --demhuangshan_filled.tif \ --outputhuangshan_flowacc.tif \ --out_typecells逻辑说明FillDepressions把封闭洼地填平D8FlowAccumulation按 D8 算法计算每个像元上游汇水像元数。输出类型选cells得到像元计数选specific得到比汇水量。黄山地区新安江流域的汇流累积量阈值一般设在 500 到 2000 个像元之间对应约 0.08 到 0.3 平方公里。参数说明阈值设多少取决于你要提取的河网密度。阈值越小河网越密但会出现大量伪河道。我的经验是12.5 米数据下阈值设 1000 像元约 0.16 平方公里能较好匹配黄山地区 1:50000 地形图上的三级以上河流。如果你做城市内涝分析阈值可以降到 200 像元。注意WhiteboxTools 的 D8 算法在平坦区域会产生平行流线这是 D8 的固有缺陷。如果研究区有大片平坦河谷考虑换 D-infinity 算法。5. 避坑与排查12.5 米 DEM 处理中的 5 个血泪教训5.1 裁剪后栅格像元大小变了现象用gdalwarp -cutline裁剪后像元大小从 12.5 米变成了 12.48 或 12.53 米。原因gdalwarp默认会做重采样以对齐输出范围如果裁剪边界的外接矩形不是像元大小的整数倍就会微调像元尺寸。解决加-tr 12.5 12.5强制指定输出像元大小同时加-tap让输出范围对齐像元网格。5.2 shp 文件缺少 .prj 导致坐标丢失现象在 QGIS 里加载 shp 后图层位置跑到非洲几内亚湾附近。原因.prj 文件丢失QGIS 默认按 WGS84 地理坐标系处理而实际数据可能是投影坐标系。解决如果知道原始坐标系用ogr2ogr -a_srs EPSG:4547强制指定如果不知道找数据提供方确认不要瞎猜。5.3 填洼后汇流路径仍然断裂现象填洼后计算汇流累积量主河道上出现断点。原因DEM 边缘的 NoData 区域被填洼算法当作洼地处理导致水流在边界处中断。解决在填洼前先用gdalwarp把 NoData 区域向外缓冲一圈或者用gdal_fillnodata先填补 NoData。另一个常见原因是 DEM 本身有高程异常值比如某个像元突然比周围低 500 米。5.4 坡度结果出现网格状伪影现象坡度图上出现规则的方格纹理。原因原始 DEM 经过了重采样或者数据本身是拼接而成不同分幅之间有微小高程偏差。解决用gdalwarp -r bilinear做一次平滑重采样或者用高斯滤波做轻微平滑。但注意平滑会损失细节12.5 米数据的优势可能被削弱。5.5 内存不足导致处理中断现象用 Python 读取整幅 DEM 做分析时程序被系统杀掉。原因黄山市全域 12.5 米 DEM 约 6300 万像元float32 格式下约 250 MB看似不大但做汇流累积时中间数组会膨胀到几个 GB。解决用分块处理rasterio的block_windows或者先裁剪到研究子区域再分析。如果做全省分析建议用 30 米数据先跑通流程再换 12.5 米做重点区域。6. 进阶技巧用 12.5 米 DEM 做地形阴影和三维出图6.1 山体阴影的参数调优山体阴影Hillshade是 DEM 最直观的展示方式但默认参数往往效果一般。gdaldem hillshade有三个关键参数方位角-az、高度角-alt和 Z 因子-z。黄山地区建议方位角设 315°西北方向高度角设 45°Z 因子设 1.5 到 2.0 之间能突出山脊和沟谷的对比。# 生成黄山地区山体阴影 gdaldem hillshade huangshan_dem_clip.tif huangshan_hillshade.tif \ -az 315 -alt 45 -z 1.5 -of GTiff -compute_edges逻辑说明-az 315是国际通用的默认光照方向符合大多数人“左上角来光”的视觉习惯。-alt 45模拟太阳高度角 45°这个角度下山脊的阴影长度适中。-z 1.5是垂直夸张系数让地形起伏在视觉上更明显。如果你做的是印刷出图Z 因子可以调到 2.0如果是屏幕展示1.5 就够了。参数说明Z 因子不要超过 3.0否则阴影会过于夸张看起来像“揉皱的纸”。如果你在 QGIS 里操作山体阴影工具里的“垂直夸张”就是 Z 因子。另外-compute_edges一定要加否则图幅边缘会出现一圈无阴影的空白。6.2 用 QGIS 做三维地形渲染如果你需要做汇报或展示QGIS 的 3D 地图视图可以直接加载 DEM 和山体阴影。步骤是先加载裁剪后的 DEM然后在“视图”菜单里打开“3D 地图视图”在 3D 配置里把地形类型设为“DEM”选择你的 DEM 图层垂直缩放设 1.5 到 2.0。然后把山体阴影作为纹理贴上去效果比单纯用 DEM 着色好得多。一个我常用的技巧是把坡度图和山体阴影做叠加。在 QGIS 里用“栅格计算器”把山体阴影乘以 0.7加上坡度图乘以 0.3得到一张既有立体感又能看出坡度分级的图。这个组合在光伏选址报告里特别实用——山体阴影让地形一目了然坡度分级直接标出可建设区域。6.3 验证数据质量的三个硬指标最后说一个我每次拿到新 DEM 都会做的验证流程。第一用gdaldem slope算坡度检查最大值是否超过 80°——如果超过说明有异常值。第二用gdalinfo -stats看高程直方图黄山地区的高程分布应该集中在 200 到 800 米之间如果出现大量 0 值或负值数据有问题。第三把 DEM 和 shp 叠加检查边界处是否有明显的高程突变——如果有可能是分幅拼接没做好。这三个检查花不了十分钟但能帮你省掉后面几小时的排查时间。我刚开始用 DEM 的时候跳过这一步结果在汇流分析里折腾了一整天最后发现是原始数据里有一块 NoData 被当成了 0 米高程。希望帮到你。本文还有配套的精品资源点击获取