尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

30米DEM数字高程数据包处理全流程:从解压、shp边界到地形分析

30米DEM数字高程数据包处理全流程:从解压、shp边界到地形分析 简介本资源为山东省烟台市30米分辨率数字高程模型DEM地理信息数据集面向GIS初学者、地理信息专业学生及城乡规划、环境分析等领域的实践者用于开展地形可视化、坡度坡向计算、水文分析与三维地形建模等基础空间分析任务。压缩包共12个文件包含核心栅格数据文件烟台市dem.tif、配套坐标系定义.prj、空间索引.shx/.sbn/.sbx、属性数据库.dbf及矢量边界文件烟台市范围.shp完整支撑ArcGIS、QGIS等平台直接加载与分析。资源大小31.8MB结构规范、元数据齐全所有文件均经坐标配准与格式校验开箱即用。目前已有884人学习下载用户可直接调用该DEM开展烟台市域尺度的地形特征提取、地貌分类或教学演示无需额外预处理显著降低GIS空间分析入门门槛。 我刚拿到这个数据包的时候文件名只有一个“山东省烟台市DEM数字高程数据30m含本市级范围shp文件.zip”。乍一看挺直观可真正动手处理时DEM是什么、30米分辨率到底意味着什么、里面那个“本市级范围shp文件”能怎么用、压缩包怎么解、坐标系怎么处理每一项都有值得说道的地方。这篇文章我就按照实际使用的顺序把一个 30m DEM 市级边界 shp 的数据包从解压到落地使用完整拆一遍。不管你是刚接触GIS的学生还是已经在做国土、规划、水利相关项目的老手只要你手头有类似的DEM压缩包这篇内容都能帮你少走几弯路。下面我按拿到数据后最合理的处理顺序来讲。1. 拆开这个zip之前先搞明白30m DEM到底能做什么1.1 一个像元30米是什么概念DEMDigital Elevation Model数字高程模型说白了就是一张带着海拔信息的栅格图。所谓30m分辨率意思是这张图上的每个像元对应地面上的一个30米乘30米的正方形区域每个像元只存一个数值就是那个区域的平均海拔。这么说可能不太好感知我换个说法30m DEM在省级、市级这种宏观尺度上足够看清一座山的整体轮廓、一条河谷的最低走势、一个城区的起伏骨架。但如果要分辨一条双车道公路的路面坡度、一栋楼前后的高差30m就完全不够了那时候需要的是1m或更高精度的LiDAR数据。烟台这种以低山丘陵为主的地形用30m数据做区域规划、流域分析、选址评估、三维地形展示性价比是最高的。1.2 这份数据可能来自哪不同来源差别大吗标题里没有写明数据源这里我把目前最常见的开源30m DEM数据列一下你拿到数据后可以对照元数据判断数据源发布机构分辨率特点SRTM GL1NASA/USGS1弧秒约30m覆盖稳定使用最广高程基准WGS842015年后全球开放ASTER GDEMMETI/NASA1弧秒约30m覆盖全球垂直精度略低于SRTM云和噪声较多ALOS AW3D30JAXA1弧秒约30m全球DSM精度不错包含地表建筑和植被顶部信息Copernicus GLO-30ESA/哥白尼30m基于TanDEM-X目前开源全球DEM里口碑相当好的一款不同来源的高程数值会有几米到十几米的差别尤其是植被覆盖区和山体阴影区域。SRTM和Copernicus之间的差异一般比ASTER小。你做跨区域对比时最好统一用同一个数据源不要A地区用SRTM、B地区用ASTER否则最后出图结果会有明显接边落差。1.3 市级边界shp的真正价值裁剪与统计的“标准尺”压缩包里那个“本市级范围shp文件”才是整个数据包里的隐藏钥匙。它通常是一个面状的行政区划边界用来做两件最核心的事第一裁剪。DEM是全球或大区范围的栅格直接做分析会包含周边城市边界不干净。用市级shp对DEM做掩膜提取ArcGIS里的Extract by MaskQGIS里的Clip Raster by Mask Layer就能得到只覆盖烟台市范围的DEM后续统计面积、计算等高线都精确很多。第二统计。有了行政区划边界你可以按区县拆分布尔运算统计每个区的平均海拔、最高点、坡度分级面积占比这些在规划报告里是特别实用的数据。这里有个细节我提醒一下有些数据包里的shp是简化版边界只适合大比例尺展示做精确面积统计时会有误差。你拿到shp后先看一眼属性表里有没有面积字段再和实际行政区面积对比一下心里有个数。2. 先把文件弄到手解压、校验、密码与损坏修复2.1 下载的zip为什么老是解压失败很多人第一步就卡在解压上。标题带“.zip”但你用Windows自带解压或者老版本的WinRAR一解报错一串英文。我列举几个高频翻车现场和对应的原因报错信息最可能的原因优先处理方案file is not a zip file文件本身不是zip格式只是改了后缀名用Linux的file命令看真实类型或用7-Zip打开invalid zip archive: could not find eocdzip文件不完整下载中断导致尾部目录缺失重新下载或用7-Zip的修复功能failed to copy spatial iop zip多发生在网络磁盘或压缩包内文件被占用时换到本地目录关掉杀毒软件再解压解压后中文文件名全部乱码zip包在Windows下用GBK编码Linux下默认UTF-8解码解压命令加 -O GBK 参数或用Bandizip/7-Zip“could not find eocd”这个报错很有代表性。EOCD是zip文件末尾的中央目录结束标记相当于整本书的目录页。如果文件下载到一半断了或者传输过程中被截断zip尾部没有这个标记系统就根本认不出它是一个完整压缩包。遇到这种情况我的处理顺序是先重新下载一次如果还不行再用7-Zip的“打开压缩包-工具-修复压缩文件”功能修复后一般能抢救出大部分数据但修复出来的文件名可能变成随机名属性表之类的小文件也偶尔会丢所以这只适合应急。2.2 快速修复手段与Linux解压命令如果你在Linux服务器上工作解压中文文件名的zip包最简单的是这样# 先看压缩包内容别急着解 unzip -l 山东省烟台市DEM数字高程数据30m.zip # 直接解压中文乱码时用 -O 指定编码 unzip -O GBK 山东省烟台市DEM数字高程数据30m.zip如果压缩包被拆成了多个分卷比如 .z01、.z02 加一个 .zip这时候必须先把所有分卷放在同一个目录下从 .zip 那个主文件开始解压普通unzip可能会分卷处理不干净建议直接用7-Zip图形界面或Windows的WinRAR它们对分卷的支持更成熟。顺带说一下zip密码的事。如果压缩包是加密的而你知道密码只是想去掉加密属性很简单用WinRAR或7-Zip正常解压到文件夹然后把里面的文件重新打成不带密码的zip/rAR包。如果密码本身忘了那只能找数据提供方要或者自己逐个回忆可能的密码组合没有任何正规工具能“一键移除”未知密码。市面上所谓密码恢复工具本质都是跑字典或暴力穷举耗时长短完全取决于密码强度。2.3 解压后的文件结构检查清单解压完成后先别急着拖进ArcGIS。我建议按这个清单过一遍数据里有没有 .tif / .img / .dem 结尾的高程栅格文件旁边有没有 .tfw / .xml 之类的元数据文件有的话先打开xml看坐标系和分辨率。shp文件是单独一个“烟_市界.shp”还是一整套 .shp/.shx/.dbf/.prj前三个缺一个都打不开prj缺失则坐标系未知。文件大小是不是符合预期30m DEM覆盖一个市级范围压缩后一般在几十MB左右如果只有几百KB八成是边界矢量而不是完整栅格。这些检查不花多少时间却能防止你后面花了半天处理数据结果发现原始文件本身有问题。3. 坐标系的坑比数据本身更值得花时间3.1 先看坐标系元数据别急着加载我见过太多人把DEM往ArcMap里一拖就开始做坡度分析做完之后发现结果单位根本不对。原因很简单很多开源30m DEMSRTM、Copernicus、ALOS默认都是WGS84地理坐标系单位是度不是米。如果你拿经纬度直接算坡度ArcGIS会提示你“这个数据是地理坐标系需要投影”有些自动处理流程会默认按每度对应的近似米数换算但结果并不精确。所以拿到数据的第一步永远是看属性ArcGIS里右键图层-属性-源QGIS里看图层属性-信息确认坐标系是GCS_WGS_1984、CGCS2000还是别的。这个习惯能帮你避开至少一半的返工。3.2 烟台市该用哪个投影参数烟台市大致在东经119.5度到122度之间横跨了3度分带里的40带和41带分界附近。如果只给整个烟台市范围做分析我推荐用高斯-克吕格3度分带第40带中央经线120度东经这是国内测绘生产和自然资源项目里最常用的选择。在ArcGIS Pro里投影栅格工具的目标坐标系可以选CGCS2000 / 3-degree Gauss-Kruger CM 120E或者WGS_1984_UTM_Zone_50N。要注意的是用UTM 50N中央经线117度处理烟台东侧区域时会有一定变形如果项目要求面积精度稳妥做法是自定义一个以120E为中央经线的高斯投影或者用覆盖全省的Albers等积投影两条标准纬线取36N和38N。还有一个很容易忽略的点30m分辨率在投影后像元大小要重新指定。如果你把WGS84下的0.0002695度当作30米投影后还要把像元大小明确设置为30米否则输出栅格的分辨率会变成一个看着很奇怪的小数。3.3 坐标不匹配的三种典型翻车现场我在实际工作中遇到过三种很典型的情况分享出来给大家避雷第一种矢量shp与DEM坐标系不一致。最常见的是shp用的是CGCS2000投影坐标DEM是WGS84地理坐标两者直接叠加shp跑到栅格外几百公里外。解决办法是先投影shp或重投影DEM让二者坐标系统一。第二种把经纬度数据当成投影坐标读取。这样整个图层缩放到一个点附近看着像“数据丢失”其实是坐标系定义错了。第三种投影后高程值出现异常。这种情况比较少但如果你选的投影基准面和原数据不符比如WGS84椭球与CGCS2000椭球之间没做转换高程值可能会整体平移几十米。在山东半岛这类区域WGS84和CGCS2000的差异通常在1米左右但在要求严格的工程应用中不能忽略。所以我的建议是做正式的坡度、面积、水文分析之前务必把数据统一到同一个投影坐标系并且记录好原始坐标系和转换参数后面写报告还能用上。4. DEM数据实战从地形分析到三维可视化4.1 坡度、坡向、山体阴影一锅端投影处理好之后就可以开始地形分析三件套了坡度、坡向、山体阴影。坡度Slope表示地面陡缓程度单位常用度或百分比。ArcGIS里Slope工具直接输入DEM算出每个像元的坡度角。坡向Aspect表示坡面朝向输出的是0到360度的方位角用来做光照、植被、建筑选址分析都很常见。山体阴影Hillshade模拟光线照射地形默认参数是方位角315度西北方向光源、太阳高度角45度出来的灰度图非常自然。这三个工具在ArcGIS里都在Spatial Analyst工具-表面分析下。QGIS用户则用Raster-terrain analysis菜单也一样。操作上我有个小建议山体阴影不要只用默认参数可以叠加多个光源方向做多方向阴影multidirectional hillshade用40%透明度叠在坡度图或影像图底下效果比单方向阴影好很多。烟台这种多丘陵的区域单方向阴影很容易在某些朝向产生大片死黑多方向叠加能明显改善山地立体感。4.2 等高线生成与制图输出从DEM生成等高线是特别常见的需求ArcGIS里用Contour等值线工具QGIS里叫Contour。关键参数是等值线间距烟台这种海拔多在0-900米之间的低山丘陵区域大范围制图用20米间距比较合适局部小区域看细节可以加密到10米甚至5米。生成之后等高线默认是一堆折线线条生硬有锯齿。我的处理流程是先用Smooth Line工具做平滑拓扑容差设小一点然后根据高程字段做分级设色低海拔用绿色中海拔用黄色高海拔用棕色最后标注等高线高程值字体小一点避开密集区域。这里要提醒一句30m DEM生成的等高线只能用于示意图、宏观分析图不能用于工程测量和地籍确权。原因很简单30m的栅格在陡坡区域本身就丢失了大量地形细节等高线误差现场一两米很正常。4.3 水文分析与流域提取DEM另一个重量级用途是水文分析。用ArcGIS的Hydrology工具组流程很固定Fill填洼先把DEM上的小凹点填平避免水流滞留在错误位置Flow Direction流向用D8算法即每个像元沿最陡坡方向流向8个邻域之一Flow Accumulation累积流量统计每个像元上游有多少像元汇入设置流量阈值提取河流网格用Watershed工具结合出水口提取完整流域边界。这套流程放在烟台这种多丘陵、多短小河流的沿海地区宏观尺度上完全可用。但有个坑一定要踩明白Fill会改变地形填洼之后生成的河流是“理想状态”下的水系不是真实河道。你拿30m DEM提取出来的河网天然就和卫星影像上的实际河道有偏移这是分辨率带来的物理限制不是操作问题。4.4 三维场景和3dtiles发布DEM最出效果的地方是三维可视化。最简单的做法是把DEM和山体阴影图叠在一起在ArcScene或ArcGIS Pro里用“Layer 3D”显示垂直夸张系数设成1.5到2倍烟台这种地貌马上就有立体感了。QGIS里还能用Qgis2threejs插件一键导出交互式三维网页方便你发给同事领导和甲方预览。如果你想发布到Web端、加载进Cesium或者大屏那就要把地形切片或者转成3dtiles了。这里要注意两条技术路线别混淆DEM如果要保留地形起伏效果应该转成地形切片terrain tilesetCesium接下来可以直接做地形刷shp矢量比如市界、区县面、带状线如果要加载进三维场景才转成3dtiles。CesiumLab是个很方便的免费工具DEM转terrain和shp转3dtiles都能一条龙处理设置好坐标系和切片层级后输出结果直接挂到Cesium中加载烟台市范围的数据量级处理起来很轻松。5. shp文件打开与转换的那些硬骨头5.1 shp不是单一文件——五件套缺一不可写过shp的同学都知道shp从来不是“一个文件”而是一组文件。常见组成如下文件后缀作用是否必需.shp要素几何信息真正的图形必需.shx几何索引帮助系统快速定位要素必需.dbf属性表数据必需.prj坐标系定义强烈建议.cpg属性表编码声明强烈建议.sbn/.sbx/.xml空间索引、元数据辅助可选如果压缩包里只给你一个单独的.shp文件那基本没法直接用。碰到缺文件的情况优先回去找数据源看是不是解压遗漏了或者换一个完整数据包。这比试图“修复”一个残缺shp要靠谱得多。打开shp现在已经很简单了ArcGIS里双击或者拖进去QGIS里直接拖拽最新版的国产GIS软件如SuperMap iDesktop也支持直接打开shp。打不开时先检查三点一是路径里有没有中文和空格二是文件权限是否只读三是ArcGIS版本是否支持这个shp生成的坐标系。5.2 编码问题cpg缺失导致的乱码shp里属性表最常见的翻车就是中文字段乱码。原因一句话总结dbf文件里存的是GBK编码的字符串但没有cpg文件声明ArcGIS/QGIS按默认UTF-8去读中文就全变成问号或“锟斤拷”了。这个坑我自己踩过不少回。解决办法有两个方向如果还没打开先用记事本打开.cpg文件看里面写的什么。如果缺失用QGIS打开shp时选择“UTF-8”或“GBK”编码能试对如果已经打开了并且乱码不要在ArcGIS里一个个改字段值那是白费功夫。正确做法是直接用QGIS重新读一遍指定正确编码再导出新shp顺便生成cpg文件以后再打开就不会乱了。如果你手头源数据本身就是UTF-8那在ArcGIS里必须先通过“ArcToolbox-数据管理工具-添加编码页”生成cpg文件并指定为UTF-8否则属性表里中文照样乱。5.3 常用转换场景txt、dxf、CAD、3dtiles实际业务中shp经常要转来转去这里说几个最常见的场景。shp转txt一般是为了交换坐标数据或导入其他系统。ArcGIS里最简单的方式是打开属性表全选行直接复制粘贴到txt里如果是要导出几何坐标比如各边界拐点的经纬度用Python更方便import geopandas as gpd gdf gpd.read_file(烟台市界.shp) # 输出每个要素的外边界坐标 for idx, row in gdf.iterrows(): print(row.geometry.wkt)shp转CAD批量处理多个shp时可以ArcToolbox用“导出为CAD”一次选多个图层输出到一个dwg如果你需要保留字段属性到CAD扩展数据那得用FME或者CAD插件普通导出会丢属性。dxf转shp则正好相反用ArcToolbox里的“CAD to Geodatabase”转完再导成shp。FME是其中最强的工具但学习成本也高。shp转3dtiles需要把矢量拉伸成三维体然后再切片。CesiumLab里可以直接选shp并设置高度字段、拉伸高度、皮肤颜色输出带属性查询的3dtiles。注意shp的坐标系在转换前最好统一成web墨卡托EPSG:3857否则在Cesium中可能出现位置偏移。这些转换本质上都绕不开两个核心问题坐标基准统一、属性编码不丢。这两点做好了格式怎么转都是水到渠成的事。最后再分享一个我自己的小习惯拿到任何DEM加shp的数据包我从来不会直接往GIS里拖而是先建一个项目文件夹把原始压缩包保留、解压后的数据放单独目录、坐标系记录写成txt、初步检查结果放一个说明文档。这套习惯看着简单但在项目多、数据杂的时候能让你在几个月后回头找数据时还清清楚楚不用重新折腾一遍。处理DEM这类数据最大的成本从来不是工具不会用而是返工。希望这篇内容能帮你少返几次工。本文还有配套的精品资源点击获取
返回列表