我在做應用程序,其中使用sqlite數據庫文件來獲取數據。 db中有店名,地址,城市,緯度,經度等欄目。如何從當前位置獲得10個最近的位置
我能夠獲得位置的經緯度,並且能夠使用經度和緯度值計算當前位置和商店位置之間的距離(以db爲單位)。
這裏我的問題是 我需要/顯示距離當前位置最近(距離)的10個商店名稱(從db)。
請建議我或者給一個參考鏈接來解決這個問題
謝謝
我在做應用程序,其中使用sqlite數據庫文件來獲取數據。 db中有店名,地址,城市,緯度,經度等欄目。如何從當前位置獲得10個最近的位置
我能夠獲得位置的經緯度,並且能夠使用經度和緯度值計算當前位置和商店位置之間的距離(以db爲單位)。
這裏我的問題是 我需要/顯示距離當前位置最近(距離)的10個商店名稱(從db)。
請建議我或者給一個參考鏈接來解決這個問題
謝謝
有thousands upon thousands of sites,讓您計算兩點間的距離公式。大多數人認爲你想考慮地球的曲率;沒有這一點,它是簡單的幾何(畢達哥拉斯定理)。在僞代碼:
的sqrt((X1-X2)^ 2 +(Y1-Y2)^ 2)
建設,體現了無論公式您在ORDER BY
條款選擇一個SQL查詢,考慮到記錄您正在搜索的固定點的經度和緯度。既然你不關心絕對距離,而只是距離的大小,你可能會做一些東西來節省CPU時間,比如跳過畢達哥拉斯定理的平方根部分。
要將結果集限制爲10,請在查詢中使用LIMIT 10
,您將獲得前10個匹配。
請注意,如果您有很多位置,SQLite將不會是進行地理查詢的理想平臺。您必須爲每個查詢的每一行執行一次距離計算,這將是CPU密集型和緩慢的。
您可能最好定位一個可以進行地理索引並以兼容格式提供數據的庫。 (嘗試搜索「Java地理索引」。)Lucene有一個地理擴展,但我不知道它是否超出了Alpha。
另一種方法是將「最近的」代碼移動到網絡中某個應用程序服務器上。這樣你就不會在移動設備上執行任何cpu密集型的東西,它只需要一個活動的inet連接。
我最近創建了一個應用程序,就像這樣,這是我如何做它:
distance = locationA.distanceTo(locationB);
if (distance <= 1000 * 10)
//the 1000 stands for one kilometer, times 10 means 10 kilometers
{
point = new GeoPoint(
(int) (lat * 1E6),
(int) (lng * 1E6));
OverlayItem overlayItem = new OverlayItem(point, name,
suburb+", "+state+", "+postcode);
itemizedOverlay.addOverlay(overlayItem);
}
烏拉圭回合的答覆您好感謝,ü意味着我需要在查詢本身使用上面給出的公式。我的疑問是,如果我們提交經緯度數據,可以得到距離..... – praveenb 2010-10-12 04:35:59