2013-10-08 53 views
1

我想根據到對象的距離從數據庫中排序結果。 我的對象和我的數據庫項目都有latlng,我可以用haversine計算距離。如何按距離排序數據庫結果?

問題是他們需要從數據庫中選擇距離。我無法拔出整個數據庫,進行計算,然後取得我需要的結果,因爲... 每當我做到這一點,小貓就會死亡

  • 有人建議把半胱氨酸配方放到order_by。如何 許多小貓會死?

  • 有人提出某種空間插件。他們在做什麼?我應該使用哪一個?

  • 另一個看起來很醜陋的選擇是,你手動採取一定的距離,並通過排除一切越來越大的東西來做出正方形,即latlng。如果沒有足夠的結果,或者結果太多,則可以更正距離並再次運行查詢。

任何人都可以告訴我什麼是最好的方式,我應該與親的騙局。此外,我正在使用CakePHP的LAMP/MAMP。

+0

你可以發佈你的表結構嗎?一些樣本數據可能? – Maximus2012

+0

提示:查看[geocoding-with-cakephp](http://www.dereuromark.de/2012/06/12/geocoding-with-cakephp/) – mark

回答

0

使用兩種:

WHERE table.latitude BETWEEN $latmin AND $latmax 
    AND table.longitude BETWEEN $lonmin AND $lonmax 
ORDER BY haversine(....) 
HAVING haversine(...) < $your_desired_distance 

它仍然是一個重型訂單的,但你必須消除任何「明顯」超出範圍的候選人非常簡單/重量輕WHERE過濾器,因此您將在所有可能記錄的小(er?)子集上進行實際距離計算。

0

您可以使用quadkey。這是一個使用空間填充曲線的空間索引。這不是一個確切的解決方案,但速度非常快,你可以自由使用半正規公式。你可以下載我的php類hilbert -curve @ phpclasses.org。它也使用墨卡託投影。