2010-07-10 50 views
0

我需要計算兩點之間的距離,但不是以常規方式。我需要知道「東西距離」+「南北距離」。我想這是比普通的'如烏鴉'計算更簡單,但我仍然無法弄清楚如何去做。兩點之間的距離。東西+南北

我想使用MySQL查詢來做到這一點,最好有結果以km爲單位返回。其中一點是查詢中的常量,另一點是數據庫中的點,例如SELECT abs(經度-39.12345)... + abs(緯度... AS距離商店WHERE shopname ='Bingo 」。

提前感謝!

+0

我覺得這個問題措辭不清。一個更好的解釋會有所幫助,一個例子可能更是如此。 – 2010-07-10 23:38:25

+0

是的,也許你是對的,但ChrisW明白我想知道的。 – Marreone 2010-07-11 17:50:53

回答

4

北到南的距離與緯度的差異成比例。它大約每分鐘1海里(地球的圓周大約是21600海里)。

東西距離與經度差異成正比,但它也隨緯度變化(例如在極點爲零):我認爲它與緯度的餘弦成正比。

+1

你是對的,給定delta_longitude的東西距離與cos(緯度)成正比。 – 2010-07-10 23:51:32

-2

使用簡單的三角函數,正常的‘直線距離’的距離是與你的斜邊的任一端心裏有兩點形成的直角三角形的斜邊。

只要看看這個http://en.wikipedia.org/wiki/Hypotenuse和解決方案應該變得清晰起來。

0

您可以使用Great-Circle Distance來確定任意兩個地理編碼點之間的距離。這是關於這個主題的另一個decent article

以下是C#示例展示瞭如何做到這一點:

var earth_radius = Constants.EarthRadius; // 6377.8 km 

var dLat = ToRadians(fromLatitude - toLatitude); 
var dLon = ToRadians(fromLongitude - toLongitude); 

var a = 
    Math.Sin(dLat/2) * 
    Math.Sin(dLat/2) + 
    Math.Cos(ToRadians(fromLatitude)) * 
    Math.Cos(ToRadians(toLatitude)) * 
    Math.Sin(dLon/2) * 
    Math.Sin(dLon/2); 

var c = 2 * Math.Asin(Math.Min(1, Math.Sqrt(a))); 

var distanceInKilometers = earth_radius * c; 
+0

很好的計算 - 但它不是問題的答案。 – 2010-07-11 00:48:58

0

你的答案取決於你的答案所要求的精度。如果你不需要比球形地球模型更準確的答案,你可以使用類似於湯姆船長給出的解答。如果你需要更多的準確性,你需要假設地球是扁球體。請參閱http://en.wikipedia.org/wiki/Vincenty%27s_formulae瞭解幾種解決方案。

0

不同緯度的兩點之間的東西差異是經度的不同數字,但將其轉換爲英里數是有問題的,因爲每度的英里數根據緯度而變化。例如,洛杉磯和紐約市的經度相差44.3度,但將其轉換爲英里將導致洛杉磯緯度的數量大於紐約的緯度,因爲緯度線在赤道最長,在極點縮小到零。

合理的約定是將E-W距離計算爲在兩個緯度計算的兩個距離的平均值。