如何在Python或C#中计算两地经纬度间的英里距离?
计算经纬度间的英里距离(Python & C#实现)
Python实现
可以直接用内置的math模块,通过哈维正弦公式计算球面距离,再转换为英里(地球平均半径取3956英里)。
代码示例:
import math def calculate_miles_distance(lat1, lon1, lat2, lon2): # 将度数转换为弧度 lat1_rad = math.radians(lat1) lon1_rad = math.radians(lon1) lat2_rad = math.radians(lat2) lon2_rad = math.radians(lon2) # 计算经纬度差值 delta_lat = lat2_rad - lat1_rad delta_lon = lon2_rad - lon1_rad # 哈维正弦公式核心计算 a = math.sin(delta_lat / 2)**2 + math.cos(lat1_rad) * math.cos(lat2_rad) * math.sin(delta_lon / 2)**2 c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a)) # 地球平均半径(英里) earth_radius_miles = 3956 distance_miles = earth_radius_miles * c return distance_miles # 代入Bill和Bob的坐标 bill_lat, bill_lon = 5, 6 bob_lat, bob_lon = 9, 2 distance = calculate_miles_distance(bill_lat, bill_lon, bob_lat, bob_lon) print(f"两地英里距离: {distance:.2f}")
运行后会输出保留两位小数的英里距离结果。
C#实现
同样使用哈维正弦公式,借助System.Math类完成计算,逻辑与Python一致:
代码示例:
using System; class DistanceCalculator { public static double CalculateMilesDistance(double lat1, double lon1, double lat2, double lon2) { // 度数转弧度 double lat1Rad = Math.PI * lat1 / 180; double lon1Rad = Math.PI * lon1 / 180; double lat2Rad = Math.PI * lat2 / 180; double lon2Rad = Math.PI * lon2 / 180; // 计算差值 double deltaLat = lat2Rad - lat1Rad; double deltaLon = lon2Rad - lon1Rad; // 哈维公式计算 double a = Math.Pow(Math.Sin(deltaLat / 2), 2) + Math.Cos(lat1Rad) * Math.Cos(lat2Rad) * Math.Pow(Math.Sin(deltaLon / 2), 2); double c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a)); // 地球半径(英里) const double EarthRadiusMiles = 3956; double distanceMiles = EarthRadiusMiles * c; return distanceMiles; } static void Main() { // 代入坐标 double billLat = 5, billLon = 6; double bobLat = 9, bobLon = 2; double distance = CalculateMilesDistance(billLat, billLon, bobLat, bobLon); Console.WriteLine($"两地英里距离: {distance:F2}"); } }
编译运行后即可得到目标距离结果。
内容的提问来源于stack exchange,提问作者user14624548
相关产品推荐
相关产品推荐

