ARTICLE DETAIL

资讯详情

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

全球DEM数据shp版解析:从解压、坐标系到坡度坡向提取实战

全球DEM数据shp版解析:从解压、坐标系到坡度坡向提取实战 简介全球DEM数据压缩包面向ArcGIS用户提供覆盖全球的数字高程模型数据适合进行坡度分析、流域划分、灾害评估等基础GIS工作。包内共4个文件包含1个GeoTIFF影像文件及其XML元数据另附带金字塔ovr文件用于加速显示压缩包仅18.82MB轻量高效。数据已含投影信息可在ArcGIS中直接加载免去额外坐标转换全球范围覆盖分辨率虽不算超高精度但足以支撑区域尺度地形分析和教学演示。已有1615人学习下载适合GIS初学者快速上手全球地形数据处理也可用于项目前期验证。借助ovr金字塔可获得流畅缩放体验XML元数据则便于核对数据来源与投影参数减少预处理时间提升分析效率。 第一次看到这种“全球DEM数据shp文件”的rar包时我心里是疑惑的DEM不都是动辄几个GB的栅格影像吗shp不是矢量格式吗这俩怎么会凑到一块儿等到自己下载、解压、在GIS软件里折腾一圈之后我才明白这类数据包的价值——它把“全球”这个范围和高程信息一起压缩到了非常小的体积里特别适合快速查看、范围圈选和制作专题图。这篇东西我就围绕这个rar里的shp数据展开聊聊它到底是什么、怎么解压才是正确姿势、怎么用它提取坡度坡向以及我几次翻车之后总结出的处理链条。1. 全球范围却只有这么小这份shp版DEM的结构与定位先别急着解压搞清楚手里的数据是什么比什么都重要。这类“全球DEM数据”以shp格式提供其实是在干一件事把连续的高程场从栅格转成矢量用更少的空间装下大体相同的信息。1.1 栅格DEM和矢量shp同一套高程数据两种完全不同的脾气为什么shp版本能这么小核心原因在于两者的存储逻辑完全不同。栅格DEM是一张规矩的网格每个像元都记录一个高程值。全球范围1弧秒约30米分辨率的DEM栅格解压出来能到几十GB即便做成瓦片也要占不少空间。shp就聪明得多它只记录有限个几何点、线、面的位置和高程属性。比如把全球DEM规则抽稀成一定间隔的高程点或者转成等高线那么文件体积会从GB级直接掉到几百MB甚至几十MB。“不大很好用”这个说法说的就是这种体量上的优势。我拿到这类数据后一般会先做三件事看shp的几何类型、看属性字段、看点的密集程度。几何类型决定了处理思路常见的会有两种情况规则格网采样点点与点之间间隔相对均匀属性表里有高程字段常见字段名如ELEVATION、HEIGHT、Z、GRID_CODE。等高线/等值面几何类型是折线或面属性表里通常有高程等级字段。这两种结构的处理方向差别很大。点是离散样本适合做插值线是连续走向适合先转TIN再生成栅格。我见过不少人拿到shp版DEM后直接拿去做坡度分析结果软件提示“没有有效栅格”其实就是没搞清楚数据底层的组织形式。下面这张表可以很清楚看出两者的差异对比项栅格DEMGeoTIFF等shp版DEM矢量点/线数据体积大全球范围动辄GB级小可压缩到几百MB以内地形连续性连续网格天然适合分析离散样本需要插值才有连续表面坡度坡向计算直接使用邻域算法需先插值/转栅格再做邻域计算制图叠加需要裁剪、金字塔加速轻量加载迅速可直接叠加业务图层适合场景水文、淹没、工程精细分析快速总览、范围选择、分级设色、教学演示1.2 “不大很好用”背后的取舍它适合哪些场景又不适合哪些场景先说它适合干什么。shp版DEM最大的价值在于“轻”一次加载全球范围不卡顿做选点、采样、分布统计、和行政区划叠加时非常顺手。如果你的项目只是需要快速了解某个区域的地形起伏趋势或者做一份高程分级图给领导汇报这份数据完全够用。但它也有明显的边界。因为数据量小是依靠“抽稀”或“压缩存储”实现的点位之间的真实地形细节会被磨平。你在山区做滑坡、洪水淹没这类需要精细地形的分析时shp版的精度很可能撑不住另一点是做坡度坡向、水文分析这类依赖邻域像元的计算时shp矢量数据本身不具备栅格那样的邻域结构必须经过插值转栅格才能继续。这个我在后面第三章会专门展开。所以我的建议是把这类shp版DEM当成“引路数据”而不是“终极数据”。先靠它把大范围框架搭起来真到了精确分析阶段再针对重点区域去下载原始分辨率的栅格DEM补充这样既省时又稳妥。2. 动手前的三道工序解压、加载、查坐标拿到这个rar压缩包后的第一个动作当然是解压。别小看这一步我见过不少同事折在解压上。2.1 rar压缩包怎么干净利落地打开RAR是商业压缩格式但并不意味着你必须安装付费软件才能解压。个人使用的话7-Zip和Bandizip都足够好前者是开源免费的代表后者对国人习惯更友好解压rar完全没问题。如果你是从某论坛或网盘下载的分卷压缩包比如文件名里带 part1.rar、part2.rar记住一个要点所有分卷必须放在同一个文件夹里然后从第一个分卷开始解压工具会自动拼接剩余分卷。另外提醒一句如果压缩包加了密码网上那些“移除rar密码”的工具我不建议碰大概率是骗下载量或捆绑恶意程序。正确做法是先看发布页面或说明文档里有没有附带密码没有就联系发布方索取如果文件是从项目组内部流传出来的直接问同事最快。为了一把数据把电脑搞到中招太不划算了。解压出来后还有一个细节容易被忽略shp不是一个单文件而是一组文件簇。至少要有.shp几何、.dbf属性表、.shx索引这三个文件缺一不可。如果解压后只有一个孤零零的.shp文件那很可能是传输过程中丢了文件加载时大概率报错。在Windows资源管理器里查看时注意是否隐藏了后缀名别把.shp.xml、.sbn这些辅助文件当成主文件。2.2 加载shp之后的第一优先动作确认坐标系用QGIS或ArcGIS把shp拖进去之后第一件事不是直接做分析而是确认坐标系。全球数据的坐标系通常会带有自己的设定但这个设定不一定是分析时想要的甚至有些数据源在导出shp时会把.prj文件丢掉导致软件只能靠猜。怎么快速判断一个很朴素的方法看图层范围。如果X坐标在 -180 到 180 之间、Y坐标在 -90 到 90 之间这基本是经纬度地理坐标系WGS84EPSG:4326如果X、Y坐标是几百万或几千万的量级那基本是投影坐标系比如Web墨卡托 EPSG:3857 或 UTM投影坐标。如果打开后发现图层位置跑到海里去了多半是坐标系定义错误或缺失需要在QGIS里手工指定正确的坐标参考系统然后再重新加载。实际操作中我习惯先把所有数据统一到EPSG:4326下处理最后出图时再按目标区域投影。尤其做全球尺度的分析时用Web墨卡托会导致高纬度地区面积严重变形不推荐直接拿它算坡度坡向等涉及面积和角度计算的量。2.3 属性表乱码和一些容易忽略的文件细节属性表打开后出现乱码是shp数据处理中最常见的问题没有之一。原因是shp的属性部分存放在.dbf文件里而.dbf文件对字符编码的支持一直是历史遗留痛点。数据在不同软件或系统之间流转时UTF-8和GBK编码相互错位中文内容就直接变成乱码。在QGIS里处理很简单加载shp时在“数据源管理器→矢量”中找到“编码”选项手动切换为UTF-8或GBK预览窗口能直接看到是否恢复正常。ArcGIS中处理稍麻烦一些我的做法是干脆绕开用QGIS读取并重新另存为一份新的shp保存时在选项里指定编码为UTF-8然后再拖进ArcGIS基本不会再乱码。另外再提两个细节一是shp的字段名不要用中文很多工具对中文命名字段支持不佳会直接导致分析失败二是字段名长度不要超过10个字符这是dBase格式的硬限制超了会被截断配合起来很痛苦。如果你看到别人发来的shp字段名全是缩写别嫌难看很可能就是为了迁就这个限制。3. 坡度坡向提取点shp不能硬算这两条正路可以走热搜里有一句“dem影像提取坡度坡向python代码”这大概是很多人拿到DEM后最想做的事。但你要先意识到拿着shp版DEM去直接算坡度十有八九会翻车。3.1 为什么拿着点shp直接算坡度必然翻车坡度本质上是中心点与周围邻域之间地形变化率的总和一个像元的值本身无法定义“坡度”这个概念。栅格DEM天然具备规则的邻域结构所以直接套一个3×3窗口就能算出坡度和坡向但shp点数据是离散的点与点之间没有明确的相邻关系除非数据本身就是规则格网采样且没有缺测否则GIS软件根本无法确定该用哪几个点来算高差。退一步说即便你的shp是规则格网点多数软件也不会直接提供“对点要素计算坡度”的功能。正确路径是先栅格化或插值得到一个规则高程栅格然后再在这个栅格上做坡度坡向分析。这步转换虽然多花了几分钟但能让后续所有地形分析都站在一个可靠的基础上。3.2 路线AQGIS里三步完成插值与坡度坡向如果你只是偶尔做一次分析QGIS就能搞定不需要写代码。第一步加载点shp图层。打开“处理工具箱”搜索“插值”选择“Interpolation”工具。这里的关键是插值方法的选择如果数据是规则格网采样点用IDW反距离加权或者TIN三角网都行IDW速度略快TIN能保留更多局部细节如果数据是等高线强制选TIN因为它能在相邻等高线之间构造三角面不会出现跨层插值导致的异常。第二步设置输出栅格的分辨率。这一步决定了结果精度也决定了你的电脑会不会卡死。QGIS默认的像元大小可能对全球数据来说太细跑很久也出不来我通常会把输出范围限定到目标区域像元大小先设成0.01度约1公里级别做快速预览确认效果后再用0.001度跑正式结果。第三步输出栅格后打开“栅格→地形分析→坡度 或 坡向”输入刚生成的DEM栅格选择输出单位度或百分比点运行即可。如果你装了GRASS插件也可以用处理工具箱里的r.slope.aspect一次性能输出坡度、坡向、曲率等多个地形因子效率更高。3.3 路线B用Python和GDAL做批量处理如果分析范围很大、或者要反复处理多块数据脚本才是正解。GDAL里自带两个非常好用的工具函数gdal.Grid负责对矢量点数据插值生成栅格gdal.DEMProcessing负责计算坡度、坡向、山体阴影等地形产品。我通常是把两者串起来用几行代码就能完成整个流程。from osgeo import gdal # 1. 点shp插值为栅格DEM src_shp global_dem_points.shp out_dem dem_interp.tif grid_options gdal.GridOptions( formatGTiff, algorithminvdist:power2.0, # IDW反距离加权power2.0是常见默认 width3600, height1800, outputTypegdal.GDT_Float32, ) gdal.Grid(out_dem, src_shp, optionsgrid_options) # 2. 基于DEM计算坡度默认输出角度单位是degree gdal.DEMProcessing(slope.tif, out_dem, slope, formatGTiff) # 3. 计算坡向0-360度正北为0 gdal.DEMProcessing(aspect.tif, out_dem, aspect, formatGTiff)这段代码里值得解释的有几个地方。algorithminvdist:power2.0表示使用反距离加权法平方衰减意味着越近的点权重越大这是最常用也最稳妥的插值算法width3600, height1800控制输出栅格尺寸这里对应约0.1度分辨率如果你只想处理某个省或某个流域应该先用outputBounds参数把范围框起来否则基于全球范围跑高分辨率输出文件会非常巨大计算时间也很难接受。gdal.DEMProcessing是GDAL 3.1以后提供的高层接口几条命令就能完成传统上多个步骤的坡向计算底层还是成熟算法结果直接可用。4. 把数据放进日常GIS流程镶嵌、导出、三维加载数据拿到手以后总逃不过几个日常操作镶嵌、导出、加载到三维地球看效果。这中间有不少细节做错了小则多花时间大则结果偏差。4.1 ArcGIS/QGIS里做DEM镶嵌时的几个关键设置如果你的工作流里已经有多个分幅的DEM栅格比如按图幅下载的SRTM需要合并成一块ArcGIS里用“镶嵌至新栅格”Mosaic to New RasterQGIS里用“栅格→杂项→合并”Merge。镶嵌最容易踩的坑是NoData值不一致。不同来源的DEM无效值可能分别是0、-9999、255等合并后会出现大量黑色空洞或异常低值。我建议在镶嵌前先用“栅格计算器”把每个文件的NoData统一重设为同一个值比如-9999再做镶嵌最后用“填充NoData”工具处理残余空洞。如果你只是做范围展示其实用shp版DEM做符号化显示就够了不一定非要栅格镶嵌但如果要算坡度、汇水面积必须用连续栅格这时候镶嵌质量直接决定后续分析可靠性。还有一点要提醒ArcGIS的“镶嵌至新栅格”工具里有一个“像素类型”和“波段数”选项如果源数据是16位整型或32位浮点务必选对否则高程精度会被压缩成8位山区的高程细节直接丢失。4.2 QGIS里导出shp最简单、且不踩编码坑的办法“QGIS导出shp文件最简单方法”其实特别简单但很多人因为编码设置不对导出后中文乱码还得返工。正确步骤是在图层列表里右键目标图层选择“导出→保存要素为”格式选择“ESRI Shapefile”文件名称尽量用英文和数字不要带空格和中文。最关键的一步是下面的“编码”选项手动改成“UTF-8”这样在QGIS里正常的内容导出到别的软件里才能正常显示。如果你是从ArcGIS环境转过来的还会碰到一个习惯差异QGIS默认会把图层样式存成.qml文件但shp导出的目标主要是数据交换样式丢就丢了不要纠结。真正要确认的是路径下确实生成了.shp、.dbf、.shx、.prj四个文件缺了.prj的话到别的软件里坐标系就丢失了。4.3 三维工具加载shp白模和高程点要区别对待近些年图新地球LocaSpace Viewer这类三维GIS软件用得很频繁很多人想把城市白模shp或DEM高程点拖进去直接看。这里要区分一下如果shp是城市建筑白模通常是闭合的面要素加载后通过属性表里的高度字段做“拉伸”设置就能呈现立体建筑效果立体效果出不来先在软件里检查要素是否有高度字段以及拉伸基准面是否设对了。如果shp是DEM高程点我强烈建议不要直接用点符号在三维场景里展示——全球尺度下那基本就是一坨乱点毫无地形感。正确做法是先在QGIS或Python里把点插值成栅格再导出为GeoTIFF或直接转成TIN再加载到三维软件里配合高程放大系数才能真正看出地形走势。5. 复盘几次翻车之后我沉淀下来的注意事项最后这部分是我在实际使用这类全球shp版DEM时踩过坑之后总结的几条经验不算系统教程但每一条都是真金白银换来的。5.1 别把“小数据”当成“高精度”文件小不代表精度低但也不代表精度能满足你的工程要求。很多全球shp版DEM是从公开的30米或90米分辨率DEM里抽稀转换过来的点与点之间的实际距离可能达到数百米甚至数公里。这意味着两点之间的山谷、山脊可能完全丢掉了。做小流域、城市内涝这类细粒度分析之前一定要先看数据说明文档有些rar里会附README别解压完就把说明文件当成垃圾删了确认点位间隔和原始数据来源。如果连说明文档都没有就在GIS里测量几个相邻点之间的距离来估计真实分辨率。5.2 DSM和DEM不是一回事点shp分不清时先滤波再说很多数据源会把DSM数字表面模型和DEM混着叫实际内容可能完全不是一个东西。DSM包含地表以上物体——房子、树木、桥梁DEM则是去掉这些物体后的“裸地高程”。如果你拿到的点shp采样自DSM直接做洪水淹没或挖填方分析结果会明显偏高或出现古怪的突变。怎么判断看数据类型。正常的裸地高程在山区有平滑的渐变趋势而DSM在城市区域会出现大量高出周边几十米、几百米幅度的异常点。处理方法相对粗暴但有效用局部统计滤波比如计算每个点与周围若干米范围内其他点的高程中位数差值把差值超过阈值的点剔除掉再重新插值。我没有在这份全球shp数据里做这种过滤但真到了精细分析阶段这一步逃不掉。5.3 下载、解压、交换过程中的那些零碎提醒最后再啰嗦几句。用浏览器或网盘客户端下载rar时先看文件大小是否与页面标注一致大概率是下载中断解压后如果加载shp没反应先检查磁盘上文件是否被其他软件尤其是Excel占用.dbf被Excel打开时GIS软件会一直报文件锁定错误如果你打算把数据发别人最好把.prj、.dbf、.shp、.shx一起打包别只拖一个.shp文件走否则对方拿到手基本是残废数据。我自己实际用下来这类全球DEM数据的shp版本非常适合作为项目的“第一版底图”——快速搭建高程背景、确认研究范围、和生产数据做空间关系判断都非常顺手。但记住它只是一个高效起步工具真正做精细地形分析时为特定区域补充高分辨率DEM栅格才是稳妥路径。本文还有配套的精品资源点击获取
返回列表