1

我正在设计一个 android 应用程序,它将显示您附近的兴趣点 (POI)。POI 将存储在数据库中,我希望能够有效地搜索我附近的 POI,并让搜索返回可能是最近 100 个位置的排序列表。

我想知道我应该如何设计我的数据库,以便可以有效地搜索它。我应该使用任何特定形式的 SQL 或任何特殊算法来加快搜索速度?虽然如果我的数据库中只有 100 个位置不会有问题,但我可以想象如果我有 10,000 个或更多位置可能会很困难。

4

2 回答 2

1

使用具有良好多维索引的数据库。这允许数据库进行有效的边界框查询。PostgreSQL 是不错的选择,因为它具有用于边界框查询的 GIST 索引。MySQL 和 MS SQL 具有可接受的功能。

您面临的另一个问题是坐标系的选择。GPS 纬度、长坐标是角度。所以可以选择如何进行距离数学。

1) 将所有纬度、经度转换为笛卡尔 X、Y 坐标 - 这适用于小型(美国州)大小的区域。这需要地图投影函数在纬度、经度和笛卡尔坐标之间进行转换。

2)使用harsine公式http://www.movable-type.co.uk/scripts/latlong.html。但是要小心!因为索引键在纬度,经度。这种选择可能会产生副作用。

PostGIS 是一个 PostgreSQL GIS 应用程序。对于最近点查询来说,它很重,但很有效。

于 2012-10-01T17:46:47.390 回答
0

使用 PostGIS

http://en.wikipedia.org/wiki/PostGIS

于 2012-09-30T18:08:49.087 回答