Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 地理(地图)数据的理想数据库_Sql_Database_Geolocation_Mapping_Openstreetmap - Fatal编程技术网

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

Sql 地理(地图)数据的理想数据库,sql,database,geolocation,mapping,openstreetmap,Sql,Database,Geolocation,Mapping,Openstreetmap,我正在寻找一个理想的数据库或存储地图的数据结构的建议。本质上,地图由“路径”组成,类似于道路、路径等。路径包含节点(有纬度和经度坐标,有时还有海拔) 任何此类数据库或结构: 应该能够快速定位边界框中的所有节点(毫秒) (可选)当大量节点位于边界框中而不是少量节点时,或者如果边界框较大,则速度不应明显减慢 应能够找到直接连接的节点:例如,通过两种方式连接的节点 可以是只读的 应该是紧凑的(避免浪费空间)-我正在寻找适合英国地图不到1 GB。我有一个卫星导航系统,它在SD卡上有大约800MB的空间

我正在寻找一个理想的数据库或存储地图的数据结构的建议。本质上,地图由“路径”组成,类似于道路、路径等。路径包含节点(有纬度和经度坐标,有时还有海拔)

任何此类数据库或结构:

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

  • (可选)当大量节点位于边界框中而不是少量节点时,或者如果边界框较大,则速度不应明显减慢

  • 应能够找到直接连接的节点:例如,通过两种方式连接的节点

  • 可以是只读的

  • 应该是紧凑的(避免浪费空间)-我正在寻找适合英国地图不到1 GB。我有一个卫星导航系统,它在SD卡上有大约800MB的空间

  • 我最初想用四叉树来存储路径。但是一个快速的实现是很棘手的,它们不适用于单个节点;所有节点都被放入尽可能小的bbox中


    (我有意使用与开放街道地图相同的术语,因为我计划使用这些数据。)

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

    另外,您的问题更符合

    我建议使用地理类型,因为它适合您所需的内容,但是我唯一关心的是在嵌入式设备上使用类似的内容会占用内存


    我使用Java中的非GIS数据库(firebird)构建了一些模糊相关的东西,其性能足以检索边界框中的点(尽管需要花哨的SQL,这与PostGIS不同)。

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

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

    在这里,排序对于速度尤其重要,建议将更有可能首先访问的区域进行排序。假设70%的请求都在伦敦附近,那么将这些数据放在文件开头以缩短搜索时间将是最快的选择。

    可能是最佳选择。注意:PostGIS是带有地理扩展的PostgreSQL。您可以直接安装postgres,然后运行各种脚本,添加地理功能和类型

    看。您可以使用osm2pgsql将OpenStreetMap planet文件/planet摘录加载到PostGIS中,这是在运行Mapnik渲染器的OpenStreetMap tile服务器上完成的。然而


    OpenStreetMap数据还有一个更原始的数据库模式(称为“节点”和“方式”等的表),这是主要OpenStreetMap数据库服务器用于存储其地理数据并允许通过API进行编辑的内容。当涉及到空间索引等时,这并不是很聪明,但是很好而且简单。可以通过安装来创建此格式的数据库。这是设置的最新版本(由定义)的最可靠方法。之后,您可以运行该工具来填充数据库。

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

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

    就像摄影界的格言——“最好的相机是你随身携带的”——有时候理想的空间数据库就是你已经拥有并知道如何使用的数据库

    下面是我知道的所有选项的列表:

    空间RDBMS-提供免费选项

    • Oracle(带空间或定位器)(自由选项:Oracle XE+定位器)
    • MS SQL Server(2008或更高版本)(免费选项:SQL Server Express)
    • 波斯特吉斯
    空间RDBMS-无免费选项

    • DB2(使用SpatialExtender)
    • Informix(带空间刀片)
    低于理想的空间关系数据库

    • MySQL Spatial(非常有限的函数集)
    空间“扩展软件”

    • ArcSDE(将其添加到现有RDBMS中)

    我认为这更像是一个编程问题,因为实现同样重要。我考虑过使用SQLite3,因为它有一个R*树扩展,但是速度太慢了。好吧,在其他网站上推荐产品部件会更好。算法部分可能也会在那里得到很好的服务。你试过其他数据库吗?没有。SQLite3相当快——在一个100mx100m的盒子中获取所有节点大约需要40毫秒。我不认为大多数数据库都会比这多得多,因此我正在寻找更好的解决问题的方法,例如不同的数据结构或算法。我认为您应该更详细地描述您的需求,并强调您不是在寻找数据库,而是在寻找一个me