ST_CONTAINS

ST_CONTAINS

GEOGRAPHY 또는 GEOMETRY 객체가 같은 유형의 다른 객체 안에 완전히 들어 있으면 TRUE를 반환해요.

더 엄밀하게는, g2의 어떤 점도 g1의 외부에 있지 않고, B의 내부에 있는 점이 하나 이상 A의 내부에 있을 때에만 객체 g1이 객체 g2를 포함한다고 해요. 이 정의에는 바로 드러나지 않는 미묘한 점이 몇 가지 있어요. "포함(contains)"의 의미에 대한 자세한 내용은 차원 확장 9-교차 모델(Dimensionally Extended 9-Intersection Model, DE-9IM)을 참고해요.

ST_COVERS와 ST_CONTAINS는 비슷해 보일 수 있지만 두 함수에는 미묘한 차이가 있어요. "covers"와 "contains"의 차이에 대한 자세한 내용은 DE-9IM을 참고해요.

참고

이 함수는 GeometryCollection 또는 FeatureCollection을 입력 값으로 사용하는 것을 지원하지 않아요.

팁

검색 최적화 서비스(Search optimization service)를 사용해 이 함수를 호출하는 쿼리의 성능을 개선할 수 있어요. 자세한 내용은 검색 최적화 서비스 문서를 참고해요.

참고 항목:

  • ST_WITHIN, ST_COVERS, ST_COVEREDBY

출처: Snowflake SQL Reference - ST_CONTAINS

본문

구문

ST_CONTAINS( <geography_expression_1> , <geography_expression_2> )

ST_CONTAINS( <geometry_expression_1> , <geometry_expression_2> )

인자

geography_expression_1

  • GeometryCollection 또는 FeatureCollection이 아닌 GEOGRAPHY 객체예요.

geography_expression_2

  • GeometryCollection 또는 FeatureCollection이 아닌 GEOGRAPHY 객체예요.

geometry_expression_1

  • GeometryCollection 또는 FeatureCollection이 아닌 GEOMETRY 객체예요.

geometry_expression_2

  • GeometryCollection 또는 FeatureCollection이 아닌 GEOMETRY 객체예요.

반환

BOOLEAN이에요.

사용법 참고 사항

  • GEOMETRY 객체의 경우 두 입력 GEOMETRY 객체의 SRID가 다르면 함수는 오류를 보고해요.

예제

GEOGRAPHY 예제

다음은 ST_CONTAINS 함수의 간단한 사용법을 보여줘요.

create table geospatial_table_01 (g1 GEOGRAPHY, g2 GEOGRAPHY);
insert into geospatial_table_01 (g1, g2) values 
    ('POLYGON((0 0, 3 0, 3 3, 0 3, 0 0))', 'POLYGON((1 1, 2 1, 2 2, 1 2, 1 1))');
SELECT ST_CONTAINS(g1, g2) 
    FROM geospatial_table_01;
+---------------------+
| ST_CONTAINS(G1, G2) |
|---------------------|
| True                |
+---------------------+

GEOMETRY 예제

아래의 쿼리는 ST_CONTAINS를 사용하는 여러 예제를 보여줘요. ST_CONTAINS가 다음을 어떻게 판단하는지 주목해요.

  • Polygon은 자기 자신을 포함한다.
  • Polygon은 경계선 위에 있는 LineString을 포함하지 않는다.
SELECT ST_CONTAINS(poly, poly_inside), ST_CONTAINS(poly, poly), ST_CONTAINS(poly, line_on_boundary), ST_CONTAINS(poly, line_inside) FROM (SELECT TO_GEOMETRY('POLYGON((-2 0, 0 2, 2 0, -2 0))') AS poly, TO_GEOMETRY('POLYGON((-1 0, 0 1, 1 0, -1 0))') AS poly_inside, TO_GEOMETRY('LINESTRING(-1 1, 0 2, 1 1)') AS line_on_boundary, TO_GEOMETRY('LINESTRING(-2 0, 0 0, 0 1)') AS line_inside);
+--------------------------------+------------------------+------------------------------------+-------------------------------+
| ST_CONTAINS(POLY, POLY_INSIDE) | ST_CONTAINS(POLY,POLY) | ST_CONTAINS(POLY,LINE_ON_BOUNDARY) | ST_CONTAINS(POLY,LINE_INSIDE) |
|--------------------------------+------------------------+------------------------------------+-------------------------------|
| True                           | True                   | False                              | True                          |
+--------------------------------+------------------------+------------------------------------+-------------------------------+

더 알아보기