☰
陇南30m DEM数据处理全流程:从解压到坡度提取避坑指南
2026/10/3 9:40:54 网站建设 项目流程

简介:这份资源是甘肃省陇南市30米分辨率数字高程模型(DEM)数据包,面向GIS从业者、城乡规划师及环境研究人员,可满足地形分析、坡度坡向计算、流域提取、灾害风险评估与地图制图等需求。压缩包内含12个文件,核心为覆盖陇南市及周边区域的DEM栅格(tif格式),同时附带行政边界Shapefile及dbf、prj等配套文件,便于在ArcGIS、QGIS等平台中直接加载、裁剪或叠加分析;整体大小约113.86MB,数据粒度适中,适合区域级研究。已有360人学习下载。借助该数据,用户可快速获取陇南市地表高程信息与精准边界范围,省去自行下载拼接的步骤,直接开展水文分析、可视域分析或三维地形建模等应用,也可作为高校地理信息课程的教学素材。

1. 打开这个陇南30m DEM+shp 数据包:别急着拖进 GIS,先搞清楚你手里是什么

把“甘肃省陇南市DEM数字高程数据30m(含区域范围shp文件).zip”这套数据拿到手,很多人的第一反应是丢进 ArcGIS,拉个山体阴影看看地形,觉得“数据没问题就开工了”。但实际上,这类 30m 分辨率、覆盖陇南全域的数字高程模型,配合区域范围shp文件,真正要用到滑坡危险性评价、小流域汇水分析、道路选线或者土方量估算里,中间至少隔着五六道坎:zip伪加密解压、GeoTIFF与ASC格式识别、WGS84椭球与EGM96高程基准的处理、经纬度坐标系下坡度Z因子翻车、边界文件坐标系不一致等等。

这套数据主要解决的是:让你不需要零散下载、人工裁剪,直接拿到陇南市范围的高程栅格和矢量边界底图。适合GIS从业者、测绘工程师、做地质灾害与水利规划的技术人员。它能不能用、怎么用、坑在哪里,下面按我实际处理的顺序一步步说。

2. 拆包之后先别急着打开:zip完整性、DEM文件格式和shp四件套

2.1 检查zip是否被“伪加密”,再做解压:哈希校验与解压参数

数据包到手,我一般不会直接用鼠标双击解压。先确认这个zip包完整、没有被二次打包过,尤其要小心某些网盘渠道二次分发时写入的“伪加密”标志。伪加密的典型表现是:解压时会弹出密码输入框,但数据来源页根本没给过密码;有时候包名和清单也正常,就是提示要密码。

用命令行工具先看内部清单,再校验哈希,最后才真正解压:

# 先列出压缩包内部文件清单,不需要解压就能看到 unzip -l "甘肃省陇南市DEM数字高程数据30m(含区域范围shp文件).zip" # 计算压缩包SHA256,和数据来源页面提供的校验值对比 sha256sum "甘肃省陇南市DEM数字高程数据30m(含区域范围shp文件).zip" # 确认无误后解压到独立目录,方便后面对照原始文件 mkdir -p /gis/data/dem30m && unzip -o "甘肃省陇南市DEM数字高程数据30m(含区域范围shp文件).zip" -d /gis/data/dem30m

第一条unzip -l只列文件清单,如果输出末尾出现incorrect password之类提示,多半就是伪加密在作怪。第二行的sha256sum是和来源页给的校验值做比对,用来确认文件在传输过程中没被破坏。第三行-o表示覆盖已有文件,-d指定解压目录。

如果常规unzip提示密码,试试用7-Zip强制解压:

7z x -y "甘肃省陇南市DEM数字高程数据30m(含区域范围shp文件).zip" -o/gis/data/dem30m

7-Zip对zip伪加密的容忍度比Windows自带解压工具高不少,空密码或伪加密标志往往会被它直接忽略。第一次处理这类地理数据包,不知道文件结构就贸然解压,后面文件缺失很难排查,所以这类校验动作别省。

2.2 分清GeoTIFF和ASCII Grid,再定工具链

解压之后,常见情形是目录里有一个或几个.tif文件,也可能出现.asc或.dat结尾的ASCII文本DEM。GeoTIFF把高程值、地理参考信息、坐标系信息都打包在栅格文件内部,ArcGIS/QGIS都可以直接打开使用,这是最省心的格式。ASCII Grid则是一个纯文本头加上矩阵数值,ArcGIS虽然能识别,但经常遇到坐标系文件缺失,还要手动补定义。

如果包里是.tif,先跑一句gdalinfo -stats看看内部信息。这句命令相当于给DEM做一次“CT扫描”,可以知道栅格尺寸、像素大小、坐标系、NODATA值和高程值范围:

gdalinfo -stats longnan_dem.tif

-stats参数特别关键,它会计算栅格的最小值、最大值、平均值和标准差。一个正常的陆地DEM,高程统计范围应该和陇南地形吻合(大概在600米到4200米之间,具体取决于覆盖范围是否包含摩天岭等高山区),如果出现-32767这样明显的填充值,说明后续必须先处理NODATA,否则坡度、等高线都会在无效值处“翻车”。

如果包里的DEM是.asc文本栅格,我一般建议先用gdal_translate把它统一转成GeoTIFF:

gdal_translate -a_srs EPSG:4326 -ot Int16 -of GTiff longnan_dem.asc longnan_dem.tif

-a_srs EPSG:4326是强制指定WGS84地理坐标系,因为ASC文件本身通常不带投影信息;-ot Int16表示输出为16位整型高程,节省一半磁盘空间;-of GTiff指定输出为GeoTIFF。注意,如果ASC本身是CGCS2000坐标系,这里就不能强行写成4326,需要先确认原始来源。

2.3 范围shp不只是一张边界底图,它是裁剪和统计的几何依据

zip包里的“区域范围shp”,很多人只拿来当背景画个边界,这是浪费。shp文件实际是至少四个兄弟文件组成的一套矢量数据,.shp存储几何、.shx存储索引、.dbf存储属性、.prj存储坐标系。缺其中一个,ArcGIS就会报“无法打开”。

先用ogrinfo看一下shp的几何类型和坐标系:

ogrinfo -so -al 陇南市区域范围.shp

-so表示只输出概要信息,-al表示列出所有图层。输出里会显示图斑数量、属性字段名、几何类型(Polygon还是MultiPolygon)、以及坐标系字符串。重点看投影:如果shp是CGCS2000地理坐标,而DEM是WGS84地理坐标,两者差值在陇南约几米到十几米,肉眼看不出来,但用于裁剪边界时会明显错开。

处理开始时,建议先用unzip -l确认shp四个文件都在,并把.prj文件单独备份一份。后面你会发现,多数坐标系混乱问题,都出在有人嫌.prj“多余”把它删了。边界文件在后续gdalwarp -cutline裁剪和面积统计时才是真正的几何依据,而底图只是视觉参考,两者的定位不同。

3. GDEMV3 30m分辨率数字高程数据的椭球基准与高程基准:先把基准理清再处理

3.1 gdalinfo的关键输出:像素尺寸、坐标系和数据类型决定后续参数

很多初学者会把DEM直接拖进ArcGIS就开始提取坡度,直到结果不对才回头查数据。我希望你第一步先看坐标系单位。一个30m分辨率的DEM,如果文件里Coordinate System显示为GEOGCRS["WGS 84"],Pixel Size单位就是度,大约0.00027777778度;如果是投影坐标系,Pixel Size单位就是米。这个区别直接决定坡度、坡向、距离计算需不需要先转换。

快速提炼关键信息,用下面这条命令:

gdalinfo longnan_dem.tif | grep -E "Size is|Pixel Size|Coordinate System|NODATA|Type="

grep -E把关键行抽取出来。Size is给出栅格行列数,比如“Size is 3600, 3600”;Pixel Size给出像素尺寸,0.00027度这个量级对应30m分辨率;Type=通常为Int16或Float32。看到Type=Float32时要注意,浮点DEM在ArcGIS里做部分分析会有速度和磁盘占用问题,建议转成Int16后再跑大范围坡度计算。

在这一步里,我建议顺手记录三个值:行列数、像素大小、NODATA值,写在一个临时记事本里。后面裁剪、重投影、填洼都会反复用到。

3.2 WGS84椭球与EGM96高程基准:和1985国家高程基准差多少

GDEMV3这类30m分辨率数字高程数据,椭球基准采用WGS84,高程值参考的是EGM96大地水准面。国内测绘成果一般使用1985国家高程基准,两者之间不是固定差值,而是随经纬度变化的曲面。在陇南这种地形起伏大的秦巴山区,差值往往在1米到3米量级,具体数值需要查EGM96与1985国家高程基准的格网差值模型。

这个差值对你的项目影响有多大,取决于用途。如果只是做坡度、坡向、山体阴影、汇水累积量,这些分析用的是高程相对变化,基准偏移会整体抬升或降低地形,但不改变坡度角和汇水路径,可以暂时不管。但如果你要把DEM高程和实测水准点、GNSS测点高程直接做差值,或在公路项目里算填挖方量,就必须做高程基准统一。

常见做法是使用EGM2008格网模型做一个高程转换,把DEM高程从EGM96基准转到1985国家高程基准。ArcGIS里的“栅格投影”工具和“高程基准转换”工具可以处理,但需要先导入格网文件;GDAL命令也有-geolocation配合格网处理的做法。更稳妥的方式是:如果项目有控制点,用控制点差值做一次整体改正,简单有效。

3.3 投影转换:把WGS84度转成UTM 48N,这是坡度计算的前提

陇南市经度范围大致在东经104°到106°之间,正好落在UTM 48N分带(中央经线105°E)。因此实际处理时,我会把DEM从WGS84地理坐标重投影到WGS84 / UTM zone 48N,像素尺寸就变成30米左右的真实地面距离,后续坡度、坡向、缓冲区、面积统计直接以米为单位:

gdalwarp -t_srs EPSG:32648 -r bilinear -overwrite longnan_dem.tif longnan_dem_utm48n.tif

-t_srs EPSG:32648指定输出坐标系为UTM 48N;-r bilinear指定双线性重采样,对DEM来说能保持地形平滑,不会像最近邻那样出现锯齿;-overwrite允许覆盖已有输出文件,重复处理时不用先删旧文件。

这里要说明一点:双线性重采样适合高程这类连续表面,不适用于分类栅格。如果处理的是土地利用分类,应该用-r near最近邻。重投影之后,再用gdalinfo确认Pixel Size接近30, -30这样的米单位,才算转成功。

4. 把DEM“用起来”:范围shp裁剪、坡度提取和等高线生成的可复现流程

4.1 用区域shp边界裁剪DEM:cutline参数里的两个关键开关

拿到带边界的DEM,第一个实际需求通常是把陇南市范围切出来,去掉周边的无数据区域或者临省部分。用GDAL的gdalwarp裁剪,速度比ArcGIS的“按掩膜提取”快很多,而且可以在同一行命令里完成投影转换:

gdalwarp -cutline 陇南市区域范围.shp -crop_to_cutline \ -dstnodata -9999 -of GTiff longnan_dem_utm48n.tif longnan_clip.tif

-cutline指定裁剪边界shp;-crop_to_cutline是必须开的开关,它让输出栅格的范围精确贴合shp多边形范围,而不是只做矩形裁剪;如果不加这个参数,输出会是一个包含整个边界矩形范围的栅格,边界外全是NODATA,看起来像是一块被切掉边缘的完整矩形。-dstnodata -9999把裁剪后落在边界外的像素统一设为-9999,便于后续计算时排除。

在ArcGIS里对应的操作是“提取分析”下的“按掩膜提取”,工具界面里没有crop_to_cutline这个概念,它会默认按掩膜形状输出,但会保留掩膜外部的NODATA。所以实际效果两者一致,只是GDAL命令行更适合批量处理和流程记录。

4.2 坡度与坡向提取:Z factor为什么是你最容易踩的雷

坡度计算在很多GIS软件里看起来是“一键完成”,但输出结果差异巨大。最典型的翻车现场:用未投影的WGS84度坐标DEM直接算坡度,出来的坡度图有明显条带或噪声。原因是坡度算法输入的水平距离单位是度,而高程单位是米,两者量纲不一致,必须要用Z factor修正。

最稳妥的方案是我前面提到的:先把DEM重投影到UTM 48N,保证水平单位也是米,然后设置Z factor为1。在QGIS的“栅格地形分析→坡度”工具和ArcGIS的“Spatial Analyst → 表面分析 → 坡度”中,Z factor默认是1,保持默认即可。

如果你出于某种原因必须在地理坐标系下计算坡度,Z factor应近似设置为111320 * cos(latitude),陇南中部的纬度大约在北纬33.5°,算出来约111320 * 0.834 ≈ 92882。不同软件对这个数值的定义略有差异,在ArcGIS中Z factor默认单位是“度对应的地面距离”,我自己实际对比过,挂这个值的结果和投影后计算仍有少量出入。因此建议所有正式成果都走“先投影、再坡度”的路线,不要和Z factor较劲。

4.3 等高线生成:gdal_contour的等高距与矢量输出选择

等高线是DEM数据的常见派生成果,陇南这种山地地形高差大,如果等高距设成1米,整个市域会生成数百万条线,文件动辄几个GB,ArcGIS都可能卡死。我一般先做一条50米等高距的试算,再根据用途决定要不要加密:

# 生成50米等高距,输出为GeoPackage gdal_contour -a ELEV -i 50 -f GPKG longnan_clip.tif longnan_contour_50m.gpkg # 重点区域用10米等高距,输出为Shapefile gdal_contour -a ELEV -i 10 -f ESRI Shapefile longnan_clip.tif longnan_contour_10m.shp

-a ELEV指定每条等高线的高程值字段名为ELEV,后续在软件里可以直接按该字段分级显示;-i 50和-i 10是等高距,单位是米,因为输入栅格已经投影成米;-f GPKG输出为GeoPackage格式,比Shapefile更紧凑,字段名长度限制也宽松。

等高线在陡峭的陇南山地会产生密集簇拥,视觉上几乎糊成一片。这时不要急着调透明度,先在QGIS里用“分级符号化”按高程分带显示,通常能明显改善。如果仍然过密,可以考虑对DEM先做3×3或5×5窗口的平滑,再生成等高线。需要注意的是,平滑会牺牲细节,平滑核越大,小沟谷越容易消失,最好只对出图用的拷贝做平滑,保留原始DEM用于定量分析。

5. 陇南DEM数据处理避坑:现象、原因、解决的三段式记录

5.1 解压时提示需要密码?多半是zip伪加密,不是真的设了密码

现象:在Windows下双击zip提示输入密码,输入了几次常见密码都不对;来源页面没有说明有密码,用7-Zip打开却能看到文件列表。

原因:很多网盘分发或压缩工具二次打包时,给zip写入了一个伪加密标志。这个标志让Windows解压工具误判为受密码保护,实际上文件数据并没有被真正加密,只是头文件加密标志位被置1。

解决:优先用7-Zip打开,一般会直接看到文件而不要求输入密码,解压即可;如果7-Zip也提示加密,可以尝试用命令行强制解压空密码包,比如7z x -y -p"" "文件名.zip"。还有一种办法是使用WinRAR打开后点击“修复压缩文件”,有时候能把损坏的加密标志恢复。伪加密不会损坏数据本身,不要因为一个弹窗就删除数据包重新下载。

5.2 解压后shp在ArcGIS里打不开:缺文件、乱码导致“无法打开”

现象:解压完成后,目录里只有一个孤零零的.shp文件,拖进ArcGIS提示“无法打开”,或者在Catalog里看到的是一个空图层。

原因:一是Windows自带解压工具对中文文件名的兼容性差,文件名变成一串乱码;二是shp是四兄弟格式,.shx索引或.dbf属性表缺失,ArcGIS无法识别。

解决:解压这类中文名GIS数据包,不要用Windows右键“全部解压缩”,改用7-Zip或Bandizip并设置为UTF-8编码解压。解压后立即检查陇南市区域范围.shp、.shx、.dbf、.prj四个文件是否齐全。如果只有shp一个文件,需要回到zip包重新解压。文件齐全但显示未知坐标系,说明.prj丢失,这时在ArcGIS的“属性→源”里手动指定坐标系即可,但要注意指定为WGS84还是CGCS2000,需要回到数据来源页确认。

5.3 DEM边缘出现-9999黑洞:坡度和等高线在边界断裂

现象:DEM在陇南边界处有一圈数值特别低的“洞”,提取坡度后边界一圈变为黑色,做等高线时边界出现不闭合的线。

原因:原始DEM在裁剪或拼接阶段,边缘像素没有有效高程值,用-9999或-32767填充。坡度算法把填充值当作真实高程参与差分计算,导致边界处出现极端坡度值。

解决:在计算坡度之前,先把NODATA值转换为真正的无值。QGIS栅格计算器表达式:

if("longnan_clip@1" == -9999, -32768, "longnan_clip@1")

然后把输出栅格的NODATA值设置为-32768。ArcGIS里更容易,使用“环境设置→栅格分析→NODATA”配合按掩膜提取。更彻底的做法是在gdalwarp裁剪时就指定-dstnodata -9999,并在后续所有工具里都显式声明忽略该值。很多坑的核心在于:NODATA被当作0处理了,所以要先确认工具是否默认把NODATA当作无效值。

5.4 范围shp和DEM对不齐:裁剪结果边界歪了几十米

现象:用shp裁剪DEM后,边界明显“锯齿状”,或者裁剪结果面积比shp范围小了一圈;把shp和DEM叠在一起,边缘错开几十米。

原因:shp是CGCS2000坐标系,DEM是WGS84坐标系,两者在陇南区域平面差异累计可达近十米级,在边界裁剪时被放大;另一种可能是shp的prj文件丢失后,ArcGIS默认按WGS84读取,但实际数据是CGCS2000。

解决:在裁剪之前,先用ogrinfo查看shp投影,用gdalinfo查看DEM投影,两者不一致就先用ogr2ogr转换shp:

ogr2ogr -t_srs EPSG:4326 陇南市区域范围_wgs84.shp 陇南市区域范围.shp

-t_srs EPSG:4326把shp转换到WGS84地理坐标。如果DEM是UTM 48N投影,还要再把shp转到EPSG:32648,保持和DEM完全一致。注意:转换shp后要保留prj文件,否则下次打开还会出现同样的错位。还有一个细节是,如果shp是MultiPolygon并且包含岛上飞地,裁剪时建议先用“修复几何”工具处理一次,避免自相交导致裁剪失败。

5.5 坡度图一片花哨噪声:Z factor与高程单位不匹配

现象:DEM在ArcGIS里坡度分析运行成功,但结果图不是平滑的坡度过渡,而是像高频噪声一样布满细小条纹;部分像素坡度值超过90°甚至200°。

原因:输入DEM是WGS84地理坐标,水平单位是度,高程单位是米,坡度算法需要在度和米之间换算一个Z factor;默认Z factor=1等于认为水平和垂直单位一致,把1度当作1米来处理,结果严重错误。

解决:最干脆的方案是把DEM先投影到UTM 48N,再做坡度分析,Z factor保持1。如果无法投影,只能用上述按纬度修正的Z factor,但精度会打折扣。我的习惯是在做任何坡度坡向之前先运行一次gdalinfo -stats,看一眼Pixel Size的单位。只要Pixel Size末尾跟的是“度”而不是“米”,就先去投影,不做这个确认就不要提交坡度成果。

6. 最后一百米:用实测高程点验证DEM精度,并养成三个交付习惯

6.1 用GNSS实测点做RMSE检验

DEM不是拿来就能直接相信它绝对高程的,尤其要做灾害评估或土方平衡时,最好用实测高程点做一次垂直精度验证。RMSE是地表一致性评价里常用的指标,计算方式是先逐个点提取DEM高程,再和实测值求差平方根均值。

在QGIS里可以用“点采样工具”把DEM值提取到实测点属性表,再在表格里计算RMSE。命令行方式适合批量验证,下面是用GDAL读取单个点高程的最小示例:

from osgeo import gdal dem = gdal.Open('longnan_clip.tif') band = dem.GetRasterBand(1) gt = dem.GetGeoTransform() # 实测GNSS点在UTM 48N下的坐标,单位米 gps_x, gps_y, gps_z = 486612.5, 3775400.3, 1520.4 # 由仿射变换参数计算栅格行列号 col = int((gps_x - gt[0]) / gt[1]) row = int((gps_y - gt[3]) / gt[5]) dem_z = band.ReadAsArray(col, row, 1, 1)[0, 0] print(f"DEM高程: {dem_z:.2f} m, GNSS实测: {gps_z:.2f} m")

gt[0]是左上角X坐标,gt[1]是东西方向像素宽度,gt[3]是左上角Y坐标,gt[5]是南北方向像素宽度,在UTM投影下这些都是米。用坐标差值除以像素尺寸得到行列号,再ReadAsArray读取单像素值。多点验证时把它套进循环,统计所有点位的差值并求RMSE。如果RMSE大于3米,对于30m分辨率DEM来说属于偏高,需要检查数据来源是否正确覆盖或发生了高程基准不统一。

6.2 批量生成坡度、坡向与山体阴影:一个循环解决

陇南山地项目通常需要同时输出坡度、坡向、山体阴影多套数据用于三维展示和灾害评价。用GDAL循环处理:

for f in *clip.tif; do gdaldem slope "$f" "${f%.tif}_slope.tif" gdaldem aspect "$f" "${f%.tif}_aspect.tif" gdaldem hillshade -az 315 -alt 45 "$f" "${f%.tif}_hill.tif" done

gdaldem slope默认输出单位是度,范围0-90,正好适合后续分级;-az 315表示光源方位角315度,模拟西北方向日照,是山体阴影出图的常用设置;-alt 45表示光源高度角45度。批量生成时注意,输出文件命名带_slope、_aspect、_hill后缀,避免覆盖原始DEM。

6.3 交付三个习惯:写说明txt、保留prj、记录处理历史

最后这一步看似简单,但实际项目里翻车率极高。我见过不少同事一个月后打开自己的成果,完全不记得这个DEM是WGS84还是CGCS2000,哪些区域填过洼,哪些区域重采样过。三个习惯能让你免去做“考古”的麻烦。

第一,在数据目录里放一个数据说明.txt,写清楚数据来源、分辨率、卫星/传感器、坐标系、高程基准、处理日期、处理人和处理流程。第二,shp的prj文件绝不能删除,无论是复制还是转换坐标系,保留原始prj和转换后prj两个文件。第三,每次处理完顺手用gdal_edit.py把处理信息写入栅格元数据:

gdal_edit.py -mo "PROCESS_DATE=2025-01-08" -mo "SOURCE=GDEMV3" -mo "GEOID=EGM96" longnan_clip.tif

-mo是写入元数据项的开关,可以连续写多组键值。这些元数据随GeoTIFF一起携带,再传给同事时不会丢失。我早年处理DEM时省了这些动作,后来做陇南项目归档时对着一堆没有说明的tif文件耗费了大量时间反查坐标系。从那以后,每套数据到手上的第一步和最后一步都是这些记录动作。从zip解压校验到高程验证,这些细节走完一遍,你这套陇南30m DEM才算真正用起来了。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询