ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

GrIMP DEM全解:基于立体摄影测量的格陵兰冰盖数字高程模型

GrIMP DEM全解:基于立体摄影测量的格陵兰冰盖数字高程模型 做格陵兰冰盖研究的人手里多少都存过这样一套数据文件名前缀是GrIMP_DEM标签上挂着MEaSUREs格式是GeoTIFF分辨率30米覆盖范围从格陵兰最南端的过渡带一路铺到北部皮里地。我第一次认真用它是在处理格陵兰东北部一条潮水冰川的末端变化当时ArcticDEM还没有铺满整个冰盖手里的Landsat立体像对又做不了亚像素级的地形改正我需要一套能稳定覆盖全岛、并且有统一高程基准的面状DEM作为底图。翻来翻去最后落在MEaSUREs格陵兰冰盖测绘项目GrIMP这套基于GeoEye和WorldView卫星影像生产的数字高程模型上也就是大家常说的GrIMP DEM。这套数据适合谁简单说做冰川变化、冰面高程、冰流速、末端崩解研究的遥感工作者和研究生以及在极地地区搞地形分析但不想从原始卫星影像重新跑一遍摄影测量流程的人。它解决的核心问题是——如何在没有地面控制点的冰盖上获得一套空间连续、精度可控、时间上可对比的全岛高程模型。今天这篇就把项目背景、生产原理、版本差异、实操流程和踩坑经验一次性讲透。1. 先搞清楚这套数据解决什么问题1.1 格陵兰冰盖高程观测的三个难点格陵兰冰盖约170万平方公里差不多是墨西哥面积的两倍。要在这么大面积上持续观测高程变化地面测量和站点观测全都覆盖不过来。这是第一个难点观测范围与空间密度之间的矛盾。第二个难点是地形——冰盖边缘不是平缓的斜坡而是布满陡峭的冰裂隙、狭窄的峡湾和快速流动的冰川。地形起伏大对遥感立体测高的要求就高。第三个难点是环境限制高纬度地区极夜漫长云层频繁太阳高度角常年偏低光学遥感影像的获取窗口非常有限。这三个难点叠加在一起决定了格陵兰高程观测不能靠单一手段。卫星测高比如ICESat和ICESat-2能给出精确的沿轨剖面但轨道之间的间隔往往几十公里无法构成连续面。机载激光雷达精度高但覆盖范围有限做全岛测量成本极高。剩下可行的大范围连续面状测高手段就是高分辨率光学立体像对摄影测量这正是GrIMP DEM的诞生背景。1.2 GrIMP 项目在整个数据链里的位置MEaSUREs 全称 Making Earth System data records for Use in Research Environments是NASA为地球系统科学研究建设长期数据记录的计划。GrIMP 是其中专门针对格陵兰的子项目全称 Greenland Ice Mapping Project。它产出的不只是DEM还包括冰流速场、冰川末端位置、冰面高程变化时间序列等一系列产品。在GrIMP的整个产品体系里DEM扮演的是“地基”角色。冰流速图反演时需要DEM做透视改正和地形去斜末端位置分析需要DEM提取测线高程质量平衡计算需要DEM差分得到体积变化。可以这么说DEM的精度直接影响下游所有派生产品的可靠性。所以GrIMP团队才会投入那么多精力专门用高分辨率商业卫星影像来做一套全岛DEM而不是直接拿全球粗分辨率DEM凑合。1.3 为什么选 GeoEye 和 WorldView 立体像对这个问题我在使用过程中想过很多次为什么不直接用光学卫星图像加雷达干涉测高或者干脆等ICESat-2的轨道数据密起来原因其实很实际。GeoEye-1的全色分辨率约0.41米WorldView系列WorldView-1/2/3的全色分辨率在0.31到0.5米之间。这么高的空间分辨率可以捕捉冰裂隙、雪丘、岩石纹路等地表细节给立体匹配提供充足的特征点。相比之下Landsat的15米全色波段虽然也能做立体像对但匹配精度完全不在一个量级上。更重要的是这些商业卫星具备同轨道立体采集能力——卫星在沿轨道飞行时可以连续拍下同一地区的两幅影像前后视角不同形成天然立体像对。两幅影像获取间隔只有几十秒地表在这几十秒内的变化可以忽略不计这在动态的冰川地区是巨大的优势。如果是不同轨道、不同时间的立体像对冰川本身已经流动了几十米立体匹配就会彻底失败。从时间维度看WorldView-1于2007年发射GeoEye-1于2008年发射WorldView-3于2014年发射。这些卫星的影像覆盖从2007年延续到现在恰好对应格陵兰冰盖变化的剧烈期。GrIMP DEM就把这个时间段的高精度影像压缩成了一套连续的高程产品这是其他数据源很难做到的。2. 数据生产链路从两张卫星图到一张高程图2.1 光学立体摄影测量的基本原理理解这套DEM的质量绕不开立体摄影测量的原理。简单说当一个目标点被两个不同位置的传感器拍摄时它在两幅影像中的位置会有差异这个差异叫视差。视差越大目标离传感器越近视差越小目标越远。人类大脑就是靠两只眼睛的视差感知深度卫星立体像对也是同一个道理。具体处理流程大概分四步第一步对两幅影像进行几何纠正确定每幅影像拍摄时的外方位元素第二步在左右影像中寻找同名点这个步骤叫密集影像匹配全色0.4米分辨率的影像能产生密密麻麻的点云第三步利用前方交会原理把这些点的三维坐标计算出来形成稀疏或密集的三维点云第四步把点云网格化插值成规则格网的DEM。这里有一个关键点没有控制点的摄影测量绝对高程精度会明显漂移。卫星定轨和姿态确定的误差会直接传导到高程值上。几百公里的影像范围里哪怕是微小的角误差也会在末端造成几十米的高程偏差。所以GrIMP生产流程里光靠立体像对远远不够还需要用激光高程数据把整个网络“钉”住。2.2 激光测高数据扮演的“地面控制点”角色摄影测量里最经典的作业方式是先布设地面控制点用RTK或全站仪精确量测再反求影像外方位元素。但在格陵兰冰盖上布地面控制点既危险也不现实。GrIMP的替代方案非常聪明——用卫星和机载激光测高中的高精度点云充当虚拟控制点。ICESat卫星装有GLAS激光测高仪ICESat-2发射后装备了更强大的ATLAS激光雷达机载的ATMAirborne Topographic Mapper系统也在格陵兰许多地区测量过。这些激光测高数据的特点是沿轨方向精度极高厘米级但覆盖面不连续像一根根针插在冰盖上。GrIMP团队把这些激光点作为高程控制源用它们在立体像对网络做区域网平差把影像解算出的三维点云整体对齐到一个精确的椭球高度上。这个思路很像装修贴瓷砖时用的水平仪激光尺提供一个绝对水平基准工人拿着瓷砖一块块找平只要每一块都以水平仪为参照整体地坪就不会歪。没有这道工序卫星影像本身的姿态误差就会让DEM“歪歪扭扭”局部精度再高也白搭。这也是为什么我在实际使用中明显感觉GrIMP DEM的整体高程基准比很多直接用原始影像生成的点云更可靠。2.3 从2米原始DEM到30米产品V001到V002做了哪些改进这套数据最终对外发布的网格分辨率是30米但它的原始处理并不仅限于30米。基于WorldView和GeoEye影像的立体匹配原始DEM可以生成到2米甚至更高的分辨率。但2米全岛DEM的存储量和处理代价实在恐怖而且很多区域因为没有好的控制点、云影干扰或低太阳角2米网格反而会有大量噪声。所以GrIMP团队采用了分区域处理然后融合降尺度到30米的策略兼顾了空间细节和稳定性。V001版本其实存在几处让我在使用时很头疼的问题一是冰盖陡峭边缘有比较明显的条带条纹尤其是快速流动区的冰裂隙地带DEM数值出现锯齿状波动二是部分区域和激光测高数据相比存在系统性高程偏差三是相邻影像拼接处偶尔有几十米的错位看起来像“台阶”。V002版本推出的核心改进在我看来可以归纳为三点。第一引入了更多新获取的影像把时间覆盖向后延伸了好几年直接可用于近十年的高程变化分析。第二大规模使用了ICESat-2的ATL06高程产品作为控制源相比V001时代的ICESat和ATM数据控制点的密度和精度都有了明显提升整体高程偏差被压下来了。第三优化了区域网平差和镶嵌策略之前那种接缝处“台阶”的问题大幅度减少。一句话能用V002就尽量不要用V001。2.4 投影、基准与单位最容易搞混的细节极地数据处理里最阴险的坑往往不在算法而在坐标参考系。这套DEM产品的常见投影是北极极射赤面投影在EPSG代码里对应的是3413。你需要记住EPSG:3413以WGS84椭球为基准使用极射赤面投影方式标准纬线设为北纬70°。所以在ArcticDEM、ITS_LIVE等极地产品里常看到“3413”这个数字因为大家约定俗成统一在这个坐标系下工作。更关键的是高程基准。GrIMP DEM的高程值是以WGS84椭球面为参考的椭球高不是日常地图上的海拔高度。椭球高和海拔正高的差值在格陵兰地区可以达到几十米。如果你把DEM高程和大地水准面模型、海面高度数据或者GPS大地高混用必然出现系统性偏移。我自己见过不少新手把Ellipsoidal Height当成Orthometric Height去和海平面变化对比结果得出了虚假的“冰面抬升”结论回头还得重新处理。单位方面高程值单位是米平面坐标单位也是米在极射赤面投影下。这个看似简单的问题在实际处理中却经常被忽略——尤其是当DEM被转成经纬度坐标后再被某些工具强行当“米”来处理时计算出来的坡度和面积全都失真。3. 产品档案与选型对比3.1 数据档案速览这里整理一份我常用的数据档案卡方便查阅项目具体参数数据集全称MEaSUREs Greenland Ice Mapping Project (GrIMP) Digital Elevation Model from GeoEye and WorldView Imagery数据版本Version 2V002数据中心NSIDC DAAC数据集编号可检索NSIDC-0715覆盖区域格陵兰岛冰盖及周边冰川基本覆盖全岛冰面时间跨度影像获取时间约2007年至2020年前后网格分辨率30米高程参考WGS84椭球高单位为米常见投影北极极射赤面投影EPSG:3413分块文件以GeoTIFF内嵌投影信息为准原始影像GeoEye-1、WorldView-1/2/3全色波段立体像对辅助控制数据ICESat、机载ATM、ICESat-2 ATL06激光测高数据这套数据以分块tile形式发布每个文件对应一个地理范围。从数据目录的命名可以看出区域范围比如文件名里带经纬度或行列号信息。实际操作中我一般直接把整个目录下载下来再用VRT虚拟栅格把它们拼成一张全岛图这样后续处理效率最高。3.2 V001 与 V002 版本选择建议如果现在去NSIDC下载默认拿到的就是V002。但有些同学早年间存过V001的旧文件或者在某些第三方服务器上找到了旧版数据这里我强烈建议不要为了省流量和省事继续用V001。为什么因为我在两个版本上都跑过同样的高程差分实验。在相对平坦的冰盖内部两个版本差异不大差值基本在5米以内。但在格陵兰东南部那些陡峭的出口冰川区域V001和V002之间的差距经常达到10到20米局部甚至更大。这个量级的误差会直接淹没掉真实的年际高程变化信号——格陵兰冰盖边缘区平均每年变化也就是几米以内。V002对V001的关键修正包括区域性高程漂移修正、更严格的影像控制网平差、新数据补充了旧版本的空洞区域。如果你要做时间序列分析务必统一版本绝对不要把V001和V002的tile混用在同一套镶嵌结果里否则那些本以为是物理信号的异常差值很可能只是版本差异在作怪。3.3 和ArcticDEM、其他高程产品怎么选极地领域常用的高分辨率DEM主要是GrIMP DEM和ArcticDEM两者经常被放在一起比较。ArcticDEM由美国极地地理空间中心生产同样是基于WorldView/GeoEye影像做立体摄影测量分辨率达到2米格陵兰大部分地区都有覆盖。对比维度GrIMP DEM V002ArcticDEM网格分辨率30米2米也可降尺度使用基础影像GeoEye-1、WorldView系列WorldView系列为主时间范围2007-2020前后按时间版本区分多时相条带产品可提取相对年代镶嵌策略区域网平差后融合成稳定基准按时间拼接局部地区存在云洞和条带适用场景长时间尺度高程变化、区域物质平衡、冰流速地形改正局地精细地形、冰川形态分析、高分辨率地貌判读我的选择经验是核心任务如果是全岛尺度的高程变化或长时间序列分析优先用GrIMP DEM V002它的控制网和基准一致性更好如果关注某条冰川末端的精细形态比如冰崖高度、冰裂隙细节那2米分辨率的ArcticDEM更有价值。两个数据并不互斥经常是组合着用——ArcticDEM负责“看清细节”GrIMP DEM负责“对齐时间”。4. 实操全流程从下载到出图的完整链路4.1 从NSIDC下载数据账号、检索、批量获取格陵兰DEM这类NASA数据产品托管在美国国家雪冰数据中心NSIDC的DAAC上需要注册一个Earthdata账号才能下载。注册流程不复杂访问Earthdata Login页面填邮箱、设密码、勾选服务条款就行。认证方式现在推荐用NASA Earthdata的Token或者.netrc文件直接在NSIDC的下载页面按提示操作即可。数据检索可以直接在NSIDC的搜索界面里输入“MEaSUREs Greenland Ice Mapping Project DEM”或者数据集编号NSIDC-0715来定位。产品页会列出所有tile文件。我个人的习惯是先把整个产品目录用HTTrack或者wget脚本同步一遍因为全岛DEM文件数量不少一个个点下载太不现实。这里给一个用wget批量下载的示例前提是已经在本地配置好了.netrc认证wget -r -l1 -np -nH --cut-dirs3 \ -A *.tif \ https://n5eil01u.ecs.nsidc.org/MEASURES/NSIDC-0715.002/注意把URL替换成你实际看到的目录地址。下载完成后先看一遍文件列表确认tile的覆盖范围和命名规律再进入拼接阶段。4.2 用GDAL完成拼接、投影和浏览拿到一堆GeoTIFF之后第一步不是直接扣进ArcGIS或QGIS而是先用命令行工具摸清数据的真实状态。GDAL是全套地理信息处理里最稳定的搭档。先检查一个文件的基本信息gdalinfo GrIMP_DEM_xx_yy.tif重点关注这几项投影信息、行列数、像素尺寸、NoData值、数据范围。如果投影不是EPSG:3413后续统一投影时就需要指定目标坐标系。然后做拼接。我通常不用一条gdal_merge到底而是先构建VRT虚拟栅格理由是可以先快速浏览所有tile的空间布局而且VRT不复制像素数据处理几百个文件几乎瞬间完成gdalbuildvrt -srcnodata -9999 -vrtnodata -9999 grimp_dem_all.vrt *.tif浏览拼接后的成果可以直接在QGIS里把VRT拖进去看。需要导出为一张完整的大TIFF时再执行gdal_translate推荐使用COGCloud Optimized GeoTIFF格式后续切片发布效率很高gdal_translate -of COG grimp_dem_all.vrt grimp_dem_all_cog.tif如果你需要把数据重投影到常见的经纬度坐标用gdalwarpgdalwarp -t_srs EPSG:4326 -r cubic -dstnodata -9999 \ grimp_dem_all.vrt grimp_dem_wgs84.tif重投影时建议用三次卷积插值cubic而不是最近邻后者会在陡峭地形上产生明显的锯齿。4.3 打开文件却一片黑先检查NoData和拉伸设置接触这套DEM的新手最容易遇到的问题就是影像加载后整幅图黑乎乎的看不出地形起伏。这通常不是数据坏了而是显示拉伸的问题。DEM的高程值域加上NoData的极值会让默认的灰度拉伸把有效信息压到极窄的动态范围里。在QGIS中打开图层属性找到“符号系统”的“渲染类型”选择“单波段假彩色”或“山区阴影”再设置最小值为-100米左右、最大值为2000米左右地形立体感就出来了。如果还看不出细节可以配合“山体阴影”工具生成一个Hillshade图层叠加显示视觉冲击力立刻不一样。在Python里也可以用numpy快速检查数据范围from osgeo import gdal import numpy as np ds gdal.Open(GrIMP_DEM_all.vrt) band ds.GetRasterBand(1) arr band.ReadAsArray() valid arr[arr -9990] # 过滤NoData print(像素统计 - min:, valid.min(), max:, valid.max(), mean:, valid.mean(), std:, valid.std())如果统计结果里出现正负几千甚至更大的值多半是NoData没有被正确识别需要回到gdalbuildvrt阶段检查srcnodata参数是否设置正确。4.4 一个完整的多年高程差分析案例找一条典型的格陵兰出口冰川比如北部或东南部的冰川演示一下高程差分析怎么做。假设我们需要2008年前后的DEM和2015年前后的DEM之间的高程变化。当然V002的tile可能混有多年的影像严格的做法是使用逐tile的采集年份信息把同一年份附近的数据放到一组。这里为了演示先假设你拿到了三组tileA组覆盖2008年前后B组覆盖2015年前后。第一步分别对两组tile构建VRT并重投影到统一的EPSG:3413网格用gdal_calc做差值gdal_calc.py \ -A dem_2008.vrt \ -B dem_2015.vrt \ --outfiledh_2008_2015.tif \ --calcB-A \ --NoData-9999第二步用numpy统计高程差在冰盖内部和边缘区的分布。建议先用一个格陵兰冰盖掩膜文件过滤掉基岩区因为基岩区的高程变化应该接近零可以用来评估数据误差底噪ds gdal.Open(dh_2008_2015.tif) dh ds.GetRasterBand(1).ReadAsArray() dh_valid dh[(dh -200) (dh 200)] print(中位数:, np.median(dh_valid)) print(标准差:, np.std(dh_valid))如果整个冰盖内部的dh中位数明显偏离0比如超过5米说明两组镶嵌数据之间存在系统性高程偏移这时候不要急着解释成“冰面抬升”而要回到原始tile检查相对ICESat-2控制点的高程残差。我见过的靠谱研究一般会先在稳定的基岩区域做验证再谈论冰盖高程变化。5. 典型应用场景这套DEM到底能拿来干什么5.1 冰面高程变化时间序列利用不同时间段获取的DEM做逐区域差分是重建格陵兰冰盖高程变化最直接的路径。GrIMP DEM的tile覆盖有时间标签可以按时间段重组生成2008年到2020年之间的多期高程差图。这个应用的关键在于误差控制。冰盖内部的高程变化本身不大一年只有半米到一米量级如果两期DEM之间的配准误差超过两米信号就全被噪声淹没了。所以实际操作中我会先用稳定的基岩区和冰盖内部缓慢流动区做配准检验如果发现系统性偏移就对其中一期DEM做三维平移改正。GrIMP V002在这方面的底子比较好因为它在生产时就已经用激光控制数据做了绝对基准统一很多配准工作被前置了。5.2 冰川末端测绘与崩解事件监测冰川末端位置提取通常用Landsat或哨兵影像但要量化冰崖高度、崩解后的体积损失就必须有DEM支持。GrIMP DEM的高程数据可以与末端轮廓线叠加快速提取冰前缘的海拔剖面估算崩解事件的体积量级。比如某条冰川在几个月内发生了大范围崩解我们可以把崩解前后的DEM相减得到体积变化总量再除以崩解面积得到平均厚度损失。这个流程现在几乎成了潮水冰川研究的标配。30米分辨率也许不足以看清单块崩解冰山的轮廓但对区域尺度的体积核算来说已经非常够用。5.3 冰流速反演中的地形改正冰流速产品的生产通常采用影像特征追踪技术。卫星影像上的特征点在斜坡上移动时除了冰川本身的运动还有地形起伏造成的投影变形。如果没有DEM做透视改正反演出的位移场在陡峭边缘区会出现系统性的“假速度”。ITS_LIVE这类全球极地冰流速数据产品在做特征追踪时就会用到DEM做地形扭曲消除。GrIMP DEM在这个环节里充当“基准地形”的角色把每张卫星影像重投影到DEM对应的几何空间消除地形起伏引起的像点位移保留真实的水平位移信号。这也是为什么即使你不直接做高程分析只要做极地影像相关工作时手里也需要备一套高质量的DEM。6. 踩坑实录高频问题与排查方法6.1 下载阶段的老大难连接中断、认证失败、看得见下不动NSIDC的服务器位于境外国内用户下载大文件时经常遇到连接不稳定、断点续传支持不好的问题。我的解决办法是用支持断点续传的工具比如lftp或者wget的-c参数设置重试次数。如果单文件反复下载失败按tile逐个下载反而比整体同步更可控。还有一个容易忽略的细节NSIDC的HTTPS下载要求客户端支持TLS相关版本部分老旧wget版本会握手失败。升级到新版wget或者直接用curl --retry 5 --continue-at - 的方式可以省掉很多麻烦。6.2 拼接处出现“台阶”错位怎么办即使V002已经改进了镶嵌质量在实际拼接时仍有小概率遇到相邻tile之间的高程错位特别是某些不同年份影像拼接的边界。这种错位的典型表现是在坡度平缓区域看不出问题但地形突然变陡的地方出现几米到十几米的“悬崖”伪像。处理方法分两步。第一步在QGIS里打开两个相邻tile用“轮廓线”工具分别提取同一条山脊线或冰脊线的高程直接看差值。第二步如果确认错位可以对其中一个tile做高程平移用稳定的基岩区域计算中位数偏移量然后对整个tile减去该偏移值。注意这种平移是全局的、常数偏移不要对每个像元做匹配变换否则会引入更复杂的变形。6.3 冰面空域、NoData和插值GrIMP DEM存在少量NoData区域主要集中在极陡峭的峡湾两侧、阴影严重的长坡面以及部分云的残留区。这些空洞如果直接参与差分会表现为异常大的正值或负值。我的习惯是先建一个掩膜把所有NoData区域扩大几圈缓冲带后续所有分析都避开这些缓冲区域如果某条测线必须穿过空洞再用周围的DEM值做空间插值同时严格记录插值范围在报告里注明哪些区域是野外实测、哪些是插值估计。6.4 新手最容易忽略的高程是椭球高不是海拔这个坑我在前面提过一次但值得再强调一遍因为它太隐蔽了。GrIMP DEM的高程值本质上是在WGS84椭球面上量取的不是相对于大地水准面的海拔高度。在格陵兰地区椭球面和大地水准面之间的差距可能达到二三十米。如果你把DEM高程和GPS大地高比较使用的是椭球高两者可以直接对比但如果把DEM高程与海面高度或者潮位观测对比就必须先做大地水准面改正。大家常用的格陵兰大地水准面模型可以从国际大地测量协会下载转换后在对比。哪怕只是做DEM之间的差分不同版本的大地水准面处理也可能带来虚假的区域内趋势务必保持版本一致。如果让我给刚接触这套数据的人一个建议我会让他先下载两个相邻tile叠加到一条典型出口冰川的测线上看一眼断面形态。现成的山体阴影、冰裂隙纹理和末端崩解崖的立体感比读十篇文档都直观。这套DEM真正体现了“数据产品”四个字的意义——把一批商业卫星原始影像和激光测高数据加工成了可以直接上手做科研的标准化成果。以后遇到任何格陵兰高程相关的问题记得先把它拿出来试试。
返回列表