2011-01-08 17 views
5

我想將數千個緯度/經度點存儲在MySQL數據庫中。我成功地設置了表格,並使用地理空間擴展添加數據,其中「座標」列是「點」(lat,lng)。如何使用具有球形幾何體的MySQL地理空間擴展

問題:

我想很快找到「N」最接近條目北緯「X」度和經度「Y」度。由於Distance()函數尚未實現,因此我使用GLength()函數來計算(X,Y)與每個條目之間的距離,按上升距離排序,並限制爲'N'結果。問題是這不是用球面幾何計算最短距離。這意味着如果Y = 179.9度,則最接近的條目的列表將僅包括從179.9開始的經度,並且即使在經度從-179.9增加的情況下存在更接近的條目的情況下也將遞減。

在數據庫中處理球面幾何時,如何處理經度不連續?必須有一個簡單的解決方案,但我必須尋找錯誤的東西,因爲我沒有找到任何有用的東西。

我應該忘記GLength()函數並創建我自己的函數來計算角度分離嗎?如果我這樣做,它會不會很快並利用地理空間擴展?

謝謝!

喬希


UPDATE:

This正是我上面描述。但是,它只適用於SQL Server。顯然,SQL Server具有幾何數據類型。地理正是我所需要的。 MySQL中有類似的東西嗎?

回答

4

在數據庫中處理球面幾何時,如何處理經度不連續?

沒有多少人使用MySQL來做這件事,因爲它的地理空間擴展並不是真的需要鼻菸。

從文檔: All calculations are done assuming Euclidean (planar) geometry.

該溶液通常是roll your own

或者,你可以僞造它 - 如果你的距離小於500英里左右,那麼你可以把你的緯度和經度當作直角座標,並使用歐氏距離公式(sqrt(a^2 + b^2))。

+0

感謝您的回答。人們通常使用什麼?我看到了你之前鏈接的頁面,但這似乎只能解決找到最接近給定緯度/經度的點的問題。它不能解決請求區域內所有點的問題。使用滾動你自己的方法不會允許你請求所有點從178 lon到-178 lon和從30 lat到35 lat(矩形區域)。 – Joshua 2011-01-09 18:43:36