[英]Windows phone getting nearby latitude and longitude within 6 Kilometer based on my lat and long
[英]Compute Latitude and Longitude to Kilometer
我正在嘗試使用經度和緯度來計算從Destination1到Destination2的千米距離
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.