设计一个保存地理位置的数据库
Posted
技术标签:
【中文标题】设计一个保存地理位置的数据库【英文标题】:Designing a Database that holds Geographic Locations 【发布时间】:2012-09-30 02:04:19 【问题描述】:我正在设计一个 android 应用程序,它将显示您附近的兴趣点 (POI)。 POI 将存储在一个数据库中,我希望能够有效地搜索我附近的 POI,并让搜索返回一个可能是最近的 100 个位置的排序列表。
我想知道我应该如何设计我的数据库以便可以有效地搜索它。我应该使用任何特定形式的 SQL 或任何特殊算法来加快搜索速度?虽然如果我的数据库中只有 100 个位置不会有问题,但我可以想象如果我有 10,000 个或更多位置可能会很困难。
【问题讨论】:
类似this? 【参考方案1】:使用具有良好多维索引的数据库。这允许数据库进行有效的边界框查询。 PostgreSQL 是不错的选择,因为它具有用于边界框查询的 GIST 索引。 mysql 和 MS SQL 具有可接受的功能。
您面临的另一个问题是坐标系的选择。 GPS 纬度、长坐标是角度。所以可以选择如何进行距离数学计算。
1) 将所有纬度、经度转换为笛卡尔 X、Y 坐标 - 这适用于小型(美国州)大小的区域。这需要地图投影函数在纬度、经度和笛卡尔坐标之间进行转换。
2) 使用半正弦公式http://www.movable-type.co.uk/scripts/latlong.html。但是要小心!因为索引键在纬度,经度。这种选择可能会产生副作用。
PostGIS 是一个 PostgreSQL GIS 应用程序。它对于最近点查询很重要,但很有效。
【讨论】:
【参考方案2】:使用 PostGIS
http://en.wikipedia.org/wiki/PostGIS
【讨论】:
以上是关于设计一个保存地理位置的数据库的主要内容,如果未能解决你的问题,请参考以下文章
一个使用 HTML5 地理位置获取用户位置并保存到数据库的 Rails 应用程序