使用 haversine 公式计算地理坐标距离给出了错误的输出

Geographic coordinate distance calculation with haversine formula gives the wrong output

我正在用 c# 创建一个距离计算器,使用半正弦方程来计算经度和纬度之间的距离,但它给出了错误的输出,有人知道为什么吗? 第一个 long 和 lat 值是威尔士(班戈)的一个地方,另一个是英格兰(曼彻斯特)的一个地方 这是代码:

using System;

public static class Program
{
    static double toRadians(double angle)
    {
        return (angle * Math.PI) / 180;
    }

    static double CalcDistance(double lon1, double lon2, double lat1, double lat2)
    {
        lon1 = toRadians(lon1);
        lon2 = toRadians(lon2);
        lat1 = toRadians(lat1);
        lat2 = toRadians(lat2);
        //haversine formula
        double dlat, dlon;
        dlat = lat2 - lat1;
        dlon = lon2 - lon1;
        double a = Math.Pow(Math.Sin(dlat / 2), 2) *
            Math.Cos(lat1) * Math.Cos(lat2) *
            Math.Pow(Math.Sin(dlon / 2), 2);
        double c = 2 * Math.Asin(Math.Sqrt(a));
        // earths radius is KM, use 3956 for miles
        double earthRadius = 6371;
        return (c * earthRadius);
    }



    static void Main(String[] args)
    {
        double lat1, lat2, lon1, lon2;
        lon1= 53.222469;
        lat1 = -4.129424;
        lon2 = 53.244697;
        lat2 = -2.13195;
        Console.WriteLine(CalcDistance(lon1, lon2, lat1, lat2) + " KM");
    }
}

给出的输出是 0.04301075336978381 KM,而输出应该大约是 130KM

错误是* vs +CalcDistance中的第一个),不过这里直接从https://www.movable-type.co.uk/scripts/latlong.html转换过来,供参考(也加了thisstatic double toRadians(this double angle) 所以它作为扩展方法工作):

static double CalcDistance(double lon1, double lon2, double lat1, double lat2)
{
    const double R = 6371;
    var φ1 = lat1.toRadians();
    var φ2 = lat2.toRadians();
    var Δφ = (lat2 - lat1).toRadians();
    var Δλ = (lon2 - lon1).toRadians();

    var a = Math.Sin(Δφ / 2) * Math.Sin(Δφ / 2) +
            Math.Cos(φ1) * Math.Cos(φ2) *
            Math.Sin(Δλ / 2) * Math.Sin(Δλ / 2);
    var c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a));

    var d = R * c;
    return d;
}