PostgreSQL中的空间数据

33

PostgreSQL原生支持各种几何类型,还提供了许多几何运算符GiST索引,看起来可以对数据进行空间索引。

此外,还有PostGIS,它是PG的一个扩展。

在PG内置的空间支持与PostGIS之间有什么区别呢?

如果我的应用程序需要存储地理坐标(点、区域、多边形),并能够高效地查询(例如点在多边形内、多边形相交),我需要使用PostGIS吗,还是可以使用(可能更方便简单的)内置数据类型/语法?

1个回答

33

首先,我想澄清GiST索引:GiST实际上是用于为新数据类型创建索引的框架,而不是任何特定的索引方案本身。这个框架恰好用于Postgres自带的几何类型,但也用于标准文本列的三元匹配文本相似性索引,当然也用于许多外部包的索引方案中,其中PostGIS是其中之一。

是否使用标准几何数据类型或需要使用PostGIS完全取决于您的应用程序。

PostGIS将几何数据存储在“geometry”类型的列中;在此列中,您可以存储更多或更少的任意数据(点、圆、多边形等)。索引速度很快且相当复杂:它可以执行像使用边界框对无法以任何合理方式进行索引的复杂形状进行有损索引等操作。支持不同的空间参考系统,并自动转换查询结果。PostGIS还支持行业标准的OpenGIS格式,这可以帮助与其他系统共享数据。

相比之下,内部几何类型及其索引集合要简单得多。没有真正的“通用”几何类型;相反,您必须选择将列的类型设置为点、线、圆、多边形或其他几何类型;对于组合,您可能需要使用多个列。索引不够优秀;不能对许多不同类型的形状进行索引(尽管可以通过使用单独的列为它们添加边界框支持并手动生成边界框来解决这个问题),而且在某些情况下索引可能没有那么快。另一方面,如果内部几何类型满足您的需求,您将获得一个优势,即您的应用程序更容易移植到其他安装了Postgres但未安装PostGIS的系统。

我的建议是尝试使用内部几何类型,并查看其效果如何;如果遇到问题,请尝试使用PostGIS。


嘿,你介意看一眼这个吗:https://dev59.com/XXNA5IYBdhLWcg3wUMDn 谢谢。 - Assaf Lavie
看起来你已经得到了答案:你正在混合使用标准的Postgres几何类型和PostGIS类型。这是两个不同的东西;我建议你只使用其中一个,除非你发现某些奇怪的情况下标准的Postgres类型比PostGIS类型更有效或者更好用。 - cjs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接