类别:

地理空间函数

ST_SYMDIFFERENCE

给定两个 GEOGRAPHY 输入对象,返回一个 GEOGRAPHY 对象,它表示两个输入对象中不是对象交集一部分的点的集合(即两个对象的 对称差 (link removed))。

另请参阅:

ST_INTERSECTIONST_UNIONST_DIFFERENCE

语法

ST_SYMDIFFERENCE( <geography_expression_1> , <geography_expression_2> )
Copy

实参

geography_expression_1

GEOGRAPHY 对象。

geography_expression_2

GEOGRAPHY 对象。

返回

该函数返回 GEOGRAPHY 类型的值。

如果 geography_expression_1geography_expression_2 相等(即对称差是一组空的点),则该函数返回 NULL。

使用说明

  • 如果一个输入对象的任何顶点位于另一个输入对象的边界上(不包括顶点),则输出可能不准确。

  • 该函数不保证产生规范化和/或最小结果。例如,输出可能由包含多个点的 LineString 组成,这些点实际上只形成一个直线段。

示例

以下示例返回一个 GEOGRAPHY 对象,该对象表示两个输入 GEOGRAPHY 对象之间的对称差:

ALTER SESSION SET GEOGRAPHY_OUTPUT_FORMAT = 'WKT';

SELECT ST_SYMDIFFERENCE(
  TO_GEOGRAPHY('POLYGON((0 0, 1 0, 2 1, 1 2, 2 3, 1 4, 0 4, 0 0))'),
  TO_GEOGRAPHY('POLYGON((3 0, 3 4, 2 4, 1 3, 2 2, 1 1, 2 0, 3 0))')
) AS symmetric_difference_between_objects;
Copy

此示例生成以下输出:

+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| SYMMETRIC_DIFFERENCE_BETWEEN_OBJECTS                                                                                                                                                                                    |
|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| MULTIPOLYGON(((1 1,1.5 1.500171359,1 2,1.5 2.500285599,1 3,1.5 3.500399839,1 4,0 4,0 0,1 0,1.5 0.5000571198,1 1)),((3 0,3 4,2 4,1.5 3.500399839,2 3,1.5 2.500285599,2 2,1.5 1.500171359,2 1,1.5 0.5000571198,2 0,3 0))) |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
Copy

下图说明了表示输入和输出对象的区域的差异:

输入

输出

传递给 ST_SYMDIFFERENCE 的输入对象的区域 ST_SYMDIFFERENCE 返回的输出对象的区域
语言: 中文