
简介这份资源面向地理信息、测绘、城乡规划及环境研究等领域的从业者与学习者提供湖南省湘西土家族苗族自治州30米分辨率的DEM数字高程数据并附带本市级行政范围矢量边界可用于地形分析、坡度计算、洪水模拟、选址规划等GIS任务。压缩包共12个文件约50.18MB主要包含tif格式的高程栅格主数据、shp格式的行政边界矢量文件以及prj坐标系统定义、tfw像素坐标参数、ovr金字塔缩略图、dbf属性表与shx、sbn、sbx索引等配套文件另含若干xml元数据可直接在ArcGIS、QGIS等软件中加载使用。目前已有301人学习下载。数据覆盖完整、坐标信息齐全能帮助读者省去繁琐的边界裁剪与投影配准步骤快速开展三维地形可视化、高程统计与空间建模是区域地理分析与制图的实用基础数据。1. 湘西州 30m DEM 数据到手后先搞清楚它能干什么拿到「湖南省湘西土家族苗族自治州DEM数字高程数据30m含本市级范围shp文件.zip」这个包第一反应不该是解压看文件而是先判断它能不能支撑你手头的活。湘西州地处武陵山区地形起伏剧烈从海拔几十米的河谷到一千多米的台地都有30m 格网刚好能刻画出这种中尺度地貌骨架。这套数据通常由 ASTER GDEM 或 SRTM 类源数据裁剪而来附带的本市级范围 shp 文件是行政边界矢量用来做掩码提取或出图裁切。它适合做流域分析、坡度坡向统计、选址初筛、三维地形底图不适合做场地级竖向设计或厘米级工程测量。如果你正在找「dem 文件」却不确定精度够不够、坐标系对不对、拿到手第一步该跑什么这篇就是按我实际处理湘西州这类数据的顺序写的。2. 解压后先别急着加载目录结构、坐标系与数据完整性检查2.1 一个典型 DEM 交付包里到底有什么这类 zip 解压后一般不会只有一个 tif。常见结构是一个主栅格文件命名可能带_dem.tif或_30m.tif一个行政边界 shp 及其配套的.shx、.dbf、.prj有时还会多一个readme.txt或元数据.xml。先别管命名是否规范用文件管理器看一眼总大小——湘西州全域约 1.55 万平方公里30m 格网单波段浮点 tif 通常在 80MB 到 200MB 之间。如果主栅格只有几 MB大概率是瓦片或样例不是全域。我一般会先建一个工作目录把栅格和矢量分开放mkdir -p xiangxi_dem/{raster,vector,output} unzip 湖南省湘西土家族苗族自治州DEM数字高程数据30m含本市级范围shp文件.zip -d xiangxi_dem/raw find xiangxi_dem/raw -type f | sed s/.*\.// | sort | uniq -c最后一行是按扩展名统计文件类型。如果出现.tif、.shp、.shx、.dbf、.prj、.xml说明交付完整如果.shp有但.prj缺失后面坐标系就得自己补这是第一个要留意的点。2.2 用 gdalinfo 把栅格的底细一次看清不要靠 ArcGIS 拖进去看先用gdalinfo把元数据打出来信息比属性面板全gdalinfo xiangxi_dem/raw/xiangxi_dem_30m.tif重点看四项Size is后面的列行数、Coordinate System is里的 EPSG 或 WKT、Pixel Size是否为 30 左右、NoData Value是多少。湘西州这类数据常见坐标系是 WGS84 地理坐标EPSG:4326此时 Pixel Size 单位是度约 0.000277如果显示的是米制 30那可能是 UTM 或高斯投影。两种都能用但后续做坡度、面积统计时地理坐标必须先投影否则算出来的坡度是错的。提示如果gdalinfo报NoData Value缺失先别慌用gdalinfo -stats跑一遍统计看最小最大值是否落在合理海拔区间湘西州大约 50m 到 1700m。超出这个范围说明有异常值或填充值没标记。2.3 边界 shp 的字段和范围核对矢量这边用ogrinfo看字段和范围ogrinfo -so -al xiangxi_dem/raw/xiangxi_boundary.shp输出里关注Feature Count湘西州一般是 1 个市州级面或下辖县市多个面、Extent是否和栅格范围大致重合。如果 shp 的 Extent 比栅格大很多说明边界是外扩的裁切时要以栅格为准如果小很多可能只给了某个县不是全州。这一步花两分钟能避免后面裁出一片空白还找不到原因。3. 在 ArcMap 里用面图层裁剪 DEM掩码提取和普通裁剪的区别3.1 两种操作到底差在哪热词里反复出现「arcmap 中依靠面图层裁剪dem栅格tif文件」和「依靠面图层掩码提取」这两个在 ArcToolbox 里对应的是不同工具。Spatial Analyst Extraction Extract by Mask掩码提取和Data Management Raster Raster Processing Clip裁剪结果看起来像但边界处理逻辑不同。Clip 是按矩形范围切即使你给了面要素它默认取面的外接矩形Extract by Mask 才是真正按面边界逐像元判断面外的像元置为 NoData。如果你要的是严格贴合行政边界的 DEM必须用 Extract by Mask用 Clip 会多出边界外的矩形角落。3.2 ArcMap 里的操作步骤与参数打开 ArcMap加载栅格和 shp 后确认两个图层的坐标系一致。右键图层 Properties Source 看 Spatial Reference不一致先用Project Raster或Project统一。打开 ArcToolbox进Spatial Analyst Tools Extraction Extract by Mask。Input raster 选 DEMInput raster or feature mask data 选边界 shpOutput raster 指定路径。环境设置里把Processing Extent设为与边界一致Cell Size保持与输入相同不要改成其他值。# ArcPy 等价写法适合批量或脚本化 import arcpy from arcpy.sa import ExtractByMask arcpy.CheckOutExtension(Spatial) dem xiangxi_dem/raw/xiangxi_dem_30m.tif mask xiangxi_dem/raw/xiangxi_boundary.shp out xiangxi_dem/output/xiangxi_dem_masked.tif # 先统一坐标系避免掩码错位 arcpy.ProjectRaster_management(dem, xiangxi_dem/output/dem_proj.tif, mask) result ExtractByMask(xiangxi_dem/output/dem_proj.tif, mask) result.save(out)逻辑说明ProjectRaster_management把 DEM 投到与 shp 相同的坐标系这是掩码对齐的前提。ExtractByMask按面边界提取面外像元变 NoData。参数上Cell Size不显式指定时继承输入栅格保持 30m 不变如果手动改成 10 会重采样精度不会提升反而引入插值误差。3.3 用 QGIS 或命令行做同样的事没有 ArcMap 授权时QGIS 的Clip raster by mask layer或 GDAL 的gdalwarp都能做gdalwarp -cutline xiangxi_dem/raw/xiangxi_boundary.shp \ -crop_to_cutline -dstnodata -9999 \ xiangxi_dem/raw/xiangxi_dem_30m.tif \ xiangxi_dem/output/xiangxi_dem_clip.tif-cutline指定面文件-crop_to_cutline让输出范围贴合面边界-dstnodata设 NoData 值。这条命令等价于 Extract by Mask且不依赖桌面软件适合放进批处理脚本。跑完用gdalinfo再看一次范围确认输出 Extent 和 shp 一致。4. 从 DEM 提 shp 和从 DEM 生成衍生栅格别把方向搞反4.1 从 DEM 提取 shp 的常见场景热词里有「arcgis从dem的提分文件提取shp」这通常指两类操作一是按等高距提取等高线再转 shp二是按坡度或高程阈值提取面状区域。等高线提取用Spatial Analyst Surface Contour设好等高距湘西州山区常用 10m 或 20m输出线要素后可直接保存为 shp。阈值提取用Reclassify或Con把满足条件的像元设为 1再Raster to Polygon转面。# 提取 500m 以上区域并转 shp from arcpy.sa import Con import arcpy dem xiangxi_dem/output/xiangxi_dem_masked.tif high Con(dem, 1, 0, VALUE 500) high.save(xiangxi_dem/output/high_zone.tif) arcpy.RasterToPolygon_conversion(xiangxi_dem/output/high_zone.tif, xiangxi_dem/output/high_zone.shp, SIMPLIFY, VALUE)Con的第三个参数是条件表达式VALUE 500表示高程大于 500 的像元取 1其余取 0。RasterToPolygon的SIMPLIFY会平滑边界减少锯齿节点如果要做精确面积统计改用NO_SIMPLIFY。4.2 坡度、坡向、山体阴影的生成顺序DEM 衍生数据里坡度坡向最常用。顺序是先填洼Fill再算坡度否则洼地会产生异常值。填洼用Spatial Analyst Hydrology Fill坡度用Surface Slope输出单位选度或百分比。坡向用Aspect山体阴影用Hillshade后者需要设方位角和高度角默认 315 和 45 适合大多数场景。# GDAL 命令行算坡度适合快速验证 gdaldem slope xiangxi_dem/output/xiangxi_dem_masked.tif \ xiangxi_dem/output/slope.tif -p -s 111120-p表示输出百分比坡度-s是比例因子。地理坐标下纬度方向每度约 111120 米这个值必须给否则坡度会偏大几个数量级。投影坐标下-s 1即可。这是最容易翻车的地方很多人算完坡度发现全是 80 度以上就是漏了比例因子。4.3 裁剪和掩码提取在衍生数据上的复用坡度、坡向算完后如果只要州内范围同样用边界 shp 做一次 Extract by Mask。注意不要在原始 DEM 上裁完再算坡度、又对坡度裁一次重复裁切会累积 NoData 边缘。正确顺序是原始 DEM 先填洼再算衍生最后统一用边界裁一次。这样边界处的坡度值是基于完整邻域算出来的不会因为提前裁切丢失边缘像元。5. 避坑与排查湘西州 DEM 处理中最容易翻车的 5 个点5.1 现象裁切后 DEM 边缘出现一圈 NoData 黑边原因Extract by Mask 按面边界提取时边界像元部分落在面外就被置为 NoData这是正常行为。但如果黑边很宽通常是 shp 和栅格坐标系不一致掩码错位导致大面积误判。解决先用gdalinfo和ogrinfo分别确认坐标系不一致就投影统一。如果坐标系一致仍有宽黑边检查 shp 是否有内环或自相交用Repair Geometry修复后再裁。5.2 现象坡度计算结果全是 80 度以上或接近 90 度原因DEM 是地理坐标度坡度工具默认按度计算水平距离没有换算成米。湘西州纬度约 28 度每度约 98 公里不换算会导致坡度被严重放大。解决ArcGIS 里在 Slope 工具的环境设置中指定Z factor为 1/111120 左右GDAL 用-s 111120。投影坐标下 Z factor 设 1。5.3 现象解压后 shp 能打开但属性表为空原因zip 解压时只解出了.shp.dbf被杀毒软件拦截或解压工具跳过。shp 的几何和属性是分开存的缺 dbf 就只剩空壳。解决重新解压确认.shp、.shx、.dbf、.prj四个文件同名同目录。缺.prj可以手动定义坐标系缺.dbf只能重新获取数据。5.4 现象Extract by Mask 跑完输出范围比预期大很多原因用了 Clip 而不是 Extract by Mask或者环境设置里Processing Extent被设成了Union of Inputs导致输出取外接矩形。解决确认工具是 Extract by Mask环境设置里 Extent 选Same as mask layer或手动指定边界范围Cell Size 选Same as input。5.5 现象填洼后 DEM 出现大片平坦区域坡度全变 0原因填洼阈值设得太大把真实洼地也填平了。湘西州喀斯特地貌有天然洼地过度填洼会抹掉地形细节。解决填洼时设一个合理的 Z limit如 5m 或 10m只填浅洼或者先不做填洼直接算坡度只在做水文分析时才填。填洼不是必做步骤按目的决定。6. 把 30m DEM 用出更高价值批量处理与精度边界单次裁切和算坡度只是起步。实际项目里往往要处理多个县市、多期数据或者把 DEM 和遥感影像、土地利用叠在一起分析。我一般会写一个批处理脚本把投影、填洼、坡度、掩码串成流水线输入输出都用统一命名规则避免手工操作漏步骤。import os import arcpy from arcpy.sa import ExtractByMask, Slope, Fill arcpy.CheckOutExtension(Spatial) arcpy.env.overwriteOutput True dem_dir xiangxi_dem/raw mask xiangxi_dem/raw/xiangxi_boundary.shp out_dir xiangxi_dem/output for f in os.listdir(dem_dir): if f.endswith(.tif): name os.path.splitext(f)[0] dem os.path.join(dem_dir, f) # 统一投影 proj os.path.join(out_dir, name _proj.tif) arcpy.ProjectRaster_management(dem, proj, mask) # 填洼限制 Z limit 避免过度填平 filled Fill(proj, 10) filled.save(os.path.join(out_dir, name _fill.tif)) # 坡度Z factor 按地理坐标换算 slope Slope(filled, DEGREE, 1/111120) slope.save(os.path.join(out_dir, name _slope.tif)) # 掩码提取 masked ExtractByMask(slope, mask) masked.save(os.path.join(out_dir, name _slope_masked.tif))这段脚本的关键参数有三个Fill的 Z limit 设 10只填浅洼Slope的 Z factor 按湘西州纬度取 1/111120ExtractByMask放在最后保证坡度基于完整邻域计算。跑完检查输出目录每个输入对应四个文件命名可追溯。关于精度边界30m DEM 在湘西州这种山区水平位置误差通常在 10m 到 30m 之间高程误差在 7m 到 15m 左右。做流域划分、坡度分级、适宜性初筛没问题做土方量计算、排水沟纵断面、场地平整误差就偏大了需要实测或更高精度数据补充。我吃过一次亏用 30m DEM 算某园区土方和实测差了近两成后来所有涉及工程量的活都先问一句数据精度够不够。希望帮到你。本文还有配套的精品资源点击获取