计算两个经纬度之间的实际距离(Haversine公式)----c++

2023-11-27 08:15

本文主要是介绍计算两个经纬度之间的实际距离(Haversine公式)----c++,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

来源:https://www.open-open.com/lib/view/open1430573897802.html

原理亦可参考:https://blog.csdn.net/gaocuisheng/article/details/126060795

#include <cmath>
#define EARTH_RADIUS  6371.0;// 地球半径,单位千米static double HaverSin(double theta)
{double v = sin(theta / 2);return v * v;
}static double ConvertDegreesToRadians(double degrees)
{return degrees * M_PI / 180;
}/// <summary>/// 计算2个经纬度之间的距离/// </summary>/// <param name="from_lon">起始点经度</param>/// <param name="from_lat">起始点纬度</param>/// <param name="to_lon">目标点经度</param>/// <param name="to_lat">目标点纬度</param>/// <returns></returns>
static double TwoPointToDistance(double from_lon, double from_lat, double to_lon, double to_lat)
{// 用 haversine 公式计算球面两点间的距离。// 经纬度转换成弧度from_lon = ConvertDegreesToRadians(from_lon);from_lat = ConvertDegreesToRadians(from_lat);to_lon = ConvertDegreesToRadians(to_lon);to_lat = ConvertDegreesToRadians(to_lat);// 差值double vLon = std::abs(from_lon - to_lon);double vLat = std::abs(from_lat - to_lat);// h is the great circle distance in radians, great circle 就是一个球体上的切面,它的圆心即是球心的一个周长最大的圆。double h = HaverSin(vLat) + cos(from_lat) * cos(to_lat) * HaverSin(vLon);auto sh = sqrt(h);double distance = 2 * (asin(sqrt(h))) * EARTH_RADIUS;// 将距离转换为米distance *= 1000;return distance;
}int main() {// 39.94607,116.32793  31.24063,121.42575std::cout << TwoPointToDistance(39.94607, 116.32793, 31.24063, 121.42575) << " meters" << std::endl;return 0;
}

这篇关于计算两个经纬度之间的实际距离(Haversine公式)----c++的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/427354

相关文章

C++右移运算符的一个小坑及解决

《C++右移运算符的一个小坑及解决》文章指出右移运算符处理负数时左侧补1导致死循环,与除法行为不同,强调需注意补码机制以正确统计二进制1的个数... 目录我遇到了这么一个www.chinasem.cn函数由此可以看到也很好理解总结我遇到了这么一个函数template<typename T>unsigned

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

Python实现精确小数计算的完全指南

《Python实现精确小数计算的完全指南》在金融计算、科学实验和工程领域,浮点数精度问题一直是开发者面临的重大挑战,本文将深入解析Python精确小数计算技术体系,感兴趣的小伙伴可以了解一下... 目录引言:小数精度问题的核心挑战一、浮点数精度问题分析1.1 浮点数精度陷阱1.2 浮点数误差来源二、基础解决

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2

深入解析C++ 中std::map内存管理

《深入解析C++中std::map内存管理》文章详解C++std::map内存管理,指出clear()仅删除元素可能不释放底层内存,建议用swap()与空map交换以彻底释放,针对指针类型需手动de... 目录1️、基本清空std::map2️、使用 swap 彻底释放内存3️、map 中存储指针类型的对象

Python文本相似度计算的方法大全

《Python文本相似度计算的方法大全》文本相似度是指两个文本在内容、结构或语义上的相近程度,通常用0到1之间的数值表示,0表示完全不同,1表示完全相同,本文将深入解析多种文本相似度计算方法,帮助您选... 目录前言什么是文本相似度?1. Levenshtein 距离(编辑距离)核心公式实现示例2. Jac

C++ STL-string类底层实现过程

《C++STL-string类底层实现过程》本文实现了一个简易的string类,涵盖动态数组存储、深拷贝机制、迭代器支持、容量调整、字符串修改、运算符重载等功能,模拟标准string核心特性,重点强... 目录实现框架一、默认成员函数1.默认构造函数2.构造函数3.拷贝构造函数(重点)4.赋值运算符重载函数

Python中yield的用法和实际应用示例

《Python中yield的用法和实际应用示例》在Python中,yield关键字主要用于生成器函数(generatorfunctions)中,其目的是使函数能够像迭代器一样工作,即可以被遍历,但不会... 目录python中yield的用法详解一、引言二、yield的基本用法1、yield与生成器2、yi

C++ vector越界问题的完整解决方案

《C++vector越界问题的完整解决方案》在C++开发中,std::vector作为最常用的动态数组容器,其便捷性与性能优势使其成为处理可变长度数据的首选,然而,数组越界访问始终是威胁程序稳定性的... 目录引言一、vector越界的底层原理与危害1.1 越界访问的本质原因1.2 越界访问的实际危害二、基

Python中经纬度距离计算的实现方式

《Python中经纬度距离计算的实现方式》文章介绍Python中计算经纬度距离的方法及中国加密坐标系转换工具,主要方法包括geopy(Vincenty/Karney)、Haversine、pyproj... 目录一、基本方法1. 使用geopy库(推荐)2. 手动实现 Haversine 公式3. 使用py