zoukankan      html  css  js  c++  java
  • [转载]通过两个点的经纬度计算距离

    从google maps的脚本里扒了段代码,没准啥时会用上。大家一块看看是怎么算的。

    private const double EARTH_RADIUS = 6378.137;
    private static double rad(double d)
    {
       return d * Math.PI / 180.0;
    }

    public static double GetDistance(double lat1, double lng1, double lat2, double lng2)
    {
       double radLat1 = rad(lat1);
       double radLat2 = rad(lat2);
       double a = radLat1 - radLat2;
       double b = rad(lng1) - rad(lng2);
       double s = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(a/2),2) + 
        Math.Cos(radLat1)*Math.Cos(radLat2)*Math.Pow(Math.Sin(b/2),2)));
       s = s * EARTH_RADIUS;
       s = Math.Round(s * 10000) / 10000;
       return s;
    }


    source: http://www.cnblogs.com/panyee/archive/2006/07/04/442771.html

     

    利用google map的经纬度到距离计算的js脚本,将球面弧长的公式给还原出来(估计这个公式是经过部分修正的),还原出来的公式如下:

    [转载]通过两个点的经纬度计算距离

    对上面的公式解释如下:

    公式中经纬度均用弧度表示,角度到弧度的转化应该是很简单的了吧,若不会,依然请参考这个这个经纬度算距离的工具

    Lat1 Lng1 表示A点纬度和经度,Lat2 Lng2 表示B点纬度和经度(不要弄错顺序);

    a = Lat1 – Lat2 为两点纬度之差  b = Lng1 -Lng2 为两点经度之差;

    6378.137为地球半径,单位为公里;

    计算出来的结果单位为公里;


    matlab实现

     

     

    function d = distance(lat1, lng1, lat2, lng2)

    EARTH_RADIUS = 6378.137;

    a = lat1*pi/180 - lat2*pi/180;

    b = lng1*pi/180 - lng2*pi/180;

    d = EARTH_RADIUS*2*asin(sqrt(sin(a/2)^2) + cos(lat1*pi/180)*cos(lat2*pi/180)*sin(b/2)^2);

  • 相关阅读:
    dubbo学习小计
    学习java虚拟机
    学习java虚拟机
    学习java虚拟机
    学习java虚拟机
    学习设计模式
    学习设计模式
    学习设计模式
    mybatis从入门到精通(五) sqlSession API的使用
    mybatis从入门到精通(四) 动态SQL
  • 原文地址:https://www.cnblogs.com/gisalameda/p/12840539.html
Copyright © 2011-2022 走看看