/// <summary> /// distance (in km) between two points specified by latitude/longitude /// The Haversine formula, http://www.movable-type.co.uk/scripts/latlong.html /// </summary> /// <param name="p1"></param> /// <param name="p2"></param> /// <returns></returns> public double GetDistance(PointLatLng p1, PointLatLng p2) { double dLat1InRad = p1.Lat * (Math.PI / 180); double dLong1InRad = p1.Lng * (Math.PI / 180); double dLat2InRad = p2.Lat * (Math.PI / 180); double dLong2InRad = p2.Lng * (Math.PI / 180); double dLongitude = dLong2InRad - dLong1InRad; double dLatitude = dLat2InRad - dLat1InRad; double a = Math.Pow(Math.Sin(dLatitude / 2), 2) + Math.Cos(dLat1InRad) * Math.Cos(dLat2InRad) * Math.Pow(Math.Sin(dLongitude / 2), 2); double c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a)); double dDistance = (Axis / 1000.0) * c; return dDistance; }
http://www.movable-type.co.uk/scripts/latlong.html 有详细的说明
作者:
cglnet
本文版权归cglNet和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
浙公网安备 33010602011771号