ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

12.5米DEM与SHP数据处理:从解压到裁剪的完整工作流

12.5米DEM与SHP数据处理:从解压到裁剪的完整工作流 简介安徽省黄山市12.5米分辨率数字高程模型DEM数据附带该市行政边界的shapefile矢量文件面向地理信息、测绘、城乡规划等领域的中高级使用者。高分辨率DEM可清晰呈现细部地形比常见的30米数据精度更高适用于地形分析、坡度坡向提取、洪水淹没模拟及工程选址等场景对黄山市域复杂的山地地貌尤为适用。压缩包共13个文件以GeoTIFF高程数据.tif为核心配套坐标投影.prj、世界文件.tfw、属性表.dbf及空间索引.sbn/.sbx等辅助文件同时包含TIFF元数据与金字塔文件数据格式完整、可直接接入ArcGIS等主流GIS平台内含市级范围shp边界便于按行政区划进行裁剪与统计。资源包约80.37MB已有161人浏览学习适合需要精细地形底图的科研课题、区域规划或教学实训使用。1. 12.5米DEM配上市级shp这个压缩包到底在解决什么问题拿到手一个“安徽省黄山市12.5米DEM数据含市级范围shp文件.7z”在自然资源、测绘或者城乡规划这一行里属于最常见的“半成品数据包”。它把黄山市全境的数字高程模型栅格以12.5米的分辨率打包同时把一个做好的市级行政区划边界shp文件塞进同一个压缩包里。12.5米意味着每个像元对应地面12.5米乘12.5米的实际范围比常见30米分辨率DEM能多看出一个冲沟、一个陡坎对黄山这种高差起伏大、地形破碎的山地城市很多宏观分析能直接省掉重采样这一步。附带shp的目的更纯粹就是想让你拿边界直接去裁剪、去统计、去出图省得自己描边界。这篇文章会把解压、属性检查、裁剪、坡度提取以及常见翻车点按顺序讲完适合刚接触DEM的从业者也适合给团队做数据处理规范的老手。2. 解压这份.7z数据别用系统右键硬解命令行更稳先面对最直接的问题这是一个7z格式压缩包。7z在DEM这类栅格数据分发里很常见因为地形栅格即使压缩成tif也动辄几百MB到一个多GB7z的高压缩比能把传输成本降下来。但很多人在Windows上右键“解压到当前文件夹”会遇到两个情况一是解压到一半报错二是电脑内存占用彪高。原因不复杂DEM的tif文件内部是16位整型栅格压缩后依然有大量冗余数据系统自带解压器对大文件和高压缩比支持并不完整所以我会首先建议用7-Zip或命令行工具处理。2.1 Windows和Linux下解压7z的命令与参数如果你在Linux服务器上直接处理数据最稳的方法是命令行解压。我通常这样写7za x 安徽省黄山市12.5米DEM数据含市级范围shp文件.7z -o./huangshan_dem -pYourPassword -y说明一下几个参数据为什么要这么设x表示解压并保留目录结构不要用ee会把所有文件平铺到一个目录里DEM文件名重名时直接互相覆盖-o参数指定输出目录注意-o后面没有空格一旦写成-o ./huangshan_dem会把路径名也带个空格解出来的目录名是错的-p后面直接跟密码如果不写在命令里也可以解压时会提示输入避免密码出现在shell历史记录里。-y是全部确认覆盖适合批量处理。Windows环境我一般用7-Zip的图形界面但有个容易被忽略的选项在解压对话框里先点一下“测试”按钮验证压缩包完整性再点“确定”解压。这一步花几十秒能省掉解压到99%才报文件损坏的尴尬。如果安装的是7-Zip 22.0以上版本右键菜单里有“打开压缩包”选项能直接看到包内文件大小和数量先核对名称是否包含“dem”“shp”“说明”等关键字再决定整体解压还是只解压某个子文件。2.2 解压后核对文件DEM栅格、shp文件组和说明文件解压完成后先不要急着扔进ArcGIS列出目录结构快速核对。find ./huangshan_dem -type f | sort正常情况下你至少会看到三类文件一个或多个tif格式的DEM栅格文件通常命名为“DEM_12.5m”或类似带有分辨率和年份的名称一组shp相关的文件包括.shp、.shx、.dbf、.prj偶尔还有.cpg和.sbn以及一个文本说明文件可能是.txt或.md。shp文件必须有这四件套才能正常打开缺了.prj意味着坐标系信息丢失缺了.dbf属性表就无法显示这是最需要现场发现的问题。用ls -lh看一眼各文件大小12.5米DEM覆盖黄山全市域面积约9800平方公里解压后的tif文件通常在800MB到1.5GB之间如果只有几十MB说明要么是瓦片切块后的局部范围要么经过了重采样不是完整覆盖。shp文件本身很小可能只有几百KB到几MB重点是确认它是否包含边界数据可以后续用qgis或arcgis打开属性表快速验证。2.3 为什么要选7z存DEM压缩率与传输的实际权衡在存储和传输DEM数据时7z比zip常用的原因是压缩率更好对地形栅格这种重复模式较多的数据尤其明显。同一份12.5米DEMzip压缩率通常在1.5到2倍左右7z可以做到3倍以上这在企业网盘和微信传输中天差地别。另一个隐性好处是7z支持分卷压缩比如数据超过2GB时切成多个小分卷方便通过U盘或网盘分段拷走接收方只要把所有分卷放在同一目录下解压第一个就能全量还原。但7z也有代价解压速度比zip慢内存占用高而且国内外很多在线预览工具不支持7z对方如果只会用系统自带解压器就会直接报错。所以我的习惯是对外交付给非GIS同事或甲方时重新压成zip或者干脆把tif直接拷出去只有团队内部分发或长期归档才保留7z原始包。这个数据包既然自带7z后缀大概率是业内共享或从某数据平台下载的源包保留原始压缩包同时把解压后的数据放在工作目录是最稳妥的归档方式。3. 在GIS里先验证再动手栅格、shp、坐标系统三件事很多人拿到数据直接开始裁剪、填挖、出坡度图结果出了奇怪结果回头才发现坐标系是歪的。对12.5米DEM来说坐标系的误差不是小事在高山区哪怕只是投影方式不同坡度计算都可能差出好几度。我先用ArcGIS Pro或QGIS打开检查任何后续处理都以这一步的结果为基准。3.1 加载12.5米DEM看懂基本属性和高程范围在ArcGIS Pro里直接把tif拖进地图如果符号系统没有自动适配屏幕可能是一片灰白。鼠标右键图层打开“属性”窗口查看“源”标签页里的像素类型、行列数和像元大小。正确状态应该是像素类型为16位有符号整型或16位无符号整型像元大小为12.5米波段数为1。如果看到像素类型是32位浮点说明这个DEM可能已经被某个工具做过填洼或滤波处理不再是最原始的DSM或DEM数据。接着看高程范围。黄山地区海拔从几十米到1800多米tif的统计值应该大致符合这个区间。如果最小值是0但最大值只有几百说明数据要么被裁剪过只保留了平原区域要么在生成时设置了错误的无效值范围。这一步用ArcGIS的“属性”面板里的“统计数据”直接看也可以手动用Python快速读取import rasterio with rasterio.open(./huangshan_dem/DEM_12.5m.tif) as src: print(src.bounds) print(src.crs) print(src.read(1).min(), src.read(1).max())注意代码里用src.crs输出坐标系信息如果坐标系是EPSG:4490或EPSG:4326那还是经纬度坐标后续计算长度、面积和坡度前必须做投影转换如果EPSG是4547或4548这种说明已经是CGCS2000的3度带高斯投影黄山市大概在117度带才可以放心直接用米为单位计算。3.2 检查shp文件的属性表和坐标系把shp文件拖进来之后右键打开属性表先看有几个字段、有多少要素。市级行政区划边界shp通常只有一个面要素字段里包含“市名”“面积”之类的信息。如果要素数量是几十上百个那可能是乡镇级甚至村级的行政边界和标题不匹配就不能直接用来裁剪。坐标系检验这一步更加关键。在ArcGIS中打开shp的“源”标签页看坐标系是否和DEM一致。常见不一致情况是DEM已经是CGCS2000高斯投影shp还停留在WGS84地理坐标系或者shp用的是西安80大地坐标系。注意WGS84与CGCS2000虽然都是坐标系统但两者在平面和高程上有不小差异在高山地区如果不做转换直接裁剪精度损失可能超过10米对12.5米分辨率的DEM来说就无法接受。在QGIS里也可以用“图层属性 → 信息”查看或者运行ogrinfo命令。我一般会直接用ogrinfo检查快一些ogrinfo -so ./huangshan_dem/huangshan_city.shp huangshan_city输出内容里看Geometry: Polygon和Layer SRS WKT两行就够。如果看到PROJCS[CGCS2000_3_Degree_GK_CM_117E]这类内容说明投影正确。如果没有PROJCS而只有GEOGCS就要先做投影。3.3 12.5米分辨率在黄山意味着什么坡度坡向的误差边界12.5米分辨率在黄山市这种地形下坡度值比30米DEM普遍偏大沟谷和山脊线更锐利。这带来一个实际问题从这份数据直接算出的坡度和国土三调或林业调查里基于1:1万地形图生成的坡度会有系统性差异。用于项目预研、选址避让绰绰有余如果用于审批或量算面积必须和当地地形级DEM做交叉验证。所以在验证这一步建议顺手生成一份坡度栅格的直方图看一眼坡度值分布是否符合黄山的地貌特征大量缓坡集中在0到30度少数陡崖区域达到50度以上。如果几乎所有像元的坡度都集中在5度以内很可能是坐标系没转换导致尺度错误或者是原始数据就是平面插值出来的伪DEM这会直接决定后续裁剪和坡度提取的结果是否可信。4. 用市级范围shp裁剪DEM从按掩膜提取到GDAL命令行验证完数据属性后接下来用shp作为范围提取规则裁掉不需要的区域。核心目的是把黄山全市的DEM栅格缩小到市级边界以内的范围一方面数据体积缩小出图不卡顿另一方面做面积统计时不会把周边城市或省外区域算进来。这里有两个常见思路ArcGIS的按掩膜提取工具以及QGIS和GDAL的命令行裁剪。4.1 ArcGIS按掩膜提取的必调参数在ArcGIS Pro的“地理处理”窗格中搜索“按掩膜提取”输入栅格选择原始DEM掩膜数据选择shp文件。有三个参数必须在执行前调整第一“NoData值”设置为原tif实际的NoData值通常DEM的NoData是-9999或0如果保持不变裁剪后边界外会有一整圈黑色背景影响后续的坡度分析结果。第二输出像元大小等于原始像元大小不要选择“最大值”或“最小值”裁剪操作不需要重采样强制对齐即可选了反而改变数据精度。第三选择“提取面积之外为NoData”而不是“之外为0”这样输出文件会自动把边界外区域标记为空值不会参与计算。执行完成后看一眼输出结果的范围正确范围应该和shp的边界基本重合而不是整个矩形。如果掩膜后矩形的四边还在说明shp的坐标系或几何类型有问题返回第3章检查。4.2 QGIS和GDAL的裁剪命令一条命令搞定多数场景如果在Linux环境或想跳过图形界面直接使用GDAL的gdalwarp命令裁剪gdalwarp -t_srs EPSG:4547 -cutline ./huangshan_dem/huangshan_city.shp \ -crop_to_cutline -dstnodata -9999 -tr 12.5 12.5 \ ./huangshan_dem/DEM_12.5m.tif ./huangshan_dem/DEM_clipped.tif代码里的参数逐个说明-cutline指定shp范围文件-crop_to_cutline让输出栅格裁剪到边界外接矩形并掩膜如果不加这个参数只会改变范围但不会做实际裁剪-dstnodata -9999把输出背景设为-9999避免后续和真实高程值混在一起-tr 12.5 12.5强制坐标分辨率不变防止GDAL在裁切后被高精度shp边界影响而产生亚像元的偏移。等于号后面的输出文件名上最的一个细节是用_tmp作为临时命名因为gdalwarp在写输出文件过程中如果中断会残留半成品会影响后续自动处理流程判断。裁剪完成后用gdalinfo检查生成文件的尺寸和统计值gdalinfo -stats ./huangshan_dem/DEM_clipped.tif主要看Size is后面的行列数和原tif比较行数和列数应当小于等于原来的值。如果发现Size大于原始尺寸说明-tr或-t_srs设置有问题发生了重采样应改回原始投影重跑一遍。4.3 裁剪后处理边界锯齿、背景0值转NoData剪完之后往往要再做三步收尾。首先边界附近可能会有一圈锯齿状边缘这是栅格化和矢量边界之间的正常现象如果觉得自己做的图要求严格可以用ArcGIS的“边界清理”工具或者QGIS的“填充NoData”工具在边界附近做平滑但注意这会改动真实高程值必须另存一个备份文件。其次打开裁剪后tif的符号系统如果显示一片黑色检查统计值里的最小值和NoData值。有时ArcGIS会把NoData值当作一个比最佳高程大得多的值比如显示最小值为-9999这就要手动设置NoData值或者用“构建金字塔”重新统计。最后把裁剪结果的坐标系信息复制保留在元数据里很多后续工具比如Global Mapper或Blender读取时需要读取到坐标系的prj信息。5. 处理这份数据常见的5个坑现象、原因和解决和DEM、shp、7z打交道多了翻车原因基本都集中在几个固定点上。这里按“现象→原因→解决”的格式记下来都是我实际处理过程中遇到并排查过的。5.1 7z压缩包密码正确但解压一直报错现象解压到中间某个文件时弹出“数据错误”或“密码错误”重新输入密码还是报错甚至换一个解压软件后连打开都不行。原因大概率不是密码问题而是压缩包源文件已损坏多半是传输中断或存储介质坏道导致的。第二常见原因是中文文件名的编码问题特别在Linux系统中系统locale默认不是UTF-8时7za解压中文路径会直接失败。解决先运行7za t只测试不释放确认损坏位置如果测试报告某个文件CRC错误说明压缩包本身不完整需要重新获取源文件如果测试正常但解压到一半中断换成7za x -p密码 --localeUTF-8或在Windows上用7-Zip手动指定输出路径把路径改为纯英文目录再解压一次。5.2 DEM加载后全黑或者全白现象把tif拖进ArcGIS或QGIS后渲染区域全是黑色或白色完全看不到地形纹理。原因DEM是16位栅格数值范围从几十到几千而软件默认按8位显示动态范围加载不正确直方图拉伸失效。另一个常见原因是tif里混入了无效的负值比如-9999被当作真实高程参与渲染。解决在ArcGIS的符号系统里把拉伸类型改为“百分比截断”并设置两个标准差之前的截断值瞬间恢复纹理如果仍然发黑检查“符号系统—属性—拉伸”里NoData值的设置把-9999或0标记为NoData。QGIS里则是在“图层属性—符号系统”里选择“单波段灰度”并把“对比度增强”选为“拉伸至最小值/最大值”。5.3 按shp提取后结果大面积NoData现象用裁切后shp做工程但结果几乎90%都是NoData仅有零星几个地方有值。原因两类情况最常见。一是shp范围和DEM坐标系不是同一套shp显示在正确位置但实际坐标相差几百公里只需把shp重投影到和DEM一致的坐标系二是shp的属性表里本应该只有一个面但实际上是多个孤立的细碎小多边形参与裁剪时只选中了一部分其余区域变成NoData。解决先做坐标系统统一然后打开属性表检查要素数再用“消除”工具把碎面合并重新按掩膜提取。5.4 裁剪后边界外出现一圈黑色背景现象裁剪完成后的tif在周边有一圈黑色区域面积不大但影响出图效果统计高差时还会把黑色区域当成0米的平地。原因ArcGIS默认“按掩膜提取”时把掩膜外的像元设置为0而不是NoData。0在DEM里是真实的高程值而不是背景空值后续坡度计算会把这些平地区域误判为极缓坡。解决在按掩膜提取工具的“环境设置”里将“提取区域输出为NoData”勾选如果已经按0值输出用“栅格计算器”对提取结果执行SetNull(rast0, rast)把零值转为NoData。验证方式是查看输出tif最小值如果仍是0说明没有正确转换。5.5 另存后tif在其他软件里显示错误颜色和范围现象在ArcGISPro里正常的DEM导出为tif放到Global Mapper或CAD里打开后颜色花掉、高程范围也不对。原因导出时把栅格数据设置为按色带导出即把拉伸颜色烘焙到RGB通道导出结果是三波段的彩色图片DEM高程信息全部丢失或者导出时选了jpeg、png等有损压缩格式数据值被截断。解决导出时选择“栅格—TIFF”格式在格式设置里确保“波段”为1波段不勾选“使用渲染器设置”如果还出错在命令里明确用gdal_translate -ot UInt16保持原始数据位深并附带.tfw世界文件保证坐标系一并保存。6. 把12.5米DEM用出“实际价值”坡度分级、出图验证和团队规范数据都清理干净后最常落在实际项目上的用途是坡度分级和高程分带。这两件事直接决定了用地选址、林地方位、风电光伏布设等决策方向。6.1 生成坡度和坡向再排查高山区的失真像元在ArcGIS或QGIS中都会用“坡度”工具直接输出坡度栅格默认单位是度输出像元大小与DEM一致。注意一个隐藏参数当DEM坐标系是经纬度如EPSG:4326时工具会在计算时内部投影但结果在高山区可能产生一系列横向条纹这是投影失真导致。遇到这种情况最直接的办法是先将DEM转换为高斯投影再做坡度。坡度完成后建议再做一次坡向计算并用“山体阴影”工具做三维晕渲图把DEM生成的地形渲染成连续的山体阴影。这时能明显发现原始数据是否存在空洞、凸起或沉降等异常点。如果山体阴影图里出现单个像元级别的亮点或暗点说明DEM可能在生成时没处理好水面或云雾区域。解决方法是使用焦点统计的“多数”滤波把异常点替换为周围中值。6.2 高程分层设色和报告出图给甲方或者兄弟部门交付成果时直接把灰度DEM出图很难看懂。通常做法是在ArcGIS里用“重分类”工具把DEM按照设定的间隔重新分类比如黄山地区可以分成0到200米、200到500米、500到800米、800到1200米、1200米以上五级然后给每一级赋一个从浅到深的色带。重分类输出的栅格已经是整型统计出各级面积时可以导出属性表按字段面积算百分比。出图时要把市级边界shp叠加在最上层并设置无填充色只加边框线。这样既方便看图知道区域边界又不会阻挡地形渲染。最后导出为PDF或JPG缩放比例建议控制到15万以内避免栅格像元过于明显。6.3 我一直没有丢掉的检查习惯每次处理完这类12.5米DEM数据我都会保留三个中间文件原始压缩包、未裁剪前的原始tif、裁剪后的工作tif。原始压缩包永远不动未裁剪tif用于追溯矢量边界造成的误差工作tif在新项目开始时作为底图读取。出图最后一步还会手动把鼠标移到黄山最高峰莲花峰附近用“探查”工具点几个点对照高程标注确认数据没有偏移。这个验证习惯救过我好几次因为高程虽然正确但位置漂移了十几米只在出图比例尺小的时候看不出来。做地理数据的活儿多个心眼比什么都强希望帮到你。本文还有配套的精品资源点击获取
返回列表