GeographicLib

CMakeLists.txt:

1
2
3
find_package (GeographicLib REQUIRED)
include_directories(${GeographicLib_INCLUDE_DIRS})
target_link_libraries(<可执行程序> ${GeographicLib_LIBRARIES})

直接看代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <GeographicLib/LocalCartesian.hpp>

GeographicLib::LocalCartesian geo_converter;
double longitude = 0.0;
double latitude = 0.0;
double altitude = 0.0;
double local_E, local_N, local_U;

GeographicLib::LocalCartesian geo_converter;
// 这步获得了当前经纬高的值,初始化原点
geo_converter.Reset(latitude, longitude, altitude);
// 这里的意思是相对于原点,移动的经纬高的数值
latitude = 1.0;
longitude = 1.0;
altitude = 1.0;
// 将经纬高转换成东北天坐标[E,N,U],前三个传入,后三个传出
geo_converter.Forward(latitude, longitude, altitude, local_E, local_N, local_U);
std::cout << "local_E: "<< local_E<< " local_N: "<<local_N << " local_U: "<< local_U << std::endl<<std::endl;

运行结果是local_E: 111297 local_N: 110569 local_U: -1935.19,也就是说移动经纬1°,对应地面上的距离为11万米多。