2012-09-30 71 views
1

我正在設計一個Android應用程序,它將顯示您附近的興趣點(POI)。這些POI將被存儲在一個數據庫中,我希望能夠有效地搜索我附近的POI並使搜索返回可能是最近的100個位置的排序列表。設計一個保存地理位置的數據庫

我想知道我應該如何設計我的數據庫,以便它可以有效地搜索。是否有我應該使用的任何特定形式的SQL或任何特殊算法來加速搜索?如果我的數據庫中只有100個位置,這不會成爲問題,但我可以想象,如果我擁有10,000個或更多位置,它可能會變得困難。

+0

類似[this](http://stackoverflow.com/questions/3695224/android-sqlite-getting-nearest-locations-with-latitude-and-longitude)? – PinnyM

回答

1

使用質量良好的多維索引數據庫。這允許數據庫執行有效的邊界框查詢。 PostgreSQL是不錯的選擇,因爲它具有包圍盒查詢的GIST索引。 MySQL和MS SQL具有可接受的功能。

您面對的另一個問題是座標系的選擇。 GPS Lat,長座標是角度。所以有如何做距離數學的選擇。

1)將所有Lat,Long轉換爲笛卡爾X,Y座標 - 這適用於小型(美國州)大小的區域。這需要地圖投影功能在緯度,長度和笛卡爾座標之間轉換。

2)使用海沙定公式http://www.movable-type.co.uk/scripts/latlong.html。但小心!因爲索引鍵在Lat,Longs中。這種選擇可能會有副作用。

PostGIS是一個PostgreSQL GIS應用程序。這對於最近點查詢來說很重,但起作用。

相關問題