名称

ST_Difference — 计算几何 A 中不与几何 B 相交的部分所表示的几何。

语法

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

描述

返回几何 A 中不与几何 B 相交的部分所表示的几何。这等效于 A - ST_Intersection(A,B)。如果 A 完全包含在 B 中,则返回适当类型的空原子几何。

[Note]

这是唯一一个输入顺序很重要的叠加函数。ST_Difference(A, 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.20

此函数支持 3d,并且不会删除 z 索引。

但是,结果仅使用 XY 计算。结果 Z 值会复制、平均或插值。

示例

输入线字符串

两条线字符串的差值

2D 线字符串的差值。

SELECT ST_AsText(
    ST_Difference(
            'LINESTRING(50 100, 50 200)'::geometry,
            'LINESTRING(50 50, 50 150)'::geometry
        )
    );

st_astext
---------
LINESTRING(50 150,50 200)

3D 点的差值。

SELECT ST_AsEWKT( ST_Difference(
                   'MULTIPOINT(-118.58 38.38 5,-118.60 38.329 6,-118.614 38.281 7)' :: geometry,
                   'POINT(-118.614 38.281 5)' :: geometry
                  ) );

st_asewkt
---------
MULTIPOINT(-118.6 38.329 6,-118.58 38.38 5)

另请参见

ST_SymDifferenceST_IntersectionST_Union