PostGIS学习教程十六:几何图形的相等

PostGIS学习教程十六:几何图形的相等

在处理几何图形时确定相等可能很困难。PostGIS支持三种不同的函数与操作符,可以用来确定不同级别的相等。为了说明这些函数和操作符,我们将使用以下多边形。
PostGIS学习教程十六:几何图形的相等_第1张图片
使用以下命令加载这些多边形:

CREATE TABLE polygons (id integer, name varchar, poly geometry);
 
INSERT INTO polygons VALUES
  (1, 'Polygon 1', 'POLYGON((-1 1.732,1 1.732,2 0,1 -1.732,
      -1 -1.732,-2 0,-1 1.732))'),
  (2, 'Polygon 2', 'POLYGON((-1 1.732,-2 0,-1 -1.732,1 -1.732,
      2 0,1 1.732,-1 1.732))'),
  (3, 'Polygon 3', 'POLYGON((1 -1.732,2 0,1 1.732,-1 1.732,
      -2 0,-1 -1.732,1 -1.732))'),
  (4, 'Polygon 4', 'POLYGON((-1 1.732,0 1.732, 1 1.732,1.5 0.866,
      2 0,1.5 -0.866,1 -1.732,0 -1.732,-1 -1.732,-1.5 -0.866,
      -2 0,-1.5 0.866,-1 1.732))'),
  (5, 'Polygon 5', 'POLYGON((-2 -1.732,2 -1.732,2 1.732,
      -2 1.732,-2 -1.732))');

PostGIS学习教程十六:几何图形的相等_第2张图片

文章目录

  • PostGIS学习教程十六:几何图形的相等
  • 一、精确相等(ST_OrderingEquals)
  • 二、空间相等(ST_Equals)
  • 三、包围框相等(~=)


一、精确相等(ST_OrderingEquals)

精确相等是通过按顺序逐个比较两个几何图形的顶点来确定的,以确保它们在位置上是相同的。下面的例子说明了这种方法的有效性是如何受到限制的。

SELECT a.name, b.name, CASE WHEN ST_OrderingEquals(a.poly, b.poly)
    THEN 'Exactly Equal' ELSE 'Not Exactly Equal' end
FROM polygons as a, polygons as b;

PostGIS学习教程十六:几何图形的相等_第3张图片
在此示例中,多边形仅与自身相等,而不等于其他看似相等的多边形。对于多边形1、2和3,顶点处于相同的位置,但定义顺序不同,因此不相等。多边形4在六条边上都有共线(因此是冗余的)顶点,导致与多边形1不相等。

二、空间相等(ST_Equals)

正如我们在上面看到的,精确的相等(ST_OrderingEquals)并没有考虑到几何图形的空间性质。有一个名为ST_Equals的函数,可用于测试几何图形的空间相等性或等价性。

SELECT a.name, b.name, CASE WHEN ST_Equals(a.poly, b.poly)
    THEN 'Spatially Equal' ELSE 'Not Equal' end
FROM polygons as a, polygons as b;

PostGIS学习教程十六:几何图形的相等_第4张图片
这些结果更符合我们对相等的直觉理解。多边形1到4被认为是相等的,因为它们包含相同的区域。请注意,无论是绘制多边形的方向、定义多边形的起点,还是包含的点的个数的差异在这里都不重要。重要的是多边形包含相同的空间区域,它们就相等。

三、包围框相等(~=)

在最坏的情况下,需要精确相等来比较几何图形中的每个顶点以确定相等。这可能会比较慢(计算量比较大),并且可能不适合数量很多的几何图形。为了更快地进行比较,提供了包围框(bounding box)相等运算符 ’ ~= ’ 。这仅在包围框(矩形)上操作,确保几何图形占用相同的二维范围,但不一定占用相同的空间。
PostGIS学习教程十六:几何图形的相等_第5张图片

SELECT a.name, b.name, CASE WHEN a.poly ~= b.poly
    THEN 'Equal Bounds' ELSE 'Non-equal Bounds' end
FROM polygons as a, polygons as b;

PostGIS学习教程十六:几何图形的相等_第6张图片
如你所见,我们所有在空间上相等的几何图形也有相等的包围框。不同的是,与多边形5的测试也是相等的,因为它与其他几何图形一样具有相同的包围框。那这有什么用呢?虽然这将在稍后详细介绍,但简短来说就是这样可以使用空间索引,在连接或筛选数据时,可以将大量的比较集快速减少为更易于处理的子集(先粗调后精调)。

你可能感兴趣的:(postgis,学习,postgresql,空间计算,数据库)