
简介陕西省宝鸡市30米分辨率数字高程模型数据是一套面向地理信息系统学习者与分析人员的实用地形数据集适用于地形解析、专题制图、环境规划等场景。压缩包共含12个文件总体积约58.4MB核心文件为TIFF格式的数字高程模型栅格并配套坐标、元数据、金字塔等辅助文件同时附带宝鸡市范围边界矢量数据涵盖常用空间索引与投影文件其中tfw文件定义像素与地理坐标的关系sbn/sbx用于空间索引dbf存放属性prj记录投影信息便于按行政区划进行裁剪与统计。目前已有593人学习或下载适合入门级用户快速上手。数字高程数据可提取坡度、坡向、山谷山脊等地形特征配合边界文件可在ArcGIS或QGIS中完成按掩膜提取、三维可视化、坡度坡向计算等操作数据覆盖宝鸡全境并包含周边范围既满足课堂练习也可为区域规划、灾害预警等研究提供基础底图。1. 翻开宝鸡市30m DEM数据包之前先认清这三件事在宝鸡做地形分析绕不开一份30m的DEM数据。这个像素精度下渭河河谷与秦岭北麓的地貌骨架完整可见乡镇尺度的坡度、坡向分得清楚做地质灾害风险初判和选址分析也够用。包里那个宝鸡市级边界的shp文件并不是可有可无的附件——它决定了你能不能在ArcGIS、QGIS或者GDAL里把高程栅格裁成自己真正要用的形状。很多人拿到这类zip后第一反应是解压、拖进软件看两眼然后就卡在坐标系、裁剪范围、NoData处理这些细节上。这篇文章顺着数据包的使用流程来写从分辨率和来源的取舍到shp裁剪的具体命令再到数据质量检查和实际出图。2. 30m分辨率与数据来源的取舍DEM、DSM、DOM要分清2.1 三个看起来都是地形数据的文件实际不是一回事GIS资料包里经常同时出现DEM、DSM和DOM拿到手不先辨认后面所有分析都可能建立在错误的数据上。DEMDigital Elevation Model记录的是地表裸地的海拔不含树冠和建筑物DSMDigital Surface Model记录的是地物最高表面相当于树顶和房顶的高程。DOMDigital Orthophoto Map严格说是正射影像它提供的是光谱纹理而不是连续高程值。拿宝鸡来说秦岭北麓的植被覆盖率很高如果错把DSM当作DEM来算坡度山坡上会凭空多出大量的局部陡变因为林冠高度被当成了地形起伏。判断你手里的栅格到底是哪一类最直接的方式是看直方图DSM在高程分布上比DEM更碎同一坡面上会出现大量由于树冠起伏导致的连续跳变值而真正的DEM即使在林区相邻像元的高程变化也是连续的。2.2 30m数据的三个主要来源SRTM、ASTER GDEM与ALOS市面上流通的30m分辨率DEM绝大多数源自三套公开数据集。SRTM v3是美国航天飞机雷达地形测绘任务的产物基于C波段雷达干涉测量覆盖全球60°N以南区域特点是受云层影响小在陡峭地形下细节保留较为合理。ASTER GDEM由光学立体像对生成覆盖范围到83°N但影像获取时如果遇到云和浓雾会在局部留下明显的横向条纹宝鸡南部的秦岭山区在ASTER原始数据里就常能看到这种噪声带。ALOS AW3D30来自日本JAXA的PRISM传感器合成后网格同样约30米整体质量通常比前两者更平稳但高山区阴影部位也存在少量空洞。许多公开发行的30m含shp数据包实际上是下载原始分幅后再用行政边界矢量裁剪拼合得到的。拿到手时如果没有元数据文档可以通过观察河谷地带的平坦程度来判断大致来源SRTM在峡谷底部的回波更容易产生凹坑ASTER在平坦耕地区可能有条带起伏ALOS往往最干净。2.3 12.5m、30m、90m之间到底差多少分辨率的选择直接决定计算开销和成图比例尺。以宝鸡全市约1.8万平方公里为例30m网格约对应2000万个像元在普通PC上做一个Zonal Statistics统计只需要几十秒生成等高线也在一分钟内如果换12.5m数据像元数约8000万内存占用和计算时间翻四倍以上而90m数据像元数只有370万左右画大范围专题图很快但乡镇级分析基本没法用。分辨率单个像元对应地面全市像元量级适合场景12.5m156㎡8000万灾害详查、微地貌30m900㎡2000万区域水土流失、选址、可视域90m8100㎡370万大区域气象与气候粗建模30m这个档位在精度与计算量之间最均衡这也是很多成品数据包选择它的原因。配合shp做裁剪后单个文件体积通常在200到500MB之间无论是ArcGIS还是QGIS都能顺畅操作不至于像12.5m数据那样动不动卡顿。3. 用shp裁剪DEM的两种标准做法按掩膜提取与GDAL命令行3.1 解压后不要急着拖进地图先过三道检查拿到zip先解压到纯英文路径比如D:\baoji_dem。很多人在第一步就翻车Toolbox里凡是路径带中文ArcGIS就很容易报错。解压后看shp文件簇是否齐全一个可用的矢量图层至少要有四个文件.shp存储几何图形.shx存储空间索引.dbf存储属性表.prj存储投影定义。检查完再做坐标系判断宝鸡本地的shp比较规范的做法是使用CGCS2000 3度带高斯-克吕格投影中央经线108°E常见的也有西安80或WGS84地理坐标系。这里有个容易忽略的问题.prj如果缺失ArcGIS会默认该shp是未知坐标系加载后要素可能显示在海里或与DEM完全错位。此时先用Define Projection工具把坐标系定义好再执行裁剪而不是去怀疑几何文件坏了。提示shp加载后看起来没东西先按Full Extent缩放一下再检查图层的坐标系与底图是否一致。3.2 ArcGIS按掩膜提取的完整流程与边界处理ArcGIS里裁剪DEM最常用的是Spatial Analyst Tools → Extraction → Extract by Mask。输入栅格选DEM图层掩膜数据选宝鸡市shp输出路径指到一个磁盘空间充足的目录。这里的关键是环境变量的设置在Geoprocessing → Environments里把处理范围设为Same as layer 宝鸡shp把栅格分析中的像元大小设为与输入DEM一致还可以指定Snap Raster为DEM原始栅格。Snap Raster容易被忽略但它能保证输出栅格的像元与原始数据严格对齐避免和后续其他图层做计算时出现半个像元的错位。3.2.1 裁剪后出现黑色区域或0值区块裁剪结果如果边缘出现大面积黑色通常不是裁剪失败而是NoData值被符号化成了黑色或者NoData在输出中被写成了0。ArcGIS里可以在图层属性的Symbology选项卡中把0值和NoData设为透明色更稳妥的做法是在栅格计算器里执行Con(IsNull(baoji_dem), -9999, baoji_dem)逻辑是把所有NoData像元替换为-9999再用Extract by Attributes或图例设置把-9999排除。这样处理之后后续的坡度、填洼等工具不会把边界外的区域当成有效的高程0米来参与计算。3.3 两条GDAL命令完成重投影、裁剪与压缩不用图形界面的话GDAL是最可靠的裁剪方案。以下命令在Windows或Linux终端里都可以执行前提是安装了GDAL的Python环境或独立工具包。先重投影到目标投影再按shp裁剪gdalwarp -t_srs projtmerc lat_00 lon_0108 k1 x_0500000 y_00 ellpsGRS80 unitsm no_defs -tr 30 30 -r bilinear baoji_dem_30m.tif baoji_dem_projected.tif gdalwarp -cutline baoji.shp -crop_to_cutline -dstnodata -9999 -co COMPRESSDEFLATE baoji_dem_projected.tif baoji_dem_final.tif第一条命令的参数含义-t_srs指定CGCS2000 3度带高斯-克吕格投影中央经线108°E地理范围内宝鸡主体区域-tr 30 30强制输出像元尺寸为30米×30米-r bilinear使用双线性重采样比最邻近法在高程渐变区域能得到更平滑的结果。第二条命令中-cutline把shp作为裁剪边界-crop_to_cutline让输出范围紧贴shp边界而不是保留矩形外框-dstnodata -9999把边界外的像元统一标为-9999-co COMPRESSDEFLATE压缩输出文件能减少约50%的磁盘占用。顺带说明投影参数里那串PROJ字符串的作用它等价于国内常用的CGCS2000 3度带投影定义比直接写EPSG编号更不容易因为GDAL版本差异而报错。如果你手里的shp本身已经是投影坐标两条命令也可以合并成一条让GDAL同时做重投影和裁剪但分开写的好处是可以检查中间结果方便在投影后发现数据异常时定位问题环节。3.3.1 shp转GeoJSON或txt给边界换个格式有时外部系统只需要边界坐标不接shp。GDAL一行命令即可转换ogr2ogr -f GeoJSON baoji_boundary.geojson baoji.shp ogr2ogr -f CSV -lco GEOMETRYAS_XYZ baoji_boundary_points.txt baoji.shp第一条导出GeoJSON可直接丢进Cesium、Leaflet做Web预览第二条把shp每个要素的顶点坐标以X、Y、Z三列写进CSV注意这里导出的几何坐标来源于shp本身的坐标系。如果shp是投影坐标而下游需要经纬度先复制一份shp并投影到WGS84再转不然输出的X、Y值会大到看起来像坐标错误。4. 数据质量体检DEM异常值、填洼时机与shp文件修复4.1 裁剪完成后的第一轮体检裁剪不是终点拿到baoji_dem_final.tif后先用ArcGIS的Describe或直接看图层属性核对高程值域是否合理。宝鸡市海拔大致在500米到3780米之间最低处是渭河出境段最高点为太白山拔仙台附近。如果统计结果出现0、负值或超过5000米的异常说明原始数据或裁剪环节出了问题。再看NoData占比健康的DEM其NoData比例一般低于1%如果超过2%边界处或山谷底部可能有大面积空洞。快速生成山体阴影并扫一遍视觉检查Spatial Analyst → Surface → Hillshade把结果叠加在DEM上如果出现规则的横向条纹或大片拉丝那基本可以判断原始数据源自ASTER GDEM且未做去噪处理。两个来源的DEM可以互相校验。我一般会下载同一区域的SRTM和ASTER分片用栅格计算器做逐像元差值。差值超过15米的像元大概率是其中一个数据集的数据缺陷。import rasterio import numpy as np with rasterio.open(srtm_baoji.tif) as src: srtm src.read(1).astype(float32) profile src.profile with rasterio.open(aster_baoji.tif) as src: aster src.read(1).astype(float32) diff np.abs(srtm - aster) fix_mask diff 15 mixed np.where(fix_mask, srtm, aster) mixed[aster -9999] srtm[aster -9999] with rasterio.open(baoji_dem_mixed.tif, w, **profile) as dst: dst.write(mixed, 1)逻辑说明先将SRTM和ASTER读成同一分辨率、同一范围的Numpy数组然后计算逐像元的高程差。差值大于15米时优先采用SRTM的值ASTER中的NoData位置直接用SRTM回填。这里15米阈值来自两套公开数据的标称精度差异属于实践中的常用经验值。运行这段代码前务必确认两个栅格的范围、投影和像元大小完全一致否则差值结果全部错位。不一致时先用gdalwarp把ASTER重采样到SRTM的网格上再执行上面的逻辑。4.2 填洼不是DEM处理的默认选项在水文分析教程里填洼Fill几乎是必讲步骤但很多人误以为任何DEM在使用前都要先填一次。填洼会把低于出流口的高程点抬平至最小出流方向的临界值这会直接抹掉真实地形中的负地形细节对坡度、坡向、地形起伏度和可视域分析来说填洼后的数据会产生明显的扭曲。宝鸡的秦岭北麓发育了大量沟谷和天然洼地一旦做了全域填洼很多短小的冲沟会被直接抹平后续做汇水累积时得到的流水线会与实际情况明显不符。填洼只应该在水文分析流程内部使用。具体做法是在ArcGIS里先用Fill工具生成填洼后的栅格再通过栅格计算器填洼结果 - 原始DEM计算每个像元的填洼深度。统计结果中如果出现深度超过50米的像元群说明原始DEM带有未修复的空洞或异常低值这时候回填了多个像元的深度水文分析的结果并不可靠得先回到4.1节做数据修复。4.3 shp文件损坏与坐标系丢失的修复路径解压后的shp偶尔会出现无法加载的情况常见报错是Number of shapes does not match number of table records意思是几何记录数与属性表记录数不一致。先用ShapeChecker扫描一遍shp它会检查文件头、几何编码、属性索引和坐标范围并报告损坏位置。确认损坏后在ArcGIS中用Data Management Tools → Features → Repair Geometry修复自相交、小环等几何错误这个工具能保留属性但要注意它可能会改变极小面积碎面。如果文件本身没问题但加载后要素和DEM错位我先看.prj文件是否缺失。缺失时用ArcGIS的Define Projection手动指定坐标系如果下载页标注的是WGS84就选GCS_WGS_1984随后再用Project工具转换到目标坐标系。另一个路数是利用Data Interoperability扩展的Quick Import它会把shp先导入到File Geodatabase中转再导出回来这个过程中会自动修正部分编码和读取兼容问题。顺带说一句shp转gdb不是换了个文件夹而是从几MB的散文件换成了二进制数据库存储属性读取速度和字段类型支持都不一样需要大批量修复时用gdb做中转比直接改dbf编码要省事得多。5. 三种实战产出坡度、等高线与山体阴影以及分块输出的技巧5.1 Slope工具的单位选择与分级标准出坡度图时ArcGIS的Slope工具有两个输出单位度数和百分比。做气候、生态和可视域分析时用度数更直观做水土保持的坡度分级时常用百分比。对宝鸡市这种兼具河谷平原与陡峻山地的区域用度数做重分类时建议分5级2°以下为平缓地2°到6°为缓坡6°到15°为中等坡15°到25°为陡坡35°以上为极陡坡。这个分级参考了常用的水土流失分级标准直接套用可以让最终图例更便于评审理解。生成坡度后留意一下Z factor参数当DEM所在坐标系以米为单位时Z factor设为1即可不需要额外做单位换算。5.2 等高线自动提取与抽稀的关键参数用Contour工具从30m DEM提取等高线等高距选择决定图面信息密度。全市范围的出图建议用30米等高距计曲线设置为150米5条一加粗在秦岭山区用50米等高距可以避免图面过密在渭河谷地要加密到10米才能看清地形细节。生成的等高线shp往往带有很多细小毛刺直接叠加在底图上会显得杂乱。ArcGIS里可以用Smooth Line做平滑容差设为15米左右但平滑会导致少数相邻线交叉输出后跑一次拓扑检查更稳妥。5.3 山体阴影、渔网分割与三维发布山体阴影的默认参数是太阳方位角315度、太阳高度角45度这个组合对北半球的丘陵和山地显示效果最好能同时压暗高光区并保留沟谷阴影。把Hillshade叠加到原始DEM上图层透明度设为40%再叠加载色后的坡度结果能做出像浮雕一样的地形底图。如果这个成果要发布到Web端先按1公里×1公里生成渔网再按渔网分割shp的方式把DEM裁剪为几百个瓦片每片单独生成3dtiles再并行请求是控制前端加载量的常用做法。最终出图前统一所有成果的坐标系Web端统一用WGS84经纬度本地项目保留中央经线108°E的CGCS2000投影。这样从zip包到正式成果的整个流程才算真正闭环。本文还有配套的精品资源点击获取