2010-10-02 44 views
9

我正在寻找关于存储地图的理想数据库或数据结构的建议。本质上,图由“方式”,其是例如道路,路径等途径包含节点(其具有纬度和经度坐标,以及有时的高度。)地理(地图)数据的理想数据库

任何这样的数据库或结构:

  1. 应该能够找到在边框中迅速(毫秒)

  2. 可选,不应该大大放慢时,大量节点都是在边框与少数节点的所有节点,或者如果边框太大

  3. 应该能够找到直接连接的节点:例如它连接两种方式

  4. 节点可以只读

  5. 要紧凑(避免了浪费空间) - 我正在寻找适合地图英国为小于1 GB。我有一个卫星导航,它可以在SD卡上占用大约800 MB的空间。

我在想最初的四叉树存储方式。但是一个快速实现是棘手的,它们不适用于单个节点。所有节点都可以放在最小的bbox中。

(我故意使用开放街道地图相同的术语,因为我打算使用这些数据。)

+0

我开始对这个问题的赏金。 – 2010-10-05 13:51:15

回答

4

一个更好的比赛我会使用地理类型,因为它是适合你想要什么,但是我用像这样的嵌入式只关心与PostGIS 1.5推荐设备将是内存使用情况。

我已经建立了一些在Java中使用非GIS数据库(firebird)模糊相关的东西,性能足以在边界框内检索点(尽管花哨的SQL是必需的,而PostGIS却不是这样) 。

+0

PostGIS看起来很有趣。感谢指针。 – 2010-10-06 14:34:27

0

我不知道的空间,但你可能想看看使用任何地理扩展常见的数据库服务器(如果可能的话)。它们通常提供快速地理索引,基于边界框(回答1和2)的许多地理过程进行计算(回答3,intersect(way1,way2))。

而且,你的问题是http://gis.stackexchange.com

+0

我认为这更像是一个编程问题,因为实现同样重要。我考虑过使用SQLite3,因为它有一个R *树扩展,但这太慢了。 – 2010-10-02 23:29:32

+0

那么,一个产品部分的建议将更好地服务于其他网站。算法部分也可能会在那里得到很好的服务。你有没有尝试过其他数据库? – 2010-10-02 23:37:01

+0

不 - 我没有。 SQLite3速度非常快 - 大约需要40ms才能获取100米x 100米盒子中的所有节点。我不认为大多数数据库比这更多,所以我正在寻找更好的方法来解决问题,例如不同的数据结构或算法。 – 2010-10-02 23:40:34

1

我知道的地理数据的最佳数据库PostgreSQL的是与地理扩展,但我不知道速度。我知道OSM使用这个,但是他们可以访问一个巨大的计算机基础设施,它的速度是,速度很快。我也知道他们有几个人可以为他们写更快的程序。

我要说的是,四叉树是处理geospartial数据一个很好的选择,看来你允许广场摆脱我可以告诉太小。您可以使边界柔和(允许节点在四叉树的两个叶),并加入每叶节点的最小量。说,任何叶不允许含有小于64个节点,并且不超过1024。

排序对速度来说尤其重要,建议排列起来更容易被访问的åreas。假设所有请求中有70%会在伦敦附近,那么在文件开始时将这些数据缩短搜索时间会是最快的。

+0

感谢您的建议+1。 – 2010-10-09 21:14:36

+0

Np,我一直在考虑基于OSM数据的服务 - 但我目前缺乏托管可能性和经济性。 – Frank 2010-10-09 21:44:40

5

PostGIS可能是最好的选择。注意:PostGIS 带有地理扩展名的PostgreSQL。你从字面上安装postgres,然后运行添加地理功能和类型的各种脚本。

查看OpenStreetMap information about PostGIS。您可以使用osm2pgsql将OpenStreetMap行星文件/星球摘录加载到PostGIS中,并且这是在运行Mapnik渲染器的OpenStreetMap拼贴服务器上完成的。但是...

OpenStreetMap数据(表格称为“节点”和“路径”等)还有一个更原始的数据库模式这就是OpenStreetMap数据库服务器用于存储其地理数据并允许编辑通过API。这在空间索引等方面并不那么聪明,但很好而且简单。您可以通过安装OpenStreetMap API/website ruby on rails code以此格式创建数据库。这是设置database schema(由the rails migrations定义)的最新版本的最可靠方法。之后,您可以运行osmosis工具来填充数据库。

1

PostGIS不是唯一支持地理空间数据的数据库,但价格点非常好。很难打败“免费”。

但还有其他的免费选项,一些读者可能已经有了另一个关系数据库系统,并且希望利用这些专业知识而不是学习PostGIS。任何支持Open Geographical Consortium规范(OGC或OpenGeo)的数据库都足以满足您所描述的场景。

就像摄影世界的格言 - “最好的相机就是你拥有的相机” - 有时理想的空间数据库就是你已经拥有并且知​​道如何使用的数据库。

因此,这里是我所知道的选项列表:

空间RDBMS - 提供

  • 甲骨文(与空间或定位)自由选择(自由选项:甲骨文XE +定位)
  • MS SQL服务器(2008或更高版本)(自由选项:SQL Server Express的)
  • PostGIS的

空间RDBMS - 没有自由选择

  • DB2(带Spatial Extender的)
  • 的Informix(与空间之刃)

不到理想的空间RDBMS

  • MySQL Spatial(功能非常有限)

空间 “拓洁具”

  • 的ArcSDE(你将它添加到现有的RDBMS)