2013-05-28 64 views
0

我正在處理地圖,其中需要顯示距用戶GEO座標最近的位置。這些最近的位置應該在1km或用戶指定的半徑內。顯示用戶緯度/長的用戶指定半徑內的最近位置

而不是運行查詢和計算我的數據庫中的所有地理座標的距離,我選擇國家 - 國家 - 城市縮小我的選擇範圍。但我仍然不覺得這種方式更有效率。

有人可以建議我解決此問題的更好方法。

回答

1

你正在尋找的是Haversine公式,基於座標。您必須使用Haversine比較位置座標和興趣點之間的距離。如果結果低於閾值(1公里),則顯示感興趣的點。

+1

對於如此小的距離(1km),您可以使用平坦的地球方程而不是Haversine。 – TreyA

0

我建議你計算出最大和最小緯度以及最大和最小經度,以便所有在相應最小和最大值之間的緯度和經度的點位於以當前點爲中心的2km x 2km平方。然後,您可以運行查詢來選擇哪個地理點最接近。要做到這一點,您需要計算出公里和緯度之間的比率以及公里和經度之間的比率。答案是

1 degree of latitude = 6371000 * Math.PI/180 metres 
1 degree of longitude = Cos(Latitude) * 6371000 * Math.PI/180 metres 

因爲6371000是以米爲單位的平均地球半徑。某些點(即在廣場的角落處)距離將超過1公里,但如果答案需要準確,則可以計算該廣場內每個點的精確距離。注意:很多餘弦函數都是弧度而不是度數,所以一定要確保單位正確!

+0

我不明白你的意思,你已經做了2公里x 2公里。你能否更一般地解釋一下。謝謝 –

+0

2公里x 2公里與當前點在中心意味着廣場的每一邊將從當前點1公里。那有意義嗎? – Stochastically

相關問題