카테고리:

지리 공간 함수

ST_INTERSECTION

두 개의 입력 GEOGRAPHY 오브젝트가 주어진 경우, 두 입력 오브젝트에 공통되는 점 세트가 포함된 모양을 나타내는 GEOGRAPHY 오브젝트를 반환합니다(즉, 두 오브젝트의 교집합).

참고 항목:

ST_UNION , ST_DIFFERENCE , ST_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_1geography_expression_2 의 경계에 있지만, 꼭짓점은 아닙니다.

    이 예에서 예상 출력은 POINT(1 1) 이지만, 실제 출력은 빈 지리(NULL로 표시)일 수 있습니다.

    이러한 경우를 감지하고 해결하는 데 도움이 되도록, 한 가지 잠재적인 아이디어는 ST_DWITHIN 을 사용하여 두 입력 오브젝트 간의 최소 거리가 0 인지 확인하는 것입니다. 예를 들어, 두 오브젝트 사이의 최소 거리가 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

다음 이미지는 입력 및 출력 오브젝트를 나타내는 영역의 차이를 보여줍니다.

입력

출력

Areas of input objects passed to ST_INTERSECTION Areas of output objects returned by ST_INTERSECTION