我正在设计一个Android应用程序,它将显示您附近的兴趣点(POI)。 POI将存储在一个数据库中,我希望能够有效地搜索我附近的POI,并让搜索返回一个可能是最近的100个位置的排序列表。
我想知道如何设计我的数据库以便有效地搜索它。是否有我应该使用的特定形式的SQL,或任何特殊的算法来加速搜索?虽然如果我的数据库中只有100个位置就不会有问题,但我可以想象如果我有10,000个或更多的位置可能会变得困难。
答案 0 :(得分:1)
使用具有良好多维索引的数据库。这允许数据库执行有效的边界框查询。 PostgreSQL是不错的选择,因为它有边界框查询的GIST索引。 MySQL和MS SQL具有可接受的功能。
您面临的另一个问题是坐标系的选择。 GPS Lat,长坐标是角度。所以可以选择如何进行距离数学。
1)将所有Lat,Long转换为笛卡尔X,Y坐标 - 这适用于小型(美国州)大小的区域。这需要地图投影功能在lat,Long和Cartesian coords之间进行转换。
2)使用半正式公式http://www.movable-type.co.uk/scripts/latlong.html。但小心!因为索引键在Lat,Longs中。这种选择可能会产生副作用。
PostGIS是一个PostgreSQL GIS应用程序。它对于最近点查询来说很重,但有效。
答案 1 :(得分:0)
使用PostGIS