简介:面向GIS、测绘与城市规划从业者,提供安徽省黄山市12.5米分辨率的数字高程模型(DEM)数据,并附带市级范围shp矢量边界文件。相比常见的30米分辨率,该数据能更精细地刻画地表起伏,适用于地形分析、洪水淹没模拟、市政选址、边坡评估等需要高精度高程信息的场景。压缩包共13个文件,大小80.37MB,核心为TIFF格式DEM栅格,含tfw坐标配准、prj投影定义、aux/xml元数据及金字塔辅助文件;同时包含完整的shapefile(shp/shx/dbf/sbn/sbx),便于直接在ArcGIS、QGIS等平台中加载并叠加行政边界使用。目前已有161人学习下载。资源内置的栅格与矢量数据配套齐全,无需额外转换即可投入实际项目,适合科研、工程项目前期勘测及教学案例练习,可显著节省数据获取与预处理时间。
1. 12.5米DEM数据:拿到黄山压缩包后先想清楚三件事
拿到一份12.5米DEM数字高程数据,大部分人第一件事是双击解压再拖进GIS看一眼,而我建议先想清楚:这份数据到底要回答什么问题。覆盖安徽黄山市范围的12.5米栅格,加上市级边界的shp文件,已经具备了做坡度分析、等高线生成、分区地形统计的起点条件。适合做灾害评估、旅游开发、选址分析或三维仿真的人,有QGIS或ArcGIS就能直接开工。压缩包用的是7z,优点是体积小,但它同时也是后面最容易出问题的环节——解压、坐标系匹配、NoData处理这三处,基本决定你能不能在一个小时内拿到可用成果。
2. 解开压缩前先看懂数据:12.5米DEM与市级shp边界各自要干什么
拿到压缩包后,先别急着解压。这份资源里其实只有两类东西:一类是若干幅12.5米分辨率的DEM栅格,一类是一个市级范围的shp文件。前者回答“地形长什么样”,后者回答“算哪里、裁到哪”。两者拼在一起,才构成一个完整的区域地形分析闭环,缺一个都会让你的后续工作多绕半圈。
2.1 12.5米分辨率在DEM里属于什么水平
DEM(数字高程模型)的核心单位是像元,12.5米的意思是每个格网对应地面边长约12.5米的区域。相比SRTM的30米、ASTER GDEM的30米,这个尺度已经能分辨出山区里比较窄的冲沟、人工填方边缘、独立山包这类微地形。黄山辖区内有大量中低山和丘陵,很多规划里关心的山脊线、山谷线,在30米分辨率上会被平滑成一片糊状,而在12.5米上勉强能看出转折。
这种分辨率带来的是一个“看得见但要想清楚”的工程量:栅格像元数量按面积的四倍增长,处理时间、磁盘占用和渲染量都会明显抬升。比如同一块30米数据只有200MB,12.5米就可能超过1GB。如果你只是看整个皖南大区域的地势趋势,那30米足够;但你要是做山洪沟判读、旅游步道选线、灾害点坡度复核这类细活,12.5米的优势非常直接。
说到底,选择哪个分辨率不是越细越好,而是看你的分析尺度。市县级边界配上12.5米DEM,刚好处于“能看清山体骨骼、又不至于被单棵树木卡住”的平衡位置。很多公开下载渠道里,12.5米产品被归为“高分辨率地形数据”,处理时也默认按这个思路走。
2.2 市级范围shp文件承担的角色
shp保存的是面状边界,一般包含一个面要素类和属性表。这份资源里带上市级范围shp,直接解决了两个问题:第一是裁剪,DEM原图往往比行政区范围大,直接用shp做掩膜提取,得到的是边界利落、无冗余的栅格;第二是统计口径,面积、坡度均值、高程分带都按shp边界计算,报告上的数字才归一。
如果没有这个shp,你得自己从公开区划里找边界再校准,费时且容易出错。常见的全国shp有很多版本,但年份不同,边界会相差几百米。尤其是山峰区域,一条山脊线差出几百米,对面积统计的影响并不小。资源自带边界的好处就是“匹配已知”,后面的裁剪、制图、统计都能直接对齐。
另外一点容易被忽略:shp里的属性表通常带有行政区代码和名称字段,做分区统计时可以直接作为zonal statistics的分区对象,不用再手工建立关联字段。我之前处理安徽其他城市的数据时,就因为懒得用属性字段,硬是写了半天的分区条件,后来才发现shp属性表里已经躺好了数据。
2.3 坐标系底细:WGS84、UTM与CGCS2000容易混在哪里
很多人解压后习惯性双击shp,看到边界和DEM能在窗口里叠上,就直接开始裁剪,结果发现成果整体偏出好几米甚至几十米。 这不是“看起来重叠”就能跳过的步骤。决定成败的第一件事,是检查两个数据源的坐标系。
中国范围内常见的组合是:DEM使用投影坐标(比如WGS84 / UTM 50N,或CGCS2000 3度带),shp使用地理坐标(WGS84经纬度),或者反过来。两者都能用,但叠加时必须统一。最稳妥的检查方式是读取PRJ文件,或者用GIS软件右键查看图层属性。ArcGIS里右键图层就能看到坐标系字符串,QGIS里则显示在图层面板的小图标上。
注意别踩一个玄学坑:某些shp在导出时丢了.prj文件,ArcGIS里显示“未知坐标”。这种shp一旦和DEM叠加,既不会报错,视觉上也可能因为范围接近而“看起来挺正常”,但一旦做裁剪或计算,偏移立刻暴露。遇到这种文件先别慌,按范围反推坐标系再手动指定,具体操作我在第5章里展开。
3. 解压7z压缩包:校验、目录整理与坐标系确认
这一章专门处理“怎么把压缩包变成能用的数据”。7z格式的压缩率比zip高出不少,但它的解压门槛也比zip高一点,尤其在不同操作系统下要用的工具完全不一样。这里我把Windows和Linux两条路都走一遍,顺便把校验命令放进去,避免你解压出来一个半残的数据集还以为是正常状态。
3.1 Windows图形界面解压:7-Zip安装与解压细节
Windows下最常见的操作是安装7-Zip,然后右键使用“解压到当前文件夹”或“解压到xxx\”。这里我不重复官网下载步骤,只说几个容易被忽略的点。
第一,安装时不要用所谓的“7z增强版”“绿色版”,直接装官方稳定版,否则解压大文件时容易弹出各种奇怪错误。第二,解压路径尽量不要带中文加空格混合的长目录,有些老版本工具会在解压后文件路径超长时中断,虽然新版7-Zip支持长路径,但一旦在工程机环境里遇到限制,排查起来相当费劲。第三,如果压缩包设置了密码,选择“显示密码”再输入,避免盲打导致密码对但输入错的情况。
解压完成后,先别急着看数据,先把整个目录结构梳理一遍。我的习惯是:新建一个以数据名称命名的文件夹,把DEM栅格和shp分开存放,避免后面处理时误把shp当作普通文件删除。这个动作虽然简单,但在项目周期拉长到两三个月后,你会感谢当初这个分类。
3.2 Linux命令行解压:7z x与7z e千万别混用
如果你的处理环境是Linux服务器,那命令行是绕不开的。很多项目上的做法是装p7zip,命令如下。
sudo apt update sudo apt install -y p7zip-full 7z x huangshan_dem.7z -o/data/huangshan -y这里7z x是解压命令,-o指定输出目录,/data/huangshan是目标路径,-y表示所有确认提示都自动同意。如果你的系统是CentOS,安装命令换成sudo yum install -y p7zip p7zip-plugins。
有一个高频翻车点:把7z x写成7z e。7z x会保留压缩包内的目录结构,7z e会把所有文件都拉平到同一个目录。DEM分幅文件如果重名,后者就会互相覆盖,导致数据缺失。我见过不止一次因为图省事用7z e,结果解压出来少了三块栅格,后面做镶嵌时才发现。
如果解压时碰到“密码正确但一直报错”的情况,先用7z t校验压缩包完整性。
7z t huangshan_dem.7z7z t是测试模式,只校验不输出文件。如果测试通过,就说明压缩包本身没坏,问题出在解压路径或版本上。如果测试报CRC错误,那基本可以断定压缩包在传输过程中损坏了,重传对应文件比反复解压更实际。
3.3 用gdalinfo快速核对DEM元数据
解压之后,我建议立刻用GDAL工具做一次体检,而不是直接双击打开。原因很简单:DEM的坐标系、NoData值、像元大小,这些关键参数一眼就能看到,比在GUI里翻属性快得多。
gdalinfo /data/huangshan/huangshan_dem.tif重点看这几块输出:Size是栅格宽高,Origin和Pixel Size决定栅格位置与分辨率,Coordinate System是坐标系定义,NoData Value是空白区域的填充值。如果输出里显示Pixel Size = (12.5, -12.5),说明分辨率确实是12.5米。
对应的shp文件用ogrinfo查看边界信息。
ogrinfo -so /data/huangshan/huangshan_city.shp huangshan_city-so参数只输出概要信息,能看到要素类型、字段列表和坐标范围。这一步能直接暴露两个数据源坐标系不一致的问题,避免后面裁剪时才发现错位。
4. 从DEM到可用成果:shp裁剪、坡度提取与等高线生成
数据检查完,接下来就是真正的业务操作。这一章给你三件最常用的工具:用shp裁剪DEM、提取坡度、生成等高线。每一条都是可以直接套用的流程,代码块后面的参数说明是重点,改参数比记命令更重要。
4.1 用shp裁剪DEM:ArcGIS掩膜与gdalwarp两条路线
ArcGIS用户可以用掩膜提取工具,一行Python代码就能完成。
import arcpy from arcpy.sa import ExtractByMask arcpy.env.workspace = r"D:\huangshan" arcpy.env.overwriteOutput = True dem = "huangshan_dem.tif" mask = "huangshan_city.shp" out = ExtractByMask(dem, mask) out.save("huangshan_dem_clip.tif")这里ExtractByMask的输入有两个:被裁剪的DEM和作为裁剪范围的shp。输出栅格会保留DEM原有的像元大小和数据类型,但裁剪边界严格对齐shp的边缘。overwriteOutput设为True是防止文件已存在时报错,批量处理时会省很多事。
如果你用的是QGIS或纯命令行环境,gdalwarp更直接。
gdalwarp -cutline huangshan_city.shp -crop_to_cutline \ -dstnodata -9999 -overwrite -of GTiff \ huangshan_dem.tif huangshan_dem_clip.tif-cutline指定shp路径,-crop_to_cutline是精髓:不加这个参数,gdalwarp只按shp的外接矩形裁剪,边界四周会留下一圈非shp范围的多余栅格;加了它,才会严格按边界裁出多边形形状。-dstnodata -9999用来指定输出栅格的NoData值,避免后面做坡度时边缘出现异常数值。
一个经验之谈:裁剪前先把DEM和shp都投影到同一个米制坐标系,再执行上面任何一条命令。如果两个都是经纬度坐标,虽然也能跑通,但坡度计算时会需要在比例因子上面做调整,麻烦得很。
4.2 计算坡度:单位、Z因子与坐标系陷阱
坡度是从DEM里提取最频繁的地形因子。对黄山这种山地丘陵区,坡度是建设用地适宜性评价、地质灾害初筛、坡面日照分析的基础输入。用GDAL计算坡度只需要一行命令。
gdaldem slope huangshan_dem_clip.tif huangshan_slope.tif -p不加-p时输出的是坡度度数,范围0到90;加上-p输出的是百分比坡度,范围0到无穷大。实际项目里,规划口子喜欢看百分比,工程口子习惯用度数,两个都能接受,但报告里必须统一说明单位。
这里有一个极易翻车的地方:如果DEM是WGS84经纬度坐标,也就是没有投影,gdaldem计算坡度时会把经纬度度数当作平面距离,算出来的坡度严重失真。这时候需要在命令里加比例因子。
gdaldem slope huangshan_dem_clip.tif huangshan_slope.tif -p -s 111320-s 111320表示每度近似111320米,GDAL在计算时用这个值把经纬度转换为米。如果你的DEM已经是UTM或CGCS2000平面坐标,就不要加这个参数,加了反而错。判断标准很简单:看gdalinfo输出里Coordinate System是投影坐标还是地理坐标。
ArcGIS用户直接在工具箱里搜“坡度”,输入DEM、选择输出单位角度或百分比就行。但要注意栅格分析环境设置里的“像元大小”必须和DEM一致,否则重采样会悄悄改变地形细节。
4.3 等高线生成:间距怎么定、导出后怎么用
等高线是DEM最可视化的产出。无论是做山体阴影叠加、制图输出,还是转CAD做工程套图,都离不开它。ArcGIS里生成等高线的工具叫“等高线”,属于3D Analyst或Spatial Analyst扩展模块,用Python调用如下。
import arcpy arcpy.gp.Contour_sa( "D:/huangshan/huangshan_dem_clip.tif", "D:/huangshan/huangshan_contour.shp", 10, 0 )第二个参数是输出shp,第三个参数是等高线间距,第四个是起始等高线值。间距是核心参数:像黄山这种地形起伏大的区域,我一般先用10米间距看整体山体格局,等到了详细设计阶段再加密到5米甚至2米。间距越密,渲染越慢,文件越大,所以第一轮不要贪细。
QGIS或纯命令行环境下,用gdal_contour效率更高。
gdal_contour -i 10 -a elev huangshan_dem_clip.tif huangshan_contour.shp-i 10是等高距10米,-a elev表示把高程值写进属性字段elev里。输出的shp可以直接在CAD里打开,也可以转成KML丢进地图软件做快速查看。这里顺手解决一个常见问题:很多人搜“arcgis shp转kml”,其实只要先把DEM裁好、等高线生成好,再转KML就不会出现坐标偏移,因为你的shp坐标系已经和底图统一了。
5. 避坑排查:DEM与shp数据使用中的四个经典坑
这一章写的是我实际拆数据时踩进去过的四个坑,每条都按“现象 → 原因 → 解决”的顺序写,希望能帮你省掉同样的排查时间。
5.1 7z解压报错:密码正确却一直提示失败
现象:双击压缩包输入密码,几秒后提示“数据错误(CRC校验失败)”,部分文件已经解出来,但流程无法完整结束。密码明明是对的,反复输入也没用。
原因:解压中途报CRC错误通常不是密码问题,而是压缩包在传输过程中损坏,或者7-Zip版本过老,无法正确解码大文件。网上很多说法把这个问题归因于密码,其实密码错误会直接提示“密码错误”,不会走到CRC那一步。
解决:先用7z t 压缩包文件名.7z测试包完整性。如果测试确认损坏,只能找发送方重新传输,修不了的压缩包不要反复尝试。如果测试没问题,再把7-Zip升级到当前稳定版,并确保解压到本地磁盘而不是网络驱动器。
5.2 shp缺少.prj文件导致坐标系丢失
现象:在ArcGIS里双击shp,图层能显示,但图层属性里看不到坐标系信息;后续裁剪、投影、转KML全部失败,甚至导出后shp里的要素跑到了海里。
原因:shapefile由多个同名后缀文件组成,.prj文件专门存储坐标系定义。很多网上下载的shp在二次压缩时漏掉了.prj,或者导出时没有勾选坐标系,就会呈现这种状态。它不影响显示,但影响一切和坐标相关的计算。
解决:在ArcGIS里用“定义投影”工具先给shp指定正确坐标系,再用“投影”工具转到DEM所在坐标系。QGIS里则是在图层属性的“源”设置中手动分配CRS。如果不知道原坐标系,按shp经纬度范围反推:黄山市约在东经117°至118°、北纬29°至30°,如果坐标值显示为十一位数字且单位是米,多半是UTM 50N;如果范围是小数度,则按WGS84或CGCS2000处理。
5.3 DEM与shp坐标系不一致导致裁剪偏移
现象:拿shp去裁剪DEM,输出结果整体偏移,山脊线和边界对不上,同一座山在DEM上的位置和shp边界差了整整一个山体。
原因:DEM用的是投影坐标,shp用的是地理坐标,或者两者虽然都是投影坐标,但UTM带号不一致。黄山正好处于UTM 49N和50N分界线附近,很容易绕进去。视觉上因为范围接近,叠图时“看起来能对上”,一旦放大到细节就露馅。
解决:统一坐标系。ArcGIS里用“投影栅格”把DEM转到shp所在坐标系,或者反过来用“投影”工具把shp转到DEM坐标系。处理完后右键查看两个图层的坐标系字符串,确认完全一致再执行裁剪。这个检查动作看起来多余,但能省掉后面重跑一遍的返工时间。
5.4 DEM值域出现极端值或NoData被当作0
现象:做坡度时,边缘出现一排接近90°的异常条带;渲染DEM时,整幅图边缘是黑色或白色,数值属性表里最小值是0,而且面积占比不小。
原因:裁剪后的栅格在shp边界外侧填充了0值,或者原始DEM的NoData是-9999,但ArcGIS没有自动识别为NoData。0在坡度计算里会被当成平坦地面参与运算,边界处真实坡度和平地交界就会出现伪陡坎。
解决:在处理链里明确NoData。ArcGIS里可用“构建NoData”工具把指定值转为NoData,更稳妥的写法是用栅格计算器:SetNull(dem, dem, "VALUE = 0")。执行前先看一眼DC统计,如果最小值是0且出现在边界区域,基本就是这个原因。DEM毕竟是连续地形,黄山市范围内海拔不可能出现大面积0值,只要发现就得处理。
5.5 坡度结果异常:坐标单位与Z因子带来的偏差
现象:提取出来的坡度要么全是接近90°,要么全是接近0°,明明山体起伏很大,结果却不符合常识。
原因:输入DEM是经纬度坐标,但项目里没有统一成投影坐标,GDAL或ArcGIS在计算坡度时把经纬度度数当成平面距离,结果严重失真。另一种情况是DEM高程单位是英尺,但大家都默认是米,Z因子没有做换算。
解决:先把DEM投影为UTM或CGCS2000这类米制坐标,再跑坡度工具。如果DEM是经纬度坐标又必须直接计算,就用-s 111320做比例修正。高程单位这一项,可以在gdalinfo里看到,输出信息里的Z单位如果是英尺,需要在坡度工具的Z因子参数里填0.3048。
6. 进阶验证:高程值域与剖面线的日常检查习惯
数据裁完、坡度算完、等高线也出来了,不代表这条生产链就闭环了。我每次交付前都会额外跑两个验证,一个是高程统计,一个是剖面线对照。
高程统计用Python的rasterio库就能完成,代码极短。
import rasterio import numpy as np with rasterio.open("huangshan_dem_clip.tif") as src: data = src.read(1, masked=True) print("高程最小值:", data.min()) print("高程最大值:", data.max()) print("高程均值:", data.mean()) print("NoData值:", src.nodata)这段代码把DEM读成numpy数组,masked=True表示把NoData遮掉,不参与min/max/mean计算。如果输出里的最小值是-9999或者0,说明前面第5.4节的NoData问题没有清理干净;如果最大值异常,比如超过3000米,就要怀疑数据源里混入了噪声点。黄山最高峰约在1800米级别,黄山市整体高程在100至1800米之间,看到明显超出这个范围的极值,就该回头查数据。
第二个验证是剖面线。在QGIS里用“配置文件工具”沿着一条穿越主体山地的线画剖面,看高程曲线是否平滑、有没有突兀的单点跳变。一条合理的山体剖面线应该是连续起伏的锯齿状,如果某个点突然凹下去或凸起一个尖峰,对应的位置在栅格上往往就是Nodata或异常值。
这两个检查跑完,数据质量基本就有底了。从那以后我每次拿到新的DEM包,都强制先跑一遍高程统计和剖面验证,再进入坡度、等高线流程。很多表面看起来正常的DEM,一旦跨过这两个检查,都能揪出点问题来。希望帮到你。
本文还有配套的精品资源,点击获取