2012-11-21 56 views
1

我想要實現提供給Java或MySQL的用戶算法最近的地方。使用Latitude-Longitude返回用戶位置的最近地點?

表,其中有緯度和經度 100K左右的記錄的MySQL數據庫。如果用戶給他的緯度和經度X和Y,那麼我想返回從用戶的位置最近的車站

因此,請給我建議任何可用的算法在Java或MySQL

我在性能試着用下面的查詢,但似乎慢 -

SELECT *,3956*2*ASIN(SQRT(POWER(SIN((user_lat-abs(st.station_lat))*pi()/180/2), 2) + COS(user_lat*pi()/180)*COS(abs(st.station_lat) *pi()/180)*POWER(SIN((user_lon- 
st.station_lon)*pi()/180/2),2))) AS distance FROM Stations st HAVING distance < 10 ORDER BY distance; 

在此先感謝。

+1

可能重複:http://stackoverflow.com/questions/1006654/fastest-distance-lookup-given-latitude-longitude –

+0

也許你應該把算法的問題,使人們可以嘗試修改以獲得更好的性能-PS算法不是執行 –

+0

謝謝@Udo Klimaschewski,這很有幫助。 – Deepu

回答

4

我在下面的PHP PDO查詢中使用Haversine formula。它與2.7K記錄的表中提取數據並且在小於1秒與地理編碼它們顯示在一個MAP ..它默認乾淨如果搜索數據庫的範圍以外(巴黎25英里)。

使用6357式,如果公里需要,而不是英里。

$stmt = $dbh->prepare("SELECT name, lat, lng, (3959 * acos(cos(radians(?)) * cos(radians(lat)) * cos(radians(lng) - radians(?)) + sin(radians(?)) * sin(radians(lat)))) AS distance FROM gbstn HAVING distance < ? ORDER BY distance LIMIT 0 , 20"); 
    // Assign parameters 
    $stmt->bindParam(1,$center_lat); 
    $stmt->bindParam(2,$center_lng); 
    $stmt->bindParam(3,$center_lat); 
    $stmt->bindParam(4,$radius); 
+0

偉大的如果它的工作! –

相關問題