• GPS两点的距离


    目前手头的一个项目要用到GPS地理定位信息,很自然的就需要知道两个地点之间的距离,于是上网找了一下,同样自然的就有一些算法贴出来。。(网络真是帮了大忙,省得我再去翻几何书自己研究算法了!公式早都忘光了。)

    算法如下:(我已经把它转换为C++代码)

    namespace gps
    {
    #include <math.h>

     // 计算弧度
     double rad(double d)
     {
      const double PI = 3.1415926535898;
      return d * PI / 180.0;
     }

     // 从两个gps坐标点(经纬度)获得两点的直线距离,单位是米
     int CalcDistance(float fLati1, float fLong1, float fLati2, float fLong2)
     {
      const float EARTH_RADIUS = 6378.137;

      double radLat1 = rad(fLati1);
      double radLat2 = rad(fLati2);
      double a = radLat1 - radLat2;
      double b = rad(fLong1) - rad(fLong2);
      double s = 2 * asin(sqrt(pow(sin(a/2),2) + cos(radLat1)*cos(radLat2)*pow(sin(b/2),2)));
      s = s * EARTH_RADIUS;
      s = (int)(s * 10000000) / 10000;
      return s;
     }
    }

    需要对此算法的可靠性和准确性做个大致的验证,于是,打开GoogleEarth!(想想没有GoogleEarth的日子可怎么办?)

    随便测试了三次,分别找了各种特点的3对点,因为要考虑一下对于比如“同一横坐标”这种情形测试一下。

    结果是:这个算法还是相当的准确的,误差在千分之几的样子,而且误差很有可能是我的操作带来的,虽然我已经尽量减小操作的影响。还有一点,此算法倒数第二行代码原来是C#的Math.Round()函数调用,我没有仔细研究区别,直接改为了“s = (int)(s * 10000000) / 10000;”,这样也会带来误差。

    抓图看一下对比:

    这是从googleearth上用标尺测量两个地点之间的距离:结果是4317.14米。

     

    把这两个点的坐标代入算法进行计算,结果如下:

     

    真tnnd准! ^^ 或许,googleearth也是用的同样算法??

  • 相关阅读:
    3.STM32复位系统
    3.CM3内核架构-寄存器
    2.STM32启动文件
    java线程池
    java多线程
    动态规划(dynamic programming)(二、最优子问题与重叠子问题,以及与贪心的区别)
    SOAP协议
    动态规划(dynamic programming)(一、简介,举例)
    红黑树-RBT(二、基本操作之插入)
    红黑树-RBT(二、基本操作之左旋)
  • 原文地址:https://www.cnblogs.com/fuhaots2009/p/3481552.html
Copyright © 2020-2023  润新知