zoukankan      html  css  js  c++  java
  • 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也是用的同样算法??

  • 相关阅读:
    Struts2文件上传
    Struts2文件下载
    使用ajax()方法和后台交互
    简单的写数据到txt文件
    JPA初体验(使用Hibernate4实现)
    动态删除ArrayList中的元素
    MySQL5.5.15 源码 cmake 安装
    HeartBeat启动关闭mysqld服务的脚本修改
    MySQL MyISAM 转 Innodb
    2038/01/19 11:14:07 MySQL
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9410103.html
Copyright © 2011-2022 走看看