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

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

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

cpp 复制代码
#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.42575
    std::cout << TwoPointToDistance(39.94607, 116.32793, 31.24063, 121.42575) << " meters" << std::endl;

    return 0;
}
相关推荐
KING BOB!!!8 小时前
Leetcode高频 SQL 50 题(基础版)题目记录
sql·mysql·算法·leetcode
源力祁老师8 小时前
深入分析 json2(新)与标准的 jsonrpc的区别
开发语言
小wanga8 小时前
C++知识
java·开发语言·c++
学渣676568 小时前
文件传输工具rsync|rust开发环境安装|Ascend实验相关命令
开发语言·后端·rust
深思慎考8 小时前
LinuxC++项目开发日志——高并发内存池(1-定长内存池)
linux·c++
木心爱编程9 小时前
C++容器内存布局与性能优化指南
开发语言·c++·性能优化
我是渣哥9 小时前
Java String vs StringBuilder vs StringBuffer:一个性能优化的探险故事
java·开发语言·jvm·后端·算法·职场和发展·性能优化
THMAIL9 小时前
机器学习从入门到精通 - 机器学习调参终极手册:网格搜索、贝叶斯优化实战
人工智能·python·算法·机器学习·支持向量机·数据挖掘·逻辑回归
你我约定有三9 小时前
java--写在 try 中的创建连接
java·开发语言
咔咔咔的9 小时前
3446. 按对角线进行矩阵排序
c++