计算两个地理点的距离,单位为km c#
我想要计算两个地理点的距离.点在经度和纬度上给出.
坐标为: 点1:36.578581,-118.291994 point 2:36.23998,-116.83171 这里有一个比较网站的结果: http://www.movable-type.co.uk/scripts/latlong.html 这里是我从这个链接使用的代码: const double PIx = Math.PI; const double RADIO = 6378.16; /// <summary> /// Convert degrees to Radians /// </summary> /// <param name="x">Degrees</param> /// <returns>The equivalent in radians</returns> public static double Radians(double x) { return x * PIx / 180; } /// <summary> /// Calculate the distance between two places. /// </summary> /// <param name="lon1"></param> /// <param name="lat1"></param> /// <param name="lon2"></param> /// <param name="lat2"></param> /// <returns></returns> public static double DistanceBetweenPlaces(double lon1,double lat1,double lon2,double lat2) { double R = 6371; // km double dLat = Radians(lat2 - lat1); double dLon = Radians(lon2 - lon1); lat1 = Radians(lat1); lat2 = Radians(lat2); double a = Math.Sin(dLat / 2) * Math.Sin(dLat / 2) + Math.Sin(dLon / 2) * Math.Sin(dLon / 2) * Math.Cos(lat1) * Math.Cos(lat2); double c = 2 * Math.Atan2(Math.Sqrt(a),Math.Sqrt(1 - a)); double d = R * c; return d; } Console.WriteLine(DistanceAlgorithm.DistanceBetweenPlaces(36.578581,-118.291994,36.23998,-116.83171)); 问题是我得到两个不同的结果. 我的结果:163,307公里 网站结果:136公里 有什么建议么??? TORTI 解决方法
你的公式几乎是正确的,但你必须交换经度的参数为纬度
Console.WriteLine(DistanceAlgorithm.DistanceBetweenPlaces(-118.291994,36.578581,-116.83171,36.23998)); // = 136 km 我使用简化的公式: // cos(d) = sin(φА)·sin(φB) + cos(φА)·cos(φB)·cos(λА ? λB),// where φА,φB are latitudes and λА,λB are longitudes // Distance = d * R public static double DistanceBetweenPlaces(double lon1,double lat2) { double R = 6371; // km double sLat1 = Math.Sin(Radians(lat1)); double sLat2 = Math.Sin(Radians(lat2)); double cLat1 = Math.Cos(Radians(lat1)); double cLat2 = Math.Cos(Radians(lat2)); double cLon = Math.Cos(Radians(lon1) - Radians(lon2)); double cosD = sLat1*sLat2 + cLat1*cLat2*cLon; double d = Math.Acos(cosD); double dist = R * d; return dist; } 测试: (赤道距离):长0,100;纬度= 0,0; DistanceBetweenPlaces(0,100,0)= 11119.5公里 (北极距离):长0,100;纬度= 90,90; DistanceBetweenPlaces(0,90,90)= 0 km 长期:-118.291994,-116.83171;纬度:36.578581,36.23998 = 135.6公里 长期:36.578581,36.23998;纬度:-118.291994,-116.83171 = 163.2公里 最好的祝福 附:在web site,您可以使用结果比较,每个点第一个文本框是纬度,第二个经度 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |