- 类别:
ST_INTERSECTION¶
给定两个 GEOGRAPHY 输入对象,返回一个 GEOGRAPHY 对象,它表示的形状包含了两个输入对象都拥有的点的集合(即两个对象的交集)。
语法¶
ST_INTERSECTION( <geography_expression_1> , <geography_expression_2> )
实参¶
geography_expression_1
GEOGRAPHY 对象。
geography_expression_2
GEOGRAPHY 对象。
返回¶
该函数返回 GEOGRAPHY 类型的值。
使用说明¶
如果一个输入对象的任何顶点位于另一个输入对象的边界上(不包括顶点),则输出可能包含也可能不包含该顶点。
例如,假设
geography_expression_1
是POINT(1 1)
,geography_expression_2
是LINESTRING(1 0, 1 2)
。在这种情况下,geography_expression_1
位于geography_expression_2
的边界上,但不是它的顶点。在此示例中,预期输出为
POINT(1 1)
,但实际输出可能是空地理值(由 NULL 表示)。为了帮助检测和解决这些情况,可能可以使用 ST_DWITHIN 来确定两个输入对象之间的最小距离是否为
0
。例如,通过检查两个对象之间的最小距离是否为零,可以检查点是否位于 LineString 的顶部:SELECT TO_GEOGRAPHY('POLYGON((0 0, 1 0, 2 1, 1 2, 2 3, 1 4, 0 4, 0 0))') AS polygon, TO_GEOGRAPHY('POINT(0 2)') AS point, ST_DWITHIN(polygon, point, 0) AS point_is_on_top_of_polygon, ST_INTERSECTION(polygon, point);
此语句生成以下输出:
+--------------------------------------------+------------+----------------------------+---------------------------------+ | POLYGON | POINT | POINT_IS_ON_TOP_OF_POLYGON | ST_INTERSECTION(POLYGON, POINT) | |--------------------------------------------+------------+----------------------------+---------------------------------| | POLYGON((0 0,1 0,2 1,1 2,2 3,1 4,0 4,0 0)) | POINT(0 2) | True | NULL | +--------------------------------------------+------------+----------------------------+---------------------------------+
该函数不保证产生规范化和/或最小结果。例如,输出可能由包含多个点的 LineString 组成,这些点实际上只形成一个直线段。
示例¶
下面的示例返回一个 GEOGRAPHY 对象,该对象表示两个 GEOGRAPHY 输入对象的交集:
ALTER SESSION SET GEOGRAPHY_OUTPUT_FORMAT = 'WKT'; SELECT ST_INTERSECTION( 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 intersection_of_objects;
此示例生成以下输出:
+-----------------------------------------------------------------------------------------------------------------------------------------+ | INTERSECTION_OF_OBJECTS | |-----------------------------------------------------------------------------------------------------------------------------------------| | MULTIPOLYGON(((1.5 0.5000571198,2 1,1.5 1.500171359,1 1,1.5 0.5000571198)),((1.5 2.500285599,2 3,1.5 3.500399839,1 3,1.5 2.500285599))) | +-----------------------------------------------------------------------------------------------------------------------------------------+
下图说明了表示输入和输出对象的区域的差异:
输入 |
输出 |
---|---|
![]() |
![]() |