地理(地图)数据的理想数据库

时间:2010-10-02 23:20:16

标签: sql database geolocation mapping openstreetmap

我正在寻找有关存储地图的理想数据库或数据结构的建议。基本上,地图由道路,路径等“道路”组成。道路包含节点(具有纬度和经度坐标,有时还有高度。)

任何此类数据库或结构:

  1. 应该能够快速(毫秒)定位边界框中的所有节点

  2. 可选地,当大量节点在边界框中而不是少量节点时,或者如果边界框很大时,不应该显着减慢

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

  4. 可以只读

  5. 应该是紧凑的(避免浪费空间) - 我希望将英国的地图放入不到1 GB的范围内。我有一个卫星导航,可以在SD卡上使用大约800 MB的空间。

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

    (我故意使用相同的Open Street Map术语,因为我打算使用这些数据。)

5 个答案:

答案 0 :(得分:5)

我建议PostGIS 1.5使用地理类型,因为它适合您想要的内容,但我在嵌入式设备上使用此类内容的唯一问题是内存使用情况。

我在Java中使用非GIS数据库(firebird)建立了模糊相关的东西,并且性能足以在边界框内检索点(尽管需要花哨的SQL,但PostGIS不是这种情况)。

答案 1 :(得分: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工具来填充数据库。

答案 2 :(得分:1)

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

我想说Quadtree是处理地理部分数据的一个非常好的选择,似乎你允许方块从我能说的方面变得太小。您可以使边界更柔和(允许节点位于四叉树的两个叶子中)并为每个叶子添加最少量的节点。假设任何叶子不允许包含少于64个节点,并且不超过1024个。

排序对于速度来说尤其重要,建议将对可能更容易被访问的åreas进行排序。假设70%的请求都在伦敦附近,那么将这些数据放在文件开头以减少搜索时间是最快的。

答案 3 :(得分:1)

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

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

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

所以这里列出了我所知道的所有选项:

空间RDBMS - 免费选项

  • Oracle(使用Spatial或Locator)(自由选项:Oracle XE + Locator)
  • MS SQL Server(2008或更高版本)(自由选项:SQL Server Express)
  • PostGIS的

空间RDBMS - 没有免费选项

  • DB2(使用Spatial Extender)
  • Informix(使用Spatial Blade)

小于理想的空间RDBMS

  • MySQL Spatial(非常有限的功能集)

空间“Extension-Ware”

  • ArcSDE(您将其添加到现有的RDBMS上)

答案 4 :(得分:0)

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

此外,您的问题更适合http://gis.stackexchange.com