当前位置: 首页> 汽车> 车展 > 搜索自媒体平台_国外购买域名的网站_wix网站制作_手机优化大师官方版

搜索自媒体平台_国外购买域名的网站_wix网站制作_手机优化大师官方版

时间:2025/7/11 0:29:58来源:https://blog.csdn.net/hymn1993/article/details/147618936 浏览次数: 0次
搜索自媒体平台_国外购买域名的网站_wix网站制作_手机优化大师官方版

C++ 完全可以计算 三维空间中的 WGS84 坐标点之间的精确欧氏距离。关键是:
要先把经纬度 + 海拔 (lat, lon, alt) 转换成 ECEF(地心地固坐标系),然后计算欧氏距离即可。


✅ 使用 GeographicLib::Geocentric 实现三维距离计算(官方推荐)

#include <GeographicLib/Geocentric.hpp>
#include <cmath>using namespace GeographicLib;double Compute3DDistance(double lat1, double lon1, double alt1,double lat2, double lon2, double alt2) {const Geocentric& earth = Geocentric::WGS84();double x1, y1, z1;earth.Forward(lat1, lon1, alt1, x1, y1, z1);  // WGS84 → ECEFdouble x2, y2, z2;earth.Forward(lat2, lon2, alt2, x2, y2, z2);// 欧氏距离(单位:米)return std::sqrt((x1 - x2) * (x1 - x2) +(y1 - y2) * (y1 - y2) +(z1 - z2) * (z1 - z2));
}

✅ 安装 GeographicLib(Ubuntu)

sudo apt install libgeographic-dev

✅ 示例调用

double dist = Compute3DDistance(31.2304, 121.4737, 20.0,   // 上海市,海拔 20m39.9042, 116.4074, 80.0);  // 北京市,海拔 80m
printf("3D distance = %.2f meters\n", dist);
// 算出来是 3D distance = 1064608.92 meters

🔍 说明

  • 使用 Geocentric::Forward() 代替自己写 ECEF 转换公式,可避免误差。
  • 支持任意经纬度 + 高度(甚至负值,如海底)。

CMake Error at CMakeLists.txt:16 (find_package):By not providing "FindGeographicLib.cmake" in CMAKE_MODULE_PATH thisproject has asked CMake to find a package configuration file provided by"GeographicLib", but CMake did not find one.Could not find a package configuration file provided by "GeographicLib"with any of the following names:GeographicLibConfig.cmakegeographiclib-config.cmake

这个错误说明 GeographicLib 没有提供标准的 CMake 配置文件 (GeographicLibConfig.cmake) 或你没有正确告诉 CMake 去哪里找它。


✅ 最简解决方案(不再使用 find_package

因为 GeographicLib 在很多系统上不带 CMake 配置文件,你可以手动添加头文件和链接库路径,不需要 find_package,改成下面这样即可:


🔧 修改 CMakeLists.txt(推荐方法)

假设你是在 Ubuntu 上用 apt 安装的:

# 添加头文件路径
include_directories(/usr/include)# 链接 GeographicLib 的核心库
target_link_libraries(your_target_nameGeographic
)
  • /usr/include 是 GeographicLib 默认头文件位置(GeographicLib/Geocentric.hpp 就在那)。
  • Geographic 是实际要链接的动态库(libGeographic.so)。

✅ 验证库存在

ls /usr/lib/x86_64-linux-gnu/libGeographic.so

如果有,说明你可以直接 target_link_libraries(... Geographic)


✅ 示例完整片段

add_executable(my_example main.cpp)include_directories(/usr/include)target_link_libraries(my_exampleGeographic
)

🛠️ 如果你是从源码安装 GeographicLib

你需要告诉 CMake:

cmake .. -DGeographicLib_DIR=/your/install/path/lib/cmake/GeographicLib

或者在 CMakeLists.txt 中手动指定:

set(GeographicLib_DIR "/your/install/path/lib/cmake/GeographicLib")
find_package(GeographicLib REQUIRED)

关键字:搜索自媒体平台_国外购买域名的网站_wix网站制作_手机优化大师官方版

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: