以下内容适合初学者,我用来评估跑路径跟踪结果的代码。

简单的看了其他人的博客,基本都是用半正矢公式(Haversine formula)计算距离的。

其中,a=lat1-lat2(经度差);b=lon1-lon2(纬度差);

计算函数如下,找半天不知道地球半径该取多少,但是实际算起来差距不明显,反正都用这个算法了,对精度要求也不高。

#include <iostream>
#include <math.h>
using namespace std;
#define PI  3.1415926535897932384626
#define R0 6378137//地球半径m
#define D2R    (PI/180.0)    
#define R2D    (180.0/PI)

先定义一些要用到数据。下面是计算两点距离的公式,经纬度感觉不用转换成度分秒表示:

double Getdistance(double Lon1, double Lat1, double Lon2, double Lat2)
{//半正矢公式(Haversine formula):
    //经纬度先转换为角度制 rad
    double rLon1 = Lon1 * D2R;
    double rLon2 = Lon2 * D2R;
    double rLat1 = Lat1 * D2R;
    double rLat2 = Lat2 * D2R;
    double a = rLat1 - rLat2;
    double b = rLon1 - rLon2;
    double below_sqrt = sin(a / 2) * sin(a / 2) + cos(rLat1) * cos(rLat2) *sin(b / 2) * sin(b / 2);
    double Long = 2 * asin(sqrt(below_sqrt)) * R0;
    //tip:asin的取值范围是[-pi/2,pi/2]
    return Long;
}

看别人的思路用了海伦公式计算面积,然后当成平面算距离,不过这适用于近距离的3个点,对精度要求也不高的情况。(同样只考虑了一种情况,三点构成锐角三角形)

经纬坐标系中求点到线段距离的方法_ufoxiong21的博客-CSDN博客_经纬度点到直线距离

double Halun(double aa ,double bb,double cc)
{
    double pp = (aa + bb + cc) / 2;
    double S = sqrt(pp*(pp-aa)*(pp-bb)*(pp-cc));//面积
    return S;
}

下面为点到线段距离的函数,lat1,lon1,lat2, lon2为两个构成线段的点,lat3,lon3为要计算的到前面的线段距离的点。

double GetDotToLine(double lon1, double  lat1, double lon2, double lat2, double lon3, double lat3)
{
    double d1 = Getdistance(lon1, lat1, lon2, lat2);//起始点距离
    cout << "起始点距离=" << d1 << endl;
    double a = d1;
    double b = Getdistance(lon1, lat1, lon3, lat3);
    cout << "点到起点距离=" << b << endl;
    double c = Getdistance(lon2, lat2, lon3, lat3);
    cout << "点到终点距离=" << c << endl;
    double PointToLine = 2 * Halun(a, b, c) / a;
    cout << "点到直线距离=" << PointToLine << endl;
    return PointToLine;
}

主函数如下

int main() {
    double lon1, lon2, lon3;
    double lat1, lat2, lat3;
    lat1 = 30.885327;
    lat2 = 30.884438;
    lon1 = 120.072081;
    lon2 = 120.072986;//两个要构成的线段的点的坐标

lat3 = 30.884991;
    lon3 = 120.072346;//第三个点的坐标

double d = GetDotToLine(lon1, lat1, lon2, lat2, lon3, lat3);

system("pause");
    return 0;
}

在VS2019下运行,距离单位全部是m,要计算两点距离,直接在main调用Getdistance(lon1, lat1, lon2, lat2);就行,测试结果如下:

根据经纬度计算两点之间的距离、点到直线的距离相关推荐

  1. php 如何根据经纬度计算距离,小程序实例:如何根据经纬度计算两点之间的距离(代码)...

    本篇文章给大家带来的内容是关于小程序实例:如何根据经纬度计算两点之间的距离(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助.//计算两点位置距离 getDistance: fun ...

  2. 微信小程序通过经纬度计算两点之间距离

    小程序中通过经纬度计算两点之间的距离km 1.拾取两地经纬度坐标 . data:{//当前定位位置latitude: null,longitude: null,// 目的地坐标latitude2: 1 ...

  3. 通过经纬度计算两点之间的距离的公式

    通过经纬度计算两点之间距离的常用公式如下: 设点 A 的纬度为 $lat_A$,经度为 $lon_A$,点 B 的纬度为 $lat_B$,经度为 $lon_B$,则两点之间的距离 $d$ 为: $d ...

  4. Java根据经纬度计算两点之间的距离

    1. 前言   在我们平时使用美团,饿了么等app进行订餐,或者使用猫眼进行订电影票的时候,都有一个距离的排序,表明该家店距离我们当前的位置,这种基于地理位置的服务,统一被称为LBS(Location ...

  5. 根据经纬度计算两点之间的距离(单位米)

    package com.xiao.map;// 算法工程师!! public class MapUtils {private static double rad(double d) {return d ...

  6. 地理大圆距离 C语言,通过经纬度计算两点之间的距离

    2019独角兽企业重金招聘Python工程师标准>>> 项目里有一个需求是计算两台机器之间的距离,有了这两台机器的经纬度,距离就很好计算了. 有一个 球面余弦定律 可以用来可以计算球 ...

  7. php根据经纬度计算两点之间的距离

    之前我们已经说过了如何根据IP获取当前用户的经纬度,不会获取的小童鞋可以去看一下之前的文章. 这回我们将功能再延伸一下,根据将纬度计算两点之间的距离. 废话不多说,直接上码: function get ...

  8. 关于知道两点求直线方程 求点到直线的距离

    已知直线上的两点P1(X1,Y1) P2(X2,Y2), P1 P2两点不重合.则直线的一般式方程AX+BY+C=0中,A B C分别等于: A = Y2 - Y1 B = X1 - X2 C = X ...

  9. 根据经纬度计算两点之间的距离---google计算公式推导

    经纬度常用词   经度 longitude, 维度 latitude 图和解读来源网上资料,自我也进行一遍推导,有些地方会加入自己的一些理解,重新温故了之前学的三角函数,度,弧度,弧长的概念,记忆模糊 ...

最新文章

  1. 深度学习中图片数据增强方法
  2. Windows 系统安装Docker Compose 步骤
  3. hdu5386(暴力)
  4. 使用Dottrace跟踪代码执行时间
  5. PHP的.htaccess
  6. linux运行apktool签名,解决Linux中使用ApkTool遇到问题
  7. 如何有效实现软件的需求管理(1)
  8. 邮件服务器篇:杀毒引擎选择论据
  9. 从Face ID说起,浅析人脸识别之刷脸技术
  10. 会优化,你真的会优化吗?其实你可能真的缺少一份理解【数据库篇】
  11. 现在需要在input框输入年月yyyymm的正则_税务师报名时间、考试报名官网2021年安排_税务师...
  12. 计算机投影仪的作用是什么,投影电脑
  13. 计算机求数值公式,excel表格常用技巧大全/EXCEL表格常用的计算公式
  14. 阿里巴巴校招内推简历筛选方案
  15. 企鹅号快速赚钱方法?企鹅号收益情况?
  16. 怎样用html设置文档格式,Dreamweaver使用CSS样式表设置网页文本格式
  17. paddle.paramattr转换为torch框架下算法
  18. AXI - 4KB边界
  19. 微信小程序实现横向滚动文字
  20. python print空格占位_python的占位格式符 %

热门文章

  1. 网站浏览计数器html,Web浏览计数器的设计应用
  2. 口音英语识别能力评测,你的AI升级了吗?
  3. rm -rfi 防止误删除数据
  4. 2023年第一批拟授予信息系统建设和服务能力贯标企业名单公示
  5. python技巧:删除文件夹里子文件夹指定文件以外的文件
  6. 参饵光纤光源matlab,模块化掺铒光纤宽带光源驱动电路设计
  7. docker安装nginx(神坑记录)
  8. 基于高德POI搜索的地址类型判断
  9. Tim Yang:后端技术这一年
  10. antd 组件库upload使用时onChange只会执行到 uploading状态 解决办法