2012-12-19 114 views
7

我正在使用Phonegap和JQuery創建一個移動應用程序。從數據庫獲取類似的經度和緯度

該應用程序收集用戶的經度和緯度,並將它們存儲在數據庫中(使用PHP腳本 - Web服務),並通過一些算法檢測是否存在流量。我需要的是從數據庫中獲取所有相互接近的經度和緯度值,比如在相同的街道/ 200米範圍內。

比方說你有一個數據庫中有5個lon/lat的列表,它們彼此靠近(在同一條街道A中),3個lon/lat在一些B街道彼此靠近,還有一些代表用戶隨機在其他街道上。任何人都可以告訴我如何檢測彼此靠近的lon/lat值嗎?我將它們作爲單獨的值存儲在MySQL數據庫中,即一個字段表示經度,另一個表示緯度。

一旦我獲得彼此靠近的lon/lat,那麼我需要找到街道A中的用戶和街道B中的用戶之間的中心點,以標記爲交通擁堵(基於其他檢測)。

+0

取決於您的應用程序的規模,以及如果您的選項可能需要考慮使用PostGIS代替。因爲它比MySQL有更好的SPATIAL支持。在PostGIS中這樣做很簡單,請參閱http://gis.stackexchange.com/q/27878/3591 –

+0

嗨馬克,應用程序的規模是非常基本的。我們正在考慮PostGIS,但使用MySQL,因爲我們發現託管哪個更便宜...否則它是真實的PostGIS具有更好的空間特徵:/ – user1809790

回答

5

你應該看看Haversine公式。請參閱下面:

SELECT id, (3959 * acos(cos(radians(37)) * cos(radians(lat)) * cos(radians(lng) - radians(-122)) + sin(radians(37)) * sin(radians(lat)))) AS distance 
FROM markers 
HAVING distance < 25 
ORDER BY distance; 

這將返回距輸入長/經線對25英里以內的所有記錄。

+0

HAVING距離<25 distance關鍵字在這裏 - 它是MySQL認可的東西嗎?一些功能或類似的東西? – user1809790

+0

請檢查它使一個別名'距離' –

+0

@ m4k 我想上面的片段將讓我所有的長街/拉都在街道A和街道B.是否有一些方法來區分兩者雖然?因爲我需要做的是獲得彼此接近的點(如上所述),然後獲得A街或B街的所有點並找到他們的中點。 – user1809790