2011-03-25 54 views
0

我有一個小問題點(haversine公式Q),尋找圍繞指定的點的給定半徑

我只是測試使用haversine公式爲我的項目 在項目中,我指定點我想找到我提供的點的給定半徑內的所有點。經過多次搜索,我嘗試了這個沙丁烷公式查詢。

SELECT service_id, (3959 * acos(cos(radians(51.500152)) * cos(radians(latitude)) * cos(radians(longitude) - radians(-0.126236)) + sin(radians(51.500152)) * sin(radians(latitude)))) AS distance 
FROM sys_t_taxi_real_time_servce HAVING distance < 25 ORDER BY distance LIMIT 0 , 20; 

我得到了倫敦的緯度和經度,然後如圖中(的service_id,driver_id,journey_id,經度,緯度,DRIVER_STATUS)

4, 1, , 51.5034, -0.174751, '' 
5, 1, 2, 51.477106, -0.137329, '' 

所以對於結果集的順序指定的數據但是我什麼也沒得到,沒有行返回

然而,當我刪除having子句我得到以下結果集(的service_id,距離)

5, 4655.154600 
4, 4658.309966 

我被困在這個問題上,無法前進,因爲它和任何幫助將不勝感激。

查詢和這種從下面的鏈接 http://code.google.com/apis/maps/articles/phpsqlsearch.html

而且沒有人知道任何其他方法來解決同樣的問題,我看到了MySQL的空間相關的東西獲得,而是拿起這個,因爲它用起來比較方便

問候, MilindaD

回答

0

我沒有使用過您所描述的公式,但也許另一種方法解決您的問題:你提出了一個SQL查詢,我想你至少使用MySQL的。您是否嘗試使用數據庫的空間功能?有一些叫做CONTAINS和WITHIN的函數。因此,您可以簡單地從頭開始在座標周圍創建一個緩衝區多邊形,並在WHERE子句中包含CONTAINS函數。

如果你不限於MySQL,PostgreSQL,SQL Server或Oracle會給你更多。 PostgreSQL是開源的,其他的可以免費用於教育目的(如果我沒記錯的話)。

Regards, Martin