当前位置: 首页 > news >正文

C++ 如何计算两个gps 的距离

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)

相关文章:

C++ 如何计算两个gps 的距离

C 完全可以计算 三维空间中的 WGS84 坐标点之间的精确欧氏距离。关键是&#xff1a; 要先把经纬度 海拔 (lat, lon, alt) 转换成 ECEF&#xff08;地心地固坐标系&#xff09;&#xff0c;然后计算欧氏距离即可。 ✅ 使用 GeographicLib::Geocentric 实现三维距离计算&#xf…...

通过全局交叉注意力机制和距离感知训练从多模态数据中识别桥本氏甲状腺炎|文献速递-深度学习医疗AI最新文献

Title 题目 Hashimoto’s thyroiditis recognition from multi-modal data via globalcross-attention and distance-aware training 通过全局交叉注意力机制和距离感知训练从多模态数据中识别桥本氏甲状腺炎 01 文献速递介绍 桥本氏甲状腺炎&#xff08;HT&#xff09;&a…...

网络原理—应用层和数据链路层

IP协议 ⭐IP协议报头上面的知识 地址管理 使用一套地址体系(IP协议)&#xff0c;来描述互联网上每个是被所在的位置。 IP数据报的长度(拆包和组包) 可以对CUP进行拆包&#xff0c;可以多个IP报头装一个CUP数据。 8位生存时间(TTL) 这里的时间不是传统意义上的&#xff0c;…...

Cell Res | Stereo-seq揭示人类肝癌浸润区促进肝细胞-肿瘤细胞串扰、局部免疫抑制和肿瘤进展

有同学给了一篇23年的空间文章&#xff0c;研究的一个核心概念是肿瘤边缘的"侵袭区"&#xff0c;文章中定义的是以肿瘤边缘为中心的500微米宽的区域&#xff0c;这里是肿瘤细胞侵袭和转移的活跃前沿&#xff0c;包含复杂的细胞成分及独特的分子特征&#xff0c;存在免…...

Mybatis-plus代码生成器的创建使用与详细解释

Mybatis-plus代码生成器的创建使用与详细解释 一、代码生成器概述 1. 定义(什么是代码生成器) 在软件开发过程中&#xff0c;存在大量重复性的代码编写工作&#xff0c;例如实体类、Mapper 接口、Service 接口及实现类等。代码生成器就是为了解决这类问题而诞生的工具。MyBa…...

swagger2升级至openapi3的利器--swagger2openapi

背景&#xff1a; 因为项目需要升级JDK&#xff0c;涉及到swagger2升级至openapi3的情况。由于swagger 2和openapi 3的语法差距太大&#xff0c;需要对yaml进行升级。无奈单个yaml文件的内容太大&#xff0c;高至4万多行&#xff0c;手动进行语法的转换肯定是不可能了&#xff…...

私有云与虚拟化攻防2(OpenStack渗透场景,大部分云平台都是基于此进行二次开发)

虚拟化和私有云的一些区别 虚拟化只是简单资源虚拟化,一虚多私有云除了能够实现虚拟化以外更重要的是服务自助化、自动化什么是Openstack OpenStack是一个开源的云计算管理平台项目,是属于基础设施即服务(IaaS),是一个云操作系统。 Nova(控制 ) 提供计算资源,虚拟机、容…...

前缀和 后缀和 --- 寻找数组的中心下标

题目链接 寻找数组的中心下标 给你一个整数数组 nums &#xff0c;请计算数组的 中心下标 。 数组 中心下标 是数组的一个下标&#xff0c;其左侧所有元素相加的和等于右侧所有元素相加的和。 如果中心下标位于数组最左端&#xff0c;那么左侧数之和视为 0 &#xff0c;因为…...

关于插值和拟合(数学建模实验课)

文章目录 1.总体评价2.具体的课堂题目 1.总体评价 学校可以开设这个数学建模实验课程&#xff0c;我本来是非常的激动地&#xff0c;但是这个最后的上课方式却让我高兴不起哦来&#xff0c;因为老师讲的这个内容非常的简单&#xff0c;而且一个上午的数学实验&#xff0c;基本…...

深入学习解读:《数据安全技术 数据分类分级规则》【附全文阅读】

该文详细阐述了数据安全技术的数据分类分级规则,内容分为基本原则、数据分类规则、数据分级规则及数据分类分级流程四大部分。 基本原则强调科学实用、动态更新、就高从严及53原则(虽表述不清,但可理解为多重原则的结合),同时要求边界清晰、点面结合。 数据分类规…...

Windows环境下用pyinstaller将python脚本编译为exe文件

下载 https://pypi.org/project/pyinstaller/#filespyinstaller-6.13.0-py3-none-win_arm64.whl 安装 cmd命令行中执行&#xff1a;pip install pyinstaller-6.13.0-py3-none-win_amd64.whl得先安装pythonpip若找不到命令&#xff0c;需要加到环境变量 测试 pyinstaller --ve…...

每日算法-250429

每日 LeetCode 题解 (2025-04-29) 大家好&#xff01;这是今天的 LeetCode 刷题记录&#xff0c;主要涉及几道可以使用贪心策略解决的问题。 2037. 使每位学生都有座位的最少移动次数 题目描述: 思路 贪心 解题过程 要使总移动次数最少&#xff0c;直观的想法是让每个学生…...

Go语言Context机制深度解析:从原理到实践

一、Context概述 Context&#xff08;上下文&#xff09;是Go语言并发编程的核心机制之一&#xff0c;主要用于在goroutine之间传递取消信号、截止时间和其他请求范围的值。Google在Go 1.7版本中将其引入标准库&#xff0c;现已成为处理并发控制和超时的标准方案。 核心作用 …...

大数据学习(115)-hive与impala

&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一…...

php学习笔记(全面且适合新手)

以下是专为 PHP 7.4 初学者设计的全面学习文档&#xff0c;涵盖基础语法、细节语法和进阶语法&#xff0c;结合 PHP 7.4 新特性与实战案例&#xff0c;帮助系统掌握 PHP 开发&#xff1a; 为什么特地做7.4的笔记而不做8的&#xff1f;因为公司用的7.4&#xff0c;哈哈 一、基…...

Nginx核心功能

目录 一&#xff1a;基于授权的访问控制 1&#xff1a;基于授权的访问控制简介 2&#xff1a;基于授权的访问控制步骤 &#xff08;1&#xff09;使用htpasswd 生成用户认证文件 &#xff08;2&#xff09;修改密码文件权限为400&#xff0c;将所有者改为nginx&#xff0c;…...

基于Spring Boot 电商书城平台系统设计与实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...

流量控制机制

基于信用&#xff08;credit-based&#xff09;的流量控制机制 在基于信用的流量控制中&#xff0c;每个下游路由器都维护了一个信用计数器&#xff0c;用于跟踪其可用的缓冲空间。当一个数据包&#xff08;或者说flit&#xff09;被成功接收后&#xff0c;下游路由器会向上游…...

ImageDataGenerator ()用法简介

ImageDataGenerator 是 Keras 中用于图像数据增强和预处理的工具。它允许你实时生成增强的图像数据,这在训练深度学习模型时特别有用,因为它可以帮助提高模型的泛化能力。 以下是 ImageDataGenerator 的一些常见用法和参数: 基本用法 ‌导入模块‌ from keras.preprocessi…...

【Linux】服务自启动设置的方式

关于服务自启动设置的方式,本文将介绍两种方法。分别是systemd服务单元文件的配置和起容器的方式。 目录 1 systemd服务单元文件的配置 [Unit] 部分 [Service] 部分 [Install] 部分 2 docker 1 systemd...

Wi-SUN与LoRa和NB-IoT通信技术的对比

LoRa和NB-IoT也都是LPWAN&#xff08;低功耗广域网&#xff09;的一种&#xff0c;不同的是他们分处在不同的频段。分为授权频段和非授权频段。&#xff08;NB-IoT&#xff09;其采用现有的3G、4G网络&#xff0c;需要通过电信运营商申请才可以使用。使用非授权频段的技术主要为…...

科研入门规划

作为研0学生&#xff0c;建议采取 ​​“边打基础边探索&#xff0c;逐步深入”​​ 的策略。 ​​&#x1f4cc; 阶段一&#xff1a;先建立基础框架&#xff08;前1-3个月&#xff09;​​ ​​1. 快速搭建知识框架​​ ​​目标​​&#xff1a;了解领域全貌&#xff0c;明…...

《P3143 [USACO16OPEN] Diamond Collector S》

题目描述 奶牛 Bessie 一直喜欢闪闪发光的物体&#xff0c;她最近在业余时间开始了一项爱好——挖掘钻石&#xff01;她收集了 N 颗大小各不相同的钻石&#xff08;N≤50,000&#xff09;&#xff0c;并希望将它们中的一部分放在谷仓里的两个展示柜中展示。 由于 Bessie 希望…...

纯C协程框架NtyCo

原文是由写的&#xff0c;写的真的很好&#xff0c;原文链接&#xff1a;纯c协程框架NtyCo实现与原理-CSDN博客 1.为什么会有协程&#xff0c;协程解决了什么问题&#xff1f; 网络IO优化 在CS&#xff0c;BS的开发模式下&#xff0c;服务器的吞吐量是一个受关注的参数&#x…...

16、路由守卫:设置魔法结界——React 19 React Router

一、魔法结界的本质 "路由守卫是霍格沃茨城堡的隐身斗篷&#xff0c;在时空裂隙中精准控制维度跃迁&#xff01;" 魔法部交通司官员挥舞魔杖&#xff0c;React Router 的嵌套路由在空中交织成星轨矩阵。 ——基于《国际魔法联合会》第7号时空协议&#xff0c;路由守…...

try catch + throw

异常 java语言中将&#xff0c;将程序执行中发生的不正常情况称为“异常”。&#xff08;1&#xff09;Error&#xff1b;JVM系统内部错误&#xff0c;资源耗尽严重。&#xff08;2&#xff09;Execption&#xff1a;运行时异常&#xff0c;编译时异常。 异常体系图 异常处理…...

【东枫电子】AI-RAN:利用人工智能驱动的计算基础设施变革 RAN

太原市东枫电子科技有限公司&#xff0c;翻译 文章目录 摘要一、引言二、AI-RAN 的用例三、AI-RAN 的需求与赋能因素四、参考架构设计五、AI-RAN 概念验证六、结论与未来工作REFERENCES 摘要 无线接入网络 (RAN) 格局正在经历从传统的以通信为中心的基础设施向融合计算通信平台…...

【Linux】第十四章 提高命令行效率

1. #!/bin/bash 是什么意思&#xff1f; #!/bin/bash 出现在 shell 脚本第一行的开头&#xff0c;意味着使用bash shell 命令解释器来执行脚本。 2. PATH变量有什么重要作用&#xff1f; PATH 的作用是告诉操作系统在哪些目录下寻找需要运行命令程序&#xff0c;从而不需要输…...

Lucene中不同搜索类型的使用方法、基本概念、应用场景、差异对比,并通过表格进行总结

为了详细说明Lucene中不同搜索类型的使用方法、差异对比&#xff0c;并通过表格进行总结&#xff0c;我们首先需要理解每种搜索类型的基本概念和应用场景。以下是针对每种搜索类型的简要说明、差异对比以及最终的表格总结。 1. 多字段搜索&#xff08;MultiFieldQueryParser&am…...

【自然语言处理与大模型】LangChain大模型应用框架入门①

单独为LangChain花大概五篇文章的内容&#xff0c;来和大家一起入门LangChain&#xff0c;这是第一篇重点放在&#xff0c;了解 LangChain 是什么、它的主要用途以及核心模块。了解 LangChain 的设计哲学&#xff1a;链式调用、模块化、可扩展性。安装并学习其中的一个组件&…...

OpenJDK 1.8中-Xloggc参数下GC日志覆盖与追加模式深度解析

#作者&#xff1a;邓伟 文章目录 一、引言二、覆盖模式详解2.1 默认覆盖行为2.2 覆盖模式的适用场景 三、追加模式&#xff08;日志轮换&#xff09;深度解析3.1 追加模式的实现&#xff1a;日志轮换配置3.2 日志轮换的底层逻辑3.3 追加模式&#xff08;日志轮换&#xff09;适…...

【Java面试笔记:进阶】28.谈谈你的GC调优思路?

在JVM的GC调优中,没有放之四海而皆准的方案,需要结合业务场景、硬件资源和GC特性进行系统性分析。 1.GC调优的基本思路 1.明确调优目标 内存效率(Footprint):减少JVM的内存占用(如边缘设备部署)。低延迟(Latency):降低GC导致的停顿时间(如API网关要求99.9%请求延迟…...

C#中winform窗体如何捕获键盘按键事件

马工撰写的年入30万+C#上位机项目实战必备教程(点击下方链接即可访问文章目录) 1、《C#串口通信从入门到精通》 2、《C#与PLC通信从入门到精通 》 3、《C# Modbus通信从入门到精通》 4、《C#Socket通信从入门到精通 》 5、《C# MES通信从入门到精通》 6、《winform控件从入门…...

USB 网卡——RNDIS 控制消息流程

文章目录 RNDIS 控制消息流程控制写设备回复控制读注意事项RNDIS 控制消息流程 RNDIS 控制消息流程分为三步 控制写(控制端点 0)设备回复(中断端点)控制读(控制端点 0)数据抓包如下 控制写 设备的控制通道是通过 USB 控制端点完成的。 从主机到设备的控制消息作为 SE…...

【AI News | 20250429】每日AI进展

AI Repos 1、aci ACI.dev是一个开源基础设施层&#xff0c;旨在为AI智能体的工具使用提供支持。它通过统一的模型-上下文-协议&#xff08;MCP&#xff09;服务器或轻量级Python SDK&#xff0c;使智能体能够以感知意图的方式访问600多种工具&#xff0c;并具备多租户认证、细…...

JavaScript 中深拷贝浅拷贝的区别?如何实现一个深拷贝?

一、区别&#xff1a;像“复印文件” vs “创建副本文件” 1. 浅拷贝&#xff08;Shallow Copy&#xff09; 动作&#xff1a;只复制文件的第一页&#xff0c;其他页用“贴标签”指向原文件。结果&#xff1a; 修改第一层属性不影响原对象&#xff0c;但修改嵌套对象会同时改…...

<四级词汇>2025.4.29

compact---所有的人都拍他 越拍越紧 ---紧凑的 impact 往里拍他 -- 碰撞会产生影响 --- 碰撞 影响 influence -- 影响 flue -- 流感 influenza -- 流感 fluent --- fly enter 鸟儿流利飞进屋子 --- 流利的 fluently affluent --- 一再地生活的很流畅 -- 富裕的 …...

mmap核心原理和用途及其与内存映射段的关系

mmap 是 Linux/Unix 系统中的一个关键系统调用&#xff0c;全称是 Memory Map&#xff08;内存映射&#xff09;。它的核心功能是将 文件、设备或匿名内存 直接映射到进程的虚拟地址空间&#xff0c;从而实现高效的内存访问和操作。以下是其核心原理和用途的详细说明&#xff1…...

深入理解 Web Service:原理、组件与核心技术详解

目录 前言1 Web Service 概述2 Web Service 的三大核心角色2.1 服务提供者&#xff08;Service Provider&#xff09;2.2 服务请求者&#xff08;Service Consumer&#xff09;2.3 服务注册中心&#xff08;Service Registry&#xff09; 3 Web Service 核心技术详解3.1 WSDL&a…...

【动态导通电阻】GaN功率器件中动态导通电阻退化的机制、表征及建模方法

2019年,浙江大学的Shu Yang等人在《IEEE Journal of Emerging and Selected Topics in Power Electronics》上发表了一篇关于GaN(氮化镓)功率器件动态导通电阻(Dynamic On-Resistance, RON)的研究论文。该文深入探讨了GaN功率器件中动态导通电阻退化的机制、表征方法、建模…...

AWS SQS 队列策略配置指南:常见错误与解决方案

在 AWS 云服务中,Simple Queue Service (SQS) 是一种完全托管的消息队列服务,广泛应用于分布式系统组件间的解耦。为了确保队列的安全访问,正确配置队列策略至关重要。本文将详细介绍 SQS 队列策略的配置方法,常见错误及其解决方案。 SQS 队列策略基础 SQS 队列策略是基于…...

【后端】【Docker】 Docker 动态代理 取消代理完整脚本合集(Ubuntu)

&#x1f680; Docker 动态代理 & 取消代理完整脚本合集(Ubuntu) 一、动态设置 Docker 代理脚本 支持自定义输入代理地址和端口&#xff01; &#x1f4c4; 脚本内容&#xff08;保存为 set_docker_proxy.sh&#xff09; #!/bin/bash# 读取用户输入 read -p "请输入…...

Java基础学习内容大纲

Java基础学习内容大纲 第一阶段:建立编程思想 ​ Java概述:如何快速学习Java技术、Java历史、Java特点、Sublime、Java运行机制、JDK、转义字符、Java开发规范、Java API ​ 变量:数据类型、变量基本使用、数据类型转换 ​ 运算符:运算符介绍、算数运算符、关系运算符、…...

[USACO08DEC] Hay For Sale S Java

import java.util.*;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int c sc.nextInt(); // 背包容量int h sc.nextInt(); // 物品数量int[] v new int[h 1];for (int i 1; i < h; i) v[i] sc.nextInt();int[] dp …...

碰到的 MRCPv2 串线以及解决思路

最近碰到了一个朋友的 MRCPv2 串线&#xff0c;表现大约是&#xff1a; fs1 和 fs2 同时发到 mrcp server 的同一个 rtp 端口 目前尚不清楚 mrcp server 是否能避免这种情况&#xff08;其实是有思路的&#xff0c;接收到 rtp 包时检查网络地址和网络端口跟 sip 协商的是否一…...

AI正当时,国内AI HR领先厂商易路如何从“单点突破”到“全面融合”

所谓AI HR‌&#xff0c;是指将人工智能&#xff08;AI&#xff09;技术&#xff08;如机器学习、自然语言处理、大数据分析等&#xff09;应用于人力资源管理的各个环节&#xff0c;以提升效率、优化决策并改善员工体验。典型场景有&#xff1a; 在招聘、考勤、薪酬计算等重复…...

MCP 哪家强?深度分析 Cline、Cursor、Trae、Coze 四大平台

想象一下&#xff1a;你只需一句话&#xff0c;AI就能自动抓取GitHub issue、生成代码、调试UI&#xff0c;甚至帮你写博客发到Substack&#xff01;这不是科幻&#xff0c;而是**Model Context Protocol (MCP)**的现实。MCP作为AI与工具交互的“通用语言”&#xff0c;自2024年…...

【最新 MCP 战神手册 09】利用资源和提示增强上下文

文章目录 1. 开始啦!2. 第一部分:通过资源解锁应用数据3. 第二部分:用提示引导 AI4. 第三部分:高效上下文管理策略1. 开始啦! 在上一章中,我们深入探讨了 MCP 工具——这些组件使得 AI 模型能够执行各种操作。然而,操作很少在真空中发生。为了让 AI 智能地行动,它需要…...

解决vue3 路由query传参刷新后数据丢失的问题

前言&#xff1a;在页面刷新的时候&#xff0c;路由query数据会被清空&#xff0c;网上很多方法说query传参可以实现&#xff0c;反正我是没有实现 思路&#xff1a;将数据保存到本地&#xff0c;通过 “ &#xff1f;” 进行判断是否有数据&#xff0c;页面销毁的时候删除本地…...

VUE篇之树形特殊篇

根节点是level:1, level3及其子节点有关联&#xff0c;但是和level2和他下面的子节点没有关联 思路&#xff1a;采用守护风琴效果&#xff0c;遍历出level1和level2级节点&#xff0c;后面level3的节点&#xff0c;采用树形结构进行关联 <template><div :class"…...