2011-03-16 53 views
8

我想要在Mysql和PostgresSQL中使用空間函數來計算兩個位置之間的距離。我從Google獲取了經緯度。詳情如下在MySql中使用空間函數找到兩個座標之間的距離的正確方法

位置一:緯度:42.260223; Lon:-71.800010

位置2-緯度:42.245647;經度:-71.802521

SQL查詢中使用:

選定的距離(GEOMFROMTEXT( '點(42.260223 -71.800010)'),GEOMFROMTEXT( '點(42.245647 -71.802521)'))

的兩個數據庫給出了相同的結果0.014790703059697。但是當我在其他系統中計算距離時,結果是不同的。請參考以下鏈接

http://www.zip-codes.com/distance_calculator.asp?zip1=01601&zip2=01610&Submit=Search =1.44英里

http://www.distancecheck.com/zipcode-distance.php?start=01601&end=01610 =1.53英里

所以我想知道我的計算方法/查詢是否正確與否。如果它是錯誤的,那麼查詢距離數據庫的正確方法是什麼?

+0

可能重複(http://stackoverflow.com/questions/5217819/effectively-selecting-the-closest-distance-從數據庫中記錄/ 5217888#5217888) – BigFatBaby 2011-03-16 12:03:06

回答

5

在上面的例子中,MySql只是應用畢達哥拉斯定理:c2 = a^2 + b^2。在該特定情況下,SQRT((42.245647-42.260223)^ 2 +( - 71.802521^-2 -71.800010)^ 2)= 0.014790703。

使用MySql距離函數實際存在兩個問題,即距離上的球體上的座標。 (1)MySql在計算平面上的距離,而不是球面。 (2)結果以度數形式返回,而不是數英里。要獲得以英里,公里,英尺等爲單位的真實球面距離,需要通過確定緯線(一個或多個)的通過地球中心線的半徑來將您的緯度和長度轉換爲要測量的單位。你在測量。

爲了得到一個真正的措施是相當複雜的,許多個人和公司已經從事這個職業。

8

簡單的答案是使用Haversine公式。這假設地球是一個球體,事實並非如此,但它不是一個不錯的近似值。這與很多其他的細節在本演示描述:中[這裏]

http://www.scribd.com/doc/2569355/Geo-Distance-Search-with-MySQL

+1

此演示文稿可能是我遇到的最簡潔直接的解決方案。它被配置爲以英里爲單位返回距離,但只需換出相當於公里等量的地球半徑值,即可參加比賽。 – 2011-10-03 12:05:56

+0

是的,這是我找到的最好的計算器。只是想確認公式返回的距離是以公里還是英里計算的? – Prasad 2012-05-23 16:04:42

+0

如果您使用3956作爲半徑,您的數字將以英里數顯示。 – 2012-05-24 01:42:21