C++开源DEM高程系统转换
1. 介绍
主要内容是DEM高程系统转换,将开源DEM EGM96模型的高程转换到椭球高程上。
2. 第三方库介绍
(1)GDAL
GDAL库主要用于开源DEM的读取与写入的安装参考:https://blog.csdn.net/weixin_44272195/article/details/126437802
(2)GeographicLib
GeographicLib库主要用于计算大地水准面与椭球的高差N,安装参考:https://blog.csdn.net/weixin_44272195/article/details/134101109
(3)EGM模型下载,参考:https://geographiclib.sourceforge.io/C++/doc/geoid.html#geoidinst或者https://download.csdn.net/download/weixin_44272195/88502590
3. 椭球高与大地水准高的关系
参考椭球面是处理大地测量成果而采用的与地球大小、形状接近并进行定位的椭球体表面。大地水准面(Geoid)是一个假想的由地球自由静止的海水平面,扩展延伸而形成的闭合曲面。但是由于重力分布的不同,大地水准面和完美椭球体有一定出入。下图来自:https://www.unavco.org/software/geodetic-utilities/geoid-height-calculator/geoid-height-calculator.html
4. 单点高程准换代码
#include <iostream>
#include <GeographicLib/Geoid.hpp>
using namespace std;
using namespace GeographicLib;
int main()
{
//参数1:EGM模型文件名称(不要后缀名):"egm96-5"
//参数2:EGM模型存放路径:"001-EGM96\\egm96-5",此处建议自己设置路径。
Geoid egm96("egm96-5", "001-EGM96\\egm96-5");
double lat = 27.988056, lon = 86.925278, height_above_geoid = 20;
double geoid_height = egm96(lat, lon);
//Geoid::GEOIDTOELLIPSOID=1,椭球高h=水准高H+水准高与椭球高距离N。
double height_above_ellipsoid = (height_above_geoid + Geoid::GEOIDTOELLIPSOID * geoid_height);
cout << height_above_ellipsoid << "\n";
std::cout << "Hello World!\n";
}
5. 开源DEM高程系统转换
5.1 AW3D30 DEM介绍
AW3D30(ALOS World 3D)DEM数据由日本太空发展署(JAXA)研制的ALOS卫星搭载的PRISM仪器拍摄的立体影像制作。AW3D30 DEM采用的参考椭球为WGS84椭球,高程基准是基于EGM96高程基准。DEM下载地址:https://www.eorc.jaxa.jp/ALOS/en/aw3d30/data/index.htm,需要注册后下载。
5.2 SARScape开源DEM高程系统转换
- 转换步骤参考:https://www.cnblogs.com/enviidl/p/16267509.html
- 转换结果:
5.3 自写软件结果
利用单点转换计算整幅DEM的转换结果,将SARScpae转换结果与自写软件结果DEM差值计算,统计直方图,相差范围为(-0.01,0.01)m。