设计一个保存地理位置的数据库

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

【讨论】:

以上是关于设计一个保存地理位置的数据库的主要内容,如果未能解决你的问题,请参考以下文章

如何方便的保存WinForm窗体控件的位置大小等等配置信息

一个使用 HTML5 地理位置获取用户位置并保存到数据库的 Rails 应用程序

保存在变量/本地存储中的地理位置数据

kafka log保存在本机的位置 kafka数据保存的位置

我应该保存 GeoIP 数据吗

流星自动将地理位置保存到用户文档