Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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
Database 我的数据库中是否需要空间索引?_Database_Gis_Geospatial_Spatial_Bounding Box - Fatal编程技术网

Database 我的数据库中是否需要空间索引?

Database 我的数据库中是否需要空间索引?,database,gis,geospatial,spatial,bounding-box,Database,Gis,Geospatial,Spatial,Bounding Box,我正在设计一个应用程序,需要在数据库中保存几何形状。我还没有选择数据库管理系统 在我的应用程序中,所有数据库查询都将有一个边界框作为输入,而作为输出,我希望该数据库中的所有形状。我知道带有空间索引的数据库用于此类应用程序。但在我的应用程序中,不会有任何类型为“给我x/y附近的对象”的查询或其他在GIS应用程序中有用的更复杂查询 我计划拥有一个没有空间索引的数据库,并且有如下查询: SELECT * FROM shapes WHERE x < max_x AND x > min_x A

我正在设计一个应用程序,需要在数据库中保存几何形状。我还没有选择数据库管理系统

在我的应用程序中,所有数据库查询都将有一个边界框作为输入,而作为输出,我希望该数据库中的所有形状。我知道带有空间索引的数据库用于此类应用程序。但在我的应用程序中,不会有任何类型为“给我x/y附近的对象”的查询或其他在GIS应用程序中有用的更复杂查询

我计划拥有一个没有空间索引的数据库,并且有如下查询:

SELECT * FROM shapes WHERE x < max_x AND x > min_x AND y < max_y AND y > min_y
从xmin\u x和ymin\u y的形状中选择*
x(double)
y(double)
列上有一个索引。只要我能看到,我并不真的需要一个带有空间索引的数据库,无论我的应用程序与这类应用程序多么接近

即使我希望有附近的查询,我也可以在该点周围创建一个足够大的边界框。还是这会导致性能不佳

我真的需要一个空间数据库吗?什么时候需要空间索引

编辑:
搜索查询实际上比我上面写的查询要高级一点,因为我处理的是几何图形,我将输入一个边界框,它将返回多个位于查询框内部或与查询框相互干扰的形状(带边界框)。但我仍然认为,在阅读了所有好的答案之后,我可以不用空间索引来完成这项工作。

不,你不需要空间索引

计算物体之间的距离、查看一个点是否在另一个点的某个半径内等都需要空间索引。。。大多数情况下,当您需要考虑地理坐标时。南半球、北半球等。。。当你不得不考虑地球的曲线时,所有这些都会稍微改变距离


如果您总是同时查找x和y,那么同时在这两个项目上创建索引将使您受益匪浅。所以不是x列上的索引和y列上的索引,而是x列和y列上的索引的组合。

如果你不超出你已经在做的事情,你就不需要空间索引或地理信息系统。不过,我会仔细考虑您的需求是什么,以及应用程序增长的需要GIS系统的机会。对于这一过渡,早计划总比晚计划好

地理信息系统为您提供了几个优势。首先,GIS具有特殊的形状列,用于存储几何体所需的所有信息。它管理空间参考、坐标元数据等。GIS提供了基于空间关系查询数据和修改几何图形(联合、提取、缓冲区等)的强大方法。它处理点、线、多边形等。您可以从拓扑操作派生新形状。此外,几乎所有的GIS系统都提供了渲染数据的方法(这实际上取决于您选择的GIS,但当它存在时,可以为您节省大量的工作)

如果您有一个真正的GIS环境,您将只需要空间索引。如果你选择了一个GIS环境,是的,使用空间索引-你真的不想在没有它们的情况下工作

我真的需要一个空间数据库吗

看起来您正在做的工作对于您的应用程序来说很好

即使我想 附近的查询,然后我可以创建一个 足够大的包围盒 重点

<>你可能想考虑在A上创建索引。建议将此方法用于索引Google App Engine上的地理空间点,例如,在索引功能有限的情况下。()

什么时候需要空间索引


在许多情况下,空间索引是有用的。首先,空间索引不仅可以处理点,还可以处理多段线、多边形和其他形状。此外,正如您已经提到的,有许多复杂的查询操作可以应用于空间数据,其中正确的空间索引是必不可少的。

要添加到现有的优秀答案中,这里的性能可能重要,也可能不重要

如果您通过对x轴和y轴执行两个范围查询并获取结果的交集来模拟空间索引范围查询,那么您正在执行两个查询,这两个查询返回的数据可能比交集之前需要的数据多得多

另一方面,这样的查询本机由空间索引支持,因此将得到有效的响应


总而言之,如果您的空间查询是瓶颈,则需要使用空间索引。

使用postgis或spatiallite的“成本”是多少?我不明白你为什么不想使用它们。@TheSteve0:我还没有决定要使用什么dbms。但我不想局限于一个有空间索引的。也许我会选择分布式NoSQL数据库作为RDBMS的一部分。那么,您的用例是什么?如果您不介意共享,我想创建一个可扩展的web服务。我正在考虑使用Mnesia作为数据库,但它没有空间索引。感谢您的解释和合并索引的建议。谢谢!我会仔细设计我的应用程序。我将尽量在前端软件中保留高级程序,并保持后端存储简单,以便可以轻松扩展。谢谢!Geohash看起来很不错,谢谢链接。是的,我的数据库不仅会处理点,还会处理多边形和直线。但搜索查询将仅在边界框上。