簡體   English   中英

計算經緯度到公里

[英]Compute Latitude and Longitude to Kilometer

我正在嘗試使用經度和緯度來計算從Destination1Destination2的千米距離

Destination1(宿霧市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 km

好吧,對於初學者來說,它的驅動力是12.2公里。 與上面的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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM