DEM可提供精准的基础地理数据,在全球气候变化、海洋潮汐运动、地球球体物质交换等研究领域发挥着至关重要的作用。高分辨率全球海洋DEM数据是海洋地质和海洋测绘的前沿分支,为了解海底构造运动、海底演化过程提供直接依据。但由于技术限制和测绘成本等原因,获得高分辨率全球海洋DEM代价高昂。
2022年12月,清华大学地球系统科学系黄小猛教授科研团队在《科学通报》(Science Bulletin)上发表题为“3弧秒全球DEM数据集的超分辨率重建”(Super-resolution reconstruction of a 3 arc-second global DEM dataset)的论文,发布了全球3弧秒(90 m)分辨率海洋和陆地DEM数据产品(GEBCO_2021)。
该研究基于30 m分辨率的美国国家航空航天局(NASA)DEM卫星影像、联合国政府间海洋学委员会的450 m分辨率GEBCO_2021公开数据和部分区域高分辨率海洋地形数据,采用深度残差预训练神经网络和迁移学习(Transfer Learning)相结合技术,构建了适用于全球区域的DEM-SRNet模型,制作了全球3弧秒(90 m)分辨率的海陆DEM产品GDEM_2022。
与目前广泛采用的基于插值或者其他深度学习超分方法对比,所构建模型结果均优于同类方法。与基于插值的传统方法相比,GDEM_2022产品的RMSE指标平均提升23.75%。通过对比GDEM_2022与GEBCO_2021,发现GDEM_2022在清晰度和细节方面优于GEBCO_2021。该研究提出的深度学习超分辨率DEM可以大大减少必要测量的海域或点的数量,很好地补充了海底的精细测绘和全球高分辨率海陆DEM地形图的构建。
该成果可以满足不同领域和不同层次对海洋测深数据的需求,为不同地形复杂度下全球海陆重力场与地形的关系、探索不同海陆构造单元的均衡机制以及海陆地形对海洋潮流运动的影响等方面的研究提供重要支撑。
基于此,我将数据进行处理后,生成了能够接入到Cesium上显示的terrain格式瓦片数据。
数据经过重投影及合成后,加载到Global Mapper上显示,效果如下
数据覆盖了全球陆地和海洋,相比较全球30m,12.5m的高程数据,其实它们应该叫全球陆地地形数据,并不包括海洋海底地形。
90m数据最高能切到12级,下图为地形瓦片数据的目录结构
可以看一下layer.json配置文件信息
将数据使用Nginx进行发布,具体发布方法可以参考我之前的地形瓦片发布文章,这里给出nginx中nginx.conf的配置server方法
server
{
listen 8802;
server_name localhost;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
add_header Access-Control-Allow-Origin "$http_origin";
add_header Access-Control-Allow-Credentials true;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
if ($request_method = 'OPTIONS')
{
return 204;
}
location / {
autoindex on;
root D:/Data/DEM/Data/DEM-90M-WGS84-GLOBAL-GDEM-MESH/;
#index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
前端使用Cesium进行接入,具体接入关键代码如下
//创建viewer
const viewer = new Cesium.Viewer('cesium-app', {
selectionIndicator: false,
baseLayerPicker: false,
homeButton: false,
infoBox: false,
timeline: false,
navigationHelpButton: false,
navigationInstructionsInitiallyVisible: false,
vrButton: false,
fullscreenButton: false,
geocoder: false,
animation: false,
sceneModePicker: false,
shadows:true,
imageryProvider: new Cesium.ArcGisMapServerImageryProvider({
url: 'https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer'
})
});
viewer.cesiumWidget.creditContainer.style.display = "none";
viewer.scene.globe.enableLighting = false;
viewer.scene.highDynamicRange = true;
viewer.scene.msaaSamples = 16;
viewer.scene.fog.enabled = true;
viewer.scene.fog.enableLighting = true;
//加载地形
viewer.terrainProvider = new Cesium.CesiumTerrainProvider({
url:"http://192.168.1.77:8802/",
tilingScheme: new Cesium.GeographicTilingScheme(),
requestVertexNormals:true
});
首先创建viewer对象,设置大气、光照、抗锯齿等参数增强地形表达效果;再通过CesiumTerrainProvider创建viewer的terrainProvider对象,这样数据就加载到场景当中了。在这里说明一下,我的后端nginx和前端cesium不是一台机器,后端机器ip是192.168.1.77,开放的端口号是8802,因此我们接入的url全称是"http:\192.168.1.77::8802",也需要设置tilingScheme,我们的数据都是wgs84投影,所以设置的是GeographicTilingScheme对象;同时设置requestVertexNormals为true,因为地形瓦片是Mesh格式,在生成Mesh格式terrain数据时,也生成了每个点的法向量,这样开启光照,地形会有光照明暗阴影,效果更加自然。
下面放几张加载截图
总体而言,这份90m高程地形瓦片数据在显示效果上是相当不错的,能够满足海底地形的三维可视化等应用。对于这份数据,有问题咨询的读者,可以在评论区留言,或者私信联系,我将及时回复大家的问题。