【问题标题】:Calculate distance between 2 GPS coordinates计算2个GPS坐标之间的距离
【发布时间】:2010-09-26 19:42:00
【问题描述】:

如何计算两个 GPS 坐标之间的距离(使用纬度和经度)?

【问题讨论】:

  • 这个算法被称为Great Circle distance
  • @GregHewgill,那篇文章的第一句话说“这篇文章是关于球体上的最短距离”。即显然不适用于 GPS 坐标。

标签: math geolocation geometry latitude-longitude geography


【解决方案1】:

Unity 版本 C#

Haversine 算法。

public float Distance(float lat1, float lon1, float lat2, float lon2)
{
    var earthRadiusKm = 6371;

    var dLat = (lat2 - lat1) * Mathf.Rad2Deg;
    var dLon = (lon2 - lon1) * Mathf.Rad2Deg;

    var a = Mathf.Sin(dLat / 2) * Mathf.Sin(dLat / 2) +
            Mathf.Sin(dLon / 2) * Mathf.Sin(dLon / 2) * 
            Mathf.Cos(lat1 * Mathf.Rad2Deg) * Mathf.Cos(lat2 * Mathf.Rad2Deg);

    var c = 2 * Mathf.Atan2(Mathf.Sqrt(a), Mathf.Sqrt(1 - a));
    return earthRadiusKm * c;
}

【讨论】: