以千米为单位计算纬度和经度

Compute Latitude and Longitude to Kilometer

我正在尝试使用纬度和经度

计算从目的地1目的地2的公里距离

目的地 1(宿雾市 PH) 纬度:1017.8590 经度:12353.4304

Destination2(Talisay PH) 纬度:1015.6445 经度:12350.0404

我的输出是:299.28607720457882 KM

代码:

double lat1 = Convert.ToDouble(txtLat1.Text.ToString());
double lat2 = Convert.ToDouble(txtLat2.Text.ToString());
double lon1 = Convert.ToDouble(txtLong1.Text.ToString());
double lon2 = Convert.ToDouble(txtLong2.Text.ToString());

        var R = 6378.137; // Radius of earth in KM
        var dLat = (lat2 - lat1) * Math.PI / 180;
        var dLon = (lon2 - lon1) * Math.PI / 180;
        var a =
            Math.Sin(dLat / 2) * Math.Sin(dLat / 2) +
            Math.Cos(lat1 * Math.PI / 180) * Math.Cos(lat2 * Math.PI / 180) *
            Math.Sin(dLon / 2) * Math.Sin(dLon / 2);
        var c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a));
        string x = (R * c).ToString();
        var d = (R * c);

我尝试使用 http://www.entfernungsrechner.net/en/distance/city/1717512/city/1683881 这个网站来计算该目的地的公里数,输出结果是 12.2 公里

嗯,对于初学者来说,它说的是 12.2KM,因为你会开车。这与上面的 Haversine 公式的输出不同。

您应该尝试将小数点放在正确的位置。我得到一个更合理的结果 4.45 公里。

https://dotnetfiddle.net/cs5Ppq

public class Program
{
    public static void Main()
    {
        double lat1 = 10.178590;
        double lat2 = 10.156445;
        double lon1 = 123.500404;
        double lon2 = 123.534304;

        var R = 6378.137; // Radius of earth in KM
        var dLat = (lat2 - lat1) * Math.PI / 180;
        var dLon = (lon2 - lon1) * Math.PI / 180;
        var a =
            Math.Sin(dLat / 2) * Math.Sin(dLat / 2) +
            Math.Cos(lat1 * Math.PI / 180) * Math.Cos(lat2 * Math.PI / 180) *
            Math.Sin(dLon / 2) * Math.Sin(dLon / 2);
        var c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a));
        string x = (R * c).ToString();
        var d = (R * c);
        Console.WriteLine(d);
    }
}

注意:您可以对照此 http://andrew.hedges.name/experiments/haversine/ 工具检查您的结果

编辑:如果您想要最准确的数字,因为 Haversine 公式可能低估和高估地球上极端的距离,您需要使用 Vincety 解决方案。这不适合心脏虚弱的人: http://www.movable-type.co.uk/scripts/latlong-vincenty.html