PostgreSQL 支持各种开箱即用的几何类型,以及许多似乎提供数据空间索引的几何运算符和GiST 索引。
然后还有PostGIS,它是 PG 的扩展。
PG 和 PostGIS 中内置的空间支持有什么区别?
如果我的应用程序需要存储地理坐标(点、区域、多边形)然后高效地进行查询(例如多边形中的点、多边形相交),我需要 PostGIS 还是可以使用(可以说)更方便和更简单的构建-in 数据类型/语法?
首先,我想澄清一下 GiST 索引:GiST 实际上是一个为新数据类型创建索引的框架,而不是任何特定的索引方案本身。这个框架恰好用于 Postgres 附带的几何类型,但它也用于标准文本列上的三元匹配文本相似度索引,当然也被许多外部包的索引方案使用,其中我们可以编号 PostGIS。
标准几何数据类型是否适合您或您需要 PostGIS 完全取决于您的应用程序。
PostGIS 将几何数据存储在“几何”类型的列中;在这里,您可以存储或多或少的任意数据(点、圆、多边形、你有什么)。索引是快速且非常复杂的:它可以使用边界框对复杂形状进行有损索引之类的事情,否则这些形状无法以任何合理的方式进行索引。支持不同的空间参考系统,自动转换查询结果。PostGIS 还支持行业标准的 OpenGIS 格式,有助于与其他系统共享数据。
相比之下,内部几何类型及其索引的集合就没有那么复杂了。没有真正的“通用”几何类型;相反,您必须选择将列的类型设为点、线、圆、多边形或其他类型;对于组合,您可能必须使用多个列。索引不太好;不能索引那么多不同类型的形状(尽管您可以通过为它们使用单独的列并手动生成边界框来添加边界框支持)并且在某些情况下索引可能没有那么快。另一方面,如果内部几何类型满足您的需求,您将获得优势,即您的应用程序更容易移植到安装了 Postgres 但未安装 PostGIS 的其他系统。
我的建议是使用内部几何类型,看看它对你的效果如何;如果您开始遇到问题,请尝试 PostGIS。