类别:

地理空间函数

ST_INTERSECTION

给定两个 GEOGRAPHY 输入对象,返回一个 GEOGRAPHY 对象,它表示的形状包含了两个输入对象都拥有的点的集合(即两个对象的交集)。

另请参阅:

ST_INTERSECTION_AGGST_UNIONST_DIFFERENCEST_SYMDIFFERENCE

语法

ST_INTERSECTION( <geography_expression_1> , <geography_expression_2> )
Copy

实参

geography_expression_1

GEOGRAPHY 对象。

geography_expression_2

GEOGRAPHY 对象。

返回

该函数返回 GEOGRAPHY 类型的值。

使用说明

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

    例如,假设 geography_expression_1POINT(1 1)geography_expression_2LINESTRING(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);
    
    Copy

    此语句生成以下输出:

    +--------------------------------------------+------------+----------------------------+---------------------------------+
    | 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                            |
    +--------------------------------------------+------------+----------------------------+---------------------------------+
    
    Copy

    该函数不保证产生规范化和/或最小结果。例如,输出可能由包含多个点的 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;
Copy

此示例生成以下输出:

+-----------------------------------------------------------------------------------------------------------------------------------------+
| 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))) |
+-----------------------------------------------------------------------------------------------------------------------------------------+
Copy

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

输入

输出

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