You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 23:31:18