名称

ST_SymDifference — 计算几何对象 A 和 B 中不相交部分所表示的几何对象。

概要

geometry ST_SymDifference(geometry geomA, geometry geomB, float8 gridSize = -1);

描述

返回一个几何对象,表示几何对象 A 和 B 中不相交的部分。这等价于 ST_Union(A,B) - ST_Intersection(A,B)。它被称为对称差,因为 ST_SymDifference(A,B) = ST_SymDifference(B,A)

如果提供了可选的 gridSize 参数,则输入将捕捉到给定大小的网格,并且结果顶点将在同一网格上计算。(需要 GEOS-3.9.0 或更高版本)

由 GEOS 模块执行

增强功能:3.1.0 接受 gridSize 参数。

需要 GEOS >= 3.9.0 才能使用 gridSize 参数

此方法实现了 OGC 简单要素 SQL 实现规范 1.1。 s2.1.1.3

此方法实现了 SQL/MM 规范。SQL-MM 3: 5.1.21

此函数支持 3D,并且不会删除 z 索引。但是,结果仅使用 XY 计算。结果 Z 值被复制、平均或插值。

示例

原始线串一起显示

两个线串的对称差

--Safe for 2d - symmetric difference of 2 linestrings
SELECT ST_AsText(
    ST_SymDifference(
        ST_GeomFromText('LINESTRING(50 100, 50 200)'),
        ST_GeomFromText('LINESTRING(50 50, 50 150)')
    )
);

st_astext
---------
MULTILINESTRING((50 150,50 200),(50 50,50 100))
--When used in 3d doesn't quite do the right thing
SELECT ST_AsEWKT(ST_SymDifference(ST_GeomFromEWKT('LINESTRING(1 2 1, 1 4 2)'),
    ST_GeomFromEWKT('LINESTRING(1 1 3, 1 3 4)')))

st_astext
------------
MULTILINESTRING((1 3 2.75,1 4 2),(1 1 3,1 2 2.25))