我需要計算兩點之間的距離,但不是以常規方式。我需要知道「東西距離」+「南北距離」。我想這是比普通的'如烏鴉'計算更簡單,但我仍然無法弄清楚如何去做。兩點之間的距離。東西+南北
我想使用MySQL查詢來做到這一點,最好有結果以km爲單位返回。其中一點是查詢中的常量,另一點是數據庫中的點,例如SELECT abs(經度-39.12345)... + abs(緯度... AS距離商店WHERE shopname ='Bingo 」。
提前感謝!
我需要計算兩點之間的距離,但不是以常規方式。我需要知道「東西距離」+「南北距離」。我想這是比普通的'如烏鴉'計算更簡單,但我仍然無法弄清楚如何去做。兩點之間的距離。東西+南北
我想使用MySQL查詢來做到這一點,最好有結果以km爲單位返回。其中一點是查詢中的常量,另一點是數據庫中的點,例如SELECT abs(經度-39.12345)... + abs(緯度... AS距離商店WHERE shopname ='Bingo 」。
提前感謝!
北到南的距離與緯度的差異成比例。它大約每分鐘1海里(地球的圓周大約是21600海里)。
東西距離與經度差異成正比,但它也隨緯度變化(例如在極點爲零):我認爲它與緯度的餘弦成正比。
你是對的,給定delta_longitude的東西距離與cos(緯度)成正比。 – 2010-07-10 23:51:32
使用簡單的三角函數,正常的‘直線距離’的距離是與你的斜邊的任一端心裏有兩點形成的直角三角形的斜邊。
只要看看這個http://en.wikipedia.org/wiki/Hypotenuse和解決方案應該變得清晰起來。
您可以使用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;
很好的計算 - 但它不是問題的答案。 – 2010-07-11 00:48:58
你的答案取決於你的答案所要求的精度。如果你不需要比球形地球模型更準確的答案,你可以使用類似於湯姆船長給出的解答。如果你需要更多的準確性,你需要假設地球是扁球體。請參閱http://en.wikipedia.org/wiki/Vincenty%27s_formulae瞭解幾種解決方案。
不同緯度的兩點之間的東西差異是經度的不同數字,但將其轉換爲英里數是有問題的,因爲每度的英里數根據緯度而變化。例如,洛杉磯和紐約市的經度相差44.3度,但將其轉換爲英里將導致洛杉磯緯度的數量大於紐約的緯度,因爲緯度線在赤道最長,在極點縮小到零。
合理的約定是將E-W距離計算爲在兩個緯度計算的兩個距離的平均值。
我覺得這個問題措辭不清。一個更好的解釋會有所幫助,一個例子可能更是如此。 – 2010-07-10 23:38:25
是的,也許你是對的,但ChrisW明白我想知道的。 – Marreone 2010-07-11 17:50:53