简介:一套覆盖赣州市全域的30米分辨率DEM数字高程数据包,附带市级行政范围shp边界文件,面向GIS从业者、测绘与城乡规划研究人员,可用于地形渲染、坡度坡向提取、水文分析与工程选址等场景。包内共12个文件,总大小约139.7MB,核心为GeoTIFF格式的高程栅格,同时包含shp、dbf、prj等Shapefile组件,以及ovr、tfw、xml等辅助元数据;其中shp/shx/dbf记录边界属性,prj定义坐标投影,ovr与tfw辅助影像显示与空间定位,便于在ArcGIS、QGIS中直接加载、裁剪和叠加分析。已有1108人学习下载。除高程栅格外,赣州市范围矢量文件可快速限定研究区域,减少跨边界干扰;结合坡度、坡向计算和可视域分析,能够支撑水利设施规划、交通选线与土地利用评价等工作。完整的分辨率与投影参数使数据可直接用于中小尺度制图、三维地形模拟和空间建模,是赣州地区地理信息项目可靠的基础底图。
1. 拿到“江西省赣州市DEM数字高程数据30m(含本市级范围shp文件).zip”之后,先别急着解压
很多人在网盘里翻到一个带“数字高程模型”字样的压缩包,第一反应是拖进 ArcGIS 看一眼是不是张灰度图。真要和这张图长期打交道,第一步其实是确认坐标系、高程基准和无效值设置,这三个信息决定后面所有坡度、等高线、流域分析可信不可信。这个包里的核心内容是赣州市全境 30 米分辨率 DEM,附带一份市级行政边界 shp,前者描述地表裸地高程,后者用来把栅格裁到行政范围里。适合做流域划分、淹没分析、宏观选址、线路比选、国土空间规划里的大尺度地形评价,不适合做精细到单栋楼或单块宅基地的设计。拿到它,目标是把它变成一套能反复出图、能和其他专题数据正确叠加的底图。
2. 30m 分辨率DEM 能做什么:像元含义、适用尺度与数据源背景
2.1 DEM 不是照片:高程栅格的数据结构与像元含义
DEM 全称 Digital Elevation Model,在文件层面就是一个单波段 GeoTIFF,每个像元记录一个高程值,单位通常是米。30m 分辨率意味着一个像元对应地面 30 米 × 30 米的区域,一个像元内所有地形起伏被压缩成一个均值或采样值。这个包里的 tif 文件打开后显示为灰度影像,但灰度不是亮度,是海拔高度,暗处低、亮处高。
栅格文件本身不存“形状”,它靠地理变换参数把行列号映射到经纬度或平面坐标。理解这一点就能解释很多怪现象:为什么 DEM 裁完会出现斜边锯齿,为什么把两张不同来源的 DEM 叠加时边缘错开一条缝——因为行列网格和地理坐标的对应关系在数据生产时已经固定,后期旋转、重投影都会改变像元排列,导致精度损失。
与 DSM 的区别也值得说清楚。DSM(Digital Surface Model)记录地表覆盖物顶部的高程,包括树冠、屋顶,常见来源是激光雷达首回波或光学立体像对。DEM 则是去掉了地表覆盖的“裸地高程”,强调地形本身。标题里没有提 DSM,说明这份数据的目标用途是地形分析,不是城市三维建模。买数据或下载数据时如果混淆这两个概念,做坡度分析会莫名其妙偏大,因为树冠和屋顶会制造虚假陡坡。
2.2 30m 够用吗:三条选型判断
判断一个 DEM 分辨率够不够,不是看“清不清楚”,而是看分析对象的空间尺度。分析对象的最小特征尺寸最好大于像元尺寸的 5 到 10 倍,低于这个比例,特征会被栅格平均化抹平。举个例子,一条 5 米宽的冲沟在 30m DEM 上几乎不可见,在 1m DEM 上清清楚楚;一个 200 米宽的河谷阶地在 30m DEM 上能看出轮廓,在 5m DEM 上能看出细节。
对应到赣州这种以丘陵、盆地、河谷为主的地形,30m 分辨率适合做三类事:一是流域尺度的水文分析,提取河网主干的走向、计算集水面积、划分子流域,这些结构特征尺度都在几百米以上;二是区域尺度坡度分级,比如把全市坡度分成 0-5°、5-15°、15-25°、25°以上四档,用于建设用地适宜性评价;三是宏观选址和廊道比选,比如光伏场址初筛、生态廊道规划、输电线路路径的初始方案比选。
不适合做的也很明确:单点精确高程查询不可靠,因为 30m 像元内可能横跨一个陡坎;精密土方量计算不可靠,误差会高达 15% 以上;地质灾害隐患点判定只能当辅助参考,不能作为唯一依据。如果项目审批或施工图需要厘米级精度,需要机载 LiDAR 或无人机倾斜摄影生成的数字表面模型,不是 30m STRM 数据的应用场景。
分辨率档位选择可以参考下面这个思路:
| 分辨率 | 获取方式 | 典型应用 | 成本量级 |
|---|---|---|---|
| 30m | 光学立体像对/雷达干涉,公开数据 | 流域分析、区域规划、生态评估 | 免费到极低 |
| 12.5m | ALOS PALSAR 雷达数据干涉处理 | 县级精度地形分析 | 低,需处理 |
| 5m | 高分辨率商业立体像对 | 乡镇级精细坡度分级 | 中 |
| 1m/0.5m | 机载 LiDAR、无人机倾斜摄影 | 工程勘察、土方量、洪涝精细模拟 | 高 |
2.3 数据源背景:国内常用的 DEM 获取路线
国内从业者下载 DEM 数据,最常用的公开渠道是地理空间数据云,上面覆盖了基于 SRTM 和 ASTER GDEM 产品处理后的国内范围数据。SRTM 是美国航天飞机 2000 年执行地形测绘任务获取的全球数据,原始分辨率 1 弧秒(约 30 米),历经多轮校正后国内很多公开产品是 90 米重采样版和 30 米版并行。ASTER GDEM 来自日本与美国的合作项目,分辨率同样是 30 米左右,但有些地区会出现条带噪声和空洞,需要对照检查。再往后还有 ALOS AW3D30,由日本 JAXA 发布,也是 30 米级,部分区域的平面精度比 SRTM 稍好。
拿到这个赣州数据包之后,建议用元数据文件或数据描述文档确认它到底源自哪个生产项目。不同来源的 DEM 在高程基准上可能不一致,有的用 EGM96 大地水准面,有的用 WGS84 椭球高,两者在局部区域能差十几米到几十米。如果只是做坡度、坡向、山体阴影这类相对地形分析,基准差异影响不大;如果要把 DEM 高程和实测水位、水准点绝对高程做对比,必须先确认高程基准,不查清楚就叠加,后续所有算出来的“高于防洪水位多少米”都会失真。
3. 从压缩包到可用底图:完整性检查、坐标系确认与 shp 边界裁剪
3.1 解压后的第一件事:核对文件清单与伴随文件
解压这个 zip 后,预期至少有两类文件:一个是 tif 格式的 DEM 栅格,一个是包含赣州市行政边界的 shp 矢量。shp 不是一个单独文件,而是一组文件的集合,至少包含 .shp(几何)、.shx(索引)、.dbf(属性表),好的文件还会带 .prj(坐标系描述)。如果这个包里 shp 缺少 .prj 文件,后面叠加到 DEM 上时软件无法判断矢量的坐标系,很多新手在这时直接把数据拖进 ArcMap,结果矢量飞到海里或跑出十万八千里。
完整检查建议按顺序做:先打开文件夹看扩展名清单;再用 QGIS 或 ArcGIS 的目录面板预览 shp 的坐标范围;最后用 gdalinfo 看 tif 的坐标系和边界。这三个步骤两分钟内完成,能提前暴露一大半问题。压缩包解压后不要直接在压缩软件里双击加载数据,有些工具能临时读取,但后续输出结果时可能出现路径乱码或临时目录找不到文件的问题,规范做法是先解压到纯英文路径下,例如D:\gisdata\ganzhou_dem,避免中文目录名在部分 GDAL 老版本环境里报错。
3.2 用 GDAL 一行命令确认 DEM 元数据
GDAL 是处理栅格数据的事实标准工具库,装 QGIS 时会自动带上它,也可以用 OSGeo4W shell 单独调用。打开命令行,切到数据目录,执行:
gdalinfo -stats 赣州DEM30m.tif-stats参数让工具顺手计算一遍全图统计值,输出里重点看四类信息:第一是Coordinate System,确认是 WGS84 地理坐标系还是 CGCS2000 / UTM 之类的投影坐标系;第二是Pixel Size,确认是 0.00027... 这种以度为单位的像元尺寸,还是 30 米这种以米为单位的;第三是NoData Value,看看无效值是不是被标成了 -9999 或 0;第四是Statistics里的最小值、最大值和标准差,正常陆地 DEM 的数值范围应该在合理区间,出现奇怪的大负值说明数据有问题。
Driver: GTiff/GeoTIFF Size is 18721, 16744 Coordinate System is: GEOGCS["WGS 84", DATUM["WGS_1984", SPHEROID["WGS 84"]...] Pixel Size = 0.000269494585543656,-0.000269494585543656 Metadata: STATISTICS_MINIMUM=-23 STATISTICS_MAXIMUM=1208 STATISTICS_STDDEV=175.42上面这段是典型输出,可以看到最小值为 -23 米,说明部分低洼地块高程显示为负值。继续往下,Corner Coordinates会列出四角经纬度或平面坐标,用这个范围去和赣州市的经纬度跨度对照,赣州约在北纬 24.5° 到 29°,东经 113.5° 到 116.5° 之间,如果四角坐标和这个区间差得很远,说明数据源不对或坐标系描述错误。
3.3 用 shp 边界裁剪 DEM:ArcGIS 与 GDAL 两条路线
元数据检查无误后,下一步是把本来覆盖更大范围的 DEM 裁到赣州市行政边界内。ArcGIS 里的操作路径是:“ArcToolbox → 数据管理工具 → 栅格 → 栅格处理 → 裁剪”,输入栅格选 DEM,输出范围选择“要素类”并指定赣州市界的 shp,勾选“使用输入要素裁剪几何(可选)”选项,这样裁出来的栅格形状会贴合边界,而不是矩形。不勾选这个选项等于只做了个矩形裁剪,边界外围的大量空白区域还在,后续做坡度分级图时边界外会被算作平地,影响统计。
命令行路线更可控,也方便批量处理。假设原始 DEM 文件名是ganzhou_tmp.tif,边界 shp 是ganzhou_banjie.shp,使用 gdalwarp 一步完成投影和裁剪:
gdalwarp -cutline ganzhou_banjie.shp -crop_to_cutline \ -t_srs EPSG:4525 -tr 30 30 -r bilinear \ -dstnodata -9999 -of GTiff \ ganzhou_tmp.tif ganzhou_dem_30m_cgcs2000.tif参数含义:-cutline指定 shp 作为裁剪边界;-crop_to_cutline让输出栅格范围严格贴合 shp 边界;-t_srs把数据重投影到 EPSG:4525,这是 CGCS2000 / 3 度 Gauss-Kruger zone 38 的坐标系,适用于赣州主要区域,单位是米;-tr 30 30强制输出像元为 30 米 × 30 米;-dstnodata -9999把裁剪后边界外区域设置为 -9999。裁剪完成后再次用 gdalinfo 验证,此时像元尺寸应该显示为 30 米左右,坐标系单位应该是米,这样后续坡度计算的 Z 因子可以直接按 1 处理,不用再做度到米的换算。
Python 生态里,rasterio 加 geopandas 的组合也能实现同样的逻辑,适合后面要自动化批处理的人:
import rasterio from rasterio.mask import mask import geopandas as gpd src_tif = "ganzhou_tmp.tif" shp_path = "ganzhou_banjie.shp" out_tif = "ganzhou_dem_crop.tif" with rasterio.open(src_tif) as src: boundary = gpd.read_file(shp_path) boundary = boundary.to_crs(src.crs) out_image, out_transform = mask(src, boundary.geometry, crop=True) out_meta = src.meta.copy() out_meta.update({ "height": out_image.shape[1], "width": out_image.shape[2], "transform": out_transform, "nodata": -9999 }) with rasterio.open(out_tif, "w", **out_meta) as dst: dst.write(out_image)这段代码先读取 shp,再用to_crs把矢量坐标系对齐到栅格的坐标系上,避免因坐标系不匹配导致裁剪位置偏移,然后用mask函数执行裁剪,crop=True代表输出边界收紧到矢量的外接范围。out_meta更新了宽高、变换矩阵和 nodata 标记,最后写出新 tif。这套流程适合每天换不同 shp 批量出数据的场景,把 shp 路径和输出路径改成参数就是一条流水线。
4. 把 DEM 变成地形分析成果:坡度、等高线与水文分析实操
4.1 坡度坡向与山体阴影:三个必调参数
坡度是最常用、翻车也最多的地形因子。ArcGIS 中打开“Spatial Analyst 工具 → 表面分析 → 坡度”,输入 DEM,输出测量单位可以选“度”或“百分比”。选“度”时,结果范围是 0 到 90,适合做分级;选“百分比”时适合做道路纵坡、边坡稳定性快速判断,10% 坡度相当于 5.7°。多数规划项目用“度”更直观。
关键参数是 Z 因子。如果 DEM 经过第 3.3 节的投影转换,坐标系已经是米,Z 因子保持默认的 1 即可。如果偷懒没有投影,数据仍然是经纬度坐标,水平和垂直单位不统一,坡度会整体失真,计算出来的山区坡度普遍偏小,平缓地区变化不够灵敏。经纬度数据需要把 Z 因子设置为1 / 111195 ≈ 0.0000111,这个 111195 是一纬度对应的平均米数。更稳妥的方法还是先投影再做坡度分析,投影转换只重采样一次,误差是可控的。
山体阴影的参数相对固定,方位角常用 315°(西北方向光),太阳高度角常用 45°,这两个值是地图可视化领域多年试出来的经验组合,能突出丘陵地形的纹理又不太过曝光。输出结果是一个灰度栅格,值域 0 到 255,叠加到坡度分级图下面做底图晕渲效果很好。QGIS 里同样功能在“栅格 → 分析 → 坡度”和“山体阴影”菜单里,参数逻辑一致。
4.2 从 DEM 自动生成等高线:ArcGIS 与 GDAL 两条路线
等高线不是 DEM 数据包里必须附带的东西,但它是最容易被业务方看懂的成果。ArcGIS 中路径是“3D Analyst 工具 → 栅格表面 → 等高线”,输入 DEM,等间距设 20 米或 50 米。赣州是丘陵地貌,30m DEM 生成 50 米间距等高线比较干净,适合全市范围小比例尺出图;20 米间距能看到更多沟谷细节,但局部会出现细碎锯齿。5 米间距在 30m 分辨率下是完全不可行的,生成的是密密麻麻的折线毛刺,这是分辨率不够的体现。
命令行路线用 gdal_contour:
gdal_contour -a elev -i 20 ganzhou_dem_crop.tif ganzhou_contour_20m.shp-a elev指定生成的属性字段名为 elev,记录每条等高线的高程值;-i 20表示按 20 米间距生成。输出 shp 可以直接叠加到地形图上标注,也可以用-nln参数指定输出图层名称。如果生成的 shp 要进 AutoCAD 或 CASS,应该先确认输出坐标系是投影坐标(米制),否则在 CAD 里打开会有比例尺错乱的问题。生成后注意检查等高线有没有在河谷处突然交叉或断开,常见原因是 DEM 存在填洼前的小凹陷或无效值空洞,这种位置需要回到原始 DEM 检查。
这里有一个反向误用需要提醒:热词里经常有“等高线生成dem”,实际工作中也有同事想从 CAD 里的等高线反推 DEM。技术上可以做,用 TIN 插值转栅格,但插值出来的 DEM 精度完全取决于等高线密度,平缓区域等高线稀疏,插值出的高程就是“一片荒原”,细节全部丢失。这个方向更适合用于老图纸的快速数字化表达,不可作为精确分析的数据源。
4.3 填洼与流域提取:30m DEM 做水文分析的下限
水文分析是 30m 国家级 DEM 用得最频繁的场景之一。ArcGIS 水文分析工具箱里第一步通常是“填洼”,目的是去掉 DEM 中的虚假凹陷,让水流能顺畅汇到边界。填洼的默认阈值在某些版本里是不限制的,所有洼地全部填平,这在平坦地区会制造出一大片毫无起伏的“水池”,后续流向分析变成直线。人工干预的办法是先看 DEM 直方图,确认是否存在大量噪声点引起的凹坑,或者先做一次低通滤波,但滤波又会破坏真实地形,两难之下多数项目直接接受默认填洼结果,只把注意力放在流域面积阈值上。
提取水系的操作链是:填洼 → 流向 → 流量累积 → 按阈值提取河网。流量累积栅格每个像元的值表示有多少个像元的水流汇入该位置,阈值一般从 500 起步,赣州丘陵区可以试着取 1000 到 5000,值越大河网越稀疏,生成的主干河流越接近实际水系。河网栅格转矢量的工具在“Spatial Analyst 工具 → 水文 → 栅格河网矢量化”里,完成后把提取的河流和真实水系图叠加对比,误差能接受就可以进入下一步子流域划分。
30m 数据做水文分析的下限在哪里,我的判断是:流域面积小于 5 平方公里的精细子流域划分会出现明显偏差,因为这么小的流域源头区可能在 DEM 上只有十几个像元,地形表达过于粗糙。做全市级或县级流域结构分析,30m 足够用;做具体某一个山塘的汇水区计算,需要 5m 或更精细的 DEM 来支撑。
5. 避坑指南:DEM 处理里最常见的五个翻车点
5.1 坐标系不一致:DEM 和 shp 叠加后偏移几百米
现象:把 DEM 标记为 WGS84 经纬度,把赣州市界 shp 也加载进来,两者边界完全对不上,有的地方偏移明显,有的边角飞出老远。
原因:DEM 的坐标系描述实际是“WGS 84 地理坐标系”,而 shp 可能是 CGCS2000 投影坐标系、西安 80 投影坐标系,或者缺少 .prj 文件导致软件默认按 WGS84 读取,实际点位是投影后的平面坐标值。两个坐标系不统一,软叠或者硬叠都会产生几百米级别的位移。
解决:加载数据后先按右键图层 → 属性 → 源确认坐标系。如果是 shp 缺少 .prj,最简单的办法是用已知坐标系的其他图件做参考,确定它原本是 CGCS2000 还是西安 80,然后在 ArcGIS 里用“定义投影”工具强制写入坐标系定义,注意不是“投影”工具,定义投影只改描述不改变量值。之后用“投影”工具把 DEM 和 shp 统一到同一个坐标系。
5.2 无效值被当成真实高程:坡度图上出现黑色空洞和悬崖
现象:坡度分析结果里,某些区域出现完全黑坨或者出现一条笔直的“悬崖线”,沿着这条线一侧高程正常,另一侧是几百米的突变。等高线生成时,经过这些区域的等高线突然断开或扭成麻花。
原因:原始 DEM 的 NODATA 值没有被正确识别,无效值通常设置为 -9999、0 或极大的负数。在许多默认处理流程里,-9999 会被当成真实高程参与计算,导致坡度工具计算出异常的大梯度值。还有一种情况是 SRTM 数据的空洞已经用其他数据填充,但填充边界存在跳变。
解决:在第 3.2 节的 gdalinfo 输出里先确认NoData Value是什么。用 gdalwarp 重采样时通过-dstnodata -9999显式指定,用 ArcGIS 时打开“环境设置 → 栅格分析 → 掩膜”,把 NODATA 设置为“作为背景值”。生成坡度图之前先用“栅格计算器”把无效值区域重分类成 NoData,例如SetNull(赣州DEM < -1000, 赣州DEM),再跑坡度就干净了。
5.3 过度平滑:降噪滤波把真实沟谷抹平了
现象:为了出图好看给 DEM 做了几轮低通滤波或中值滤波,坡度图确实光滑了,但和现场对照后发现不少 5 到 10 米深的冲沟位置完全消失,原本明显的沟谷分水线变成了一条模糊的斜坡曲线。
原因:30m DEM 本身已经是对地表形态的概化,再做 3×3 或 5×5 邻域滤波,相当于做第二次平均,真实的地形微起伏被二次抹平。
解决:不是所有 DEM 都需要滤波。生产厂家已经做过分级平滑,用户拿到的数据大多可以直接使用。如果确实需要处理,先备份原始数据,再做滤波,滤波后用“栅格计算器”计算滤波前后差值,把差值超过 2 米的像元标记出来,逐处检查是噪声还是真实地形。经验法则是宁可保留局部椒盐噪声,也不要做大核滤波。
5.4 高程基准错误:低洼地出现负值或整体偏高十几米
现象:gdalinfo 统计调出来已经看到了最小值 -23,画渲染图时沿江区域出现负值“盆地”,和实际地形测量的高程值对不上,有的地方系统性地比水准点低十几米。
原因:常见的公开 DEM 使用 EGM96 大地水准面作为高程基准,而 GNSS 接收机直接测量的是 WGS84 椭球高,两者之间存在一个起伏的差距,在中国部分区域差距能达到 20 到 40 米。把 GNSS 高程直接拿去和 DEM 高程对比,当然会出现整体抬升或下沉。
解决:绝对高程对比前统一基准。在区域内获取若干个已知水准点,用 DEM 提取点上的高程,和实测水准高做差值统计,计算平均值作为偏移量加在 DEM 上再使用。如果项目只做坡度、坡向、流域分析,这个问题可以忽略,因为属于系统性误差,不影响相对地形判断。使用 DEM 做洪水淹没分析时,必须把这个偏差校正到合理范围,否则淹没范围会偏移。
5.5 shp 文件损坏或缺部件:无法读取边界范围
现象:双击 shp 文件提示“无法读取”,或加载后只有一张空表,没有任何几何图形。
原因:shp 下载或解压过程中文件缺失,最常见的是 .dbf 属性表文件或者 .shx 索引文件丢了。网上还有一些渠道提供的 shp 文件被安全软件拦截,导致文件写入不完整,也可以用 shapechk 工具做修复检测。
解决:检查目录下是否同时存在 .shp、.shx、.dbf 三个基础文件。缺失 .shx 时部分工具能自动重建索引,QGIS 里一般能直接打开;缺 .dbf 则可能只剩几何没有属性。用 shapechk 工具扫描一下可以定位损坏位置,修复失败的场景,优先重新下载源文件,而不是去手动改二进制。shp 本身就是 20 世纪 90 年代的设计,没有数据库那么强的容错机制,文件拷贝要用正规压缩工具,别用即时通讯软件直接发送同名文件导致改名冲突。
6. 用剖面线验证 DEM 质量:一个不上网也能做的检查方法
在动手跑坡度、做水文分析之前,先花二十分钟验证 DEM 是否符合现实,这条成本最低的“后悔药”值得养成习惯。方法叫剖面线检查,打开 ArcScene 或 QGIS 的三维视图,在 DEM 上沿一条河谷和一条山脊分别拉一条线,工具会用线上的像元高程画出一条纵断面曲线。理想的山脊剖面线应该是平缓起伏的抛物线形,河谷剖面线应该是一条单调下降、中间不出现倒刺的下凹曲线。如果在平缓坡地看到台阶状折线,说明数据被压缩成 16bit 时量化误差过大;如果出现间隔规律的高频锯齿,说明原始数据混入了条带噪声。检查 DEM 高程分布是否合理,也可以用横断面与现有等高线地形图做视觉比对,河流处应该是最低点,分水岭处应该是最高点,如果河流位置成了高岗,代表坐标系或投影出了问题。
剖面线检验的另一个冷门作用是查无效值空洞。在曲线上表现为突然下坠到 -9999 再反弹为正常高程,看起来像尖刺。把真实地形和曲线对比,超过三处明显不可解释的突变,就要考虑重新采购或补洞数据。给新手一个量化指标:抽取 20 个随机点,记录 DEM 高程与手机 GPS 实测高程的差值,差值中位数在 10 米以内说明数据基本可靠,超出 20 米说明高程基准可能有问题,继续往下做淹没分析会放大误差。
我自己的习惯是每次新到一套 DEM,先做两件事:gdalinfo 看统计值,然后拉三条剖面线。这个习惯是从一次流域分区的返工中长出来的,那时没做剖面检查,直接跑完填洼和流向,等到子流域边界生成后发现有一整条支流的方向与现场水系图完全相反,排查了两天才发现是原始 DEM 中有一条无效值带状空洞没有处理。后来所有数据进来先过剖面,确实是效率最高的排雷方式。希望这个检查流程能帮你在赣州这套数据上少走一次弯路。
本文还有配套的精品资源,点击获取