카테고리:

지리공간 함수

ST_ISVALID

지정된 GEOGRAPHY 또는 GEOMETRY 오브젝트가 유효한 형태 를 나타내는 경우 TRUE를 반환합니다. 유효하지 않은 형태의 예로는 자체 교차점과 스파이크가 있는 형태가 있습니다.

구문

ST_ISVALID( <geography_or_geometry_expression> )
Copy

인자

geography_or_geometry_expression

인자는 GEOGRAPHY 또는 GEOMETRY 형식의 식이어야 합니다.

반환

BOOLEAN 값을 반환합니다.

사용법 노트

  • ST_ISVALID는 형태의 유효성만 확인합니다. 데이터를 수정하지는 않습니다. 공간 형식(예: WKT, WKB, EWKT, EWKB또는 GeoJSON)에서 오브젝트를 작성하는 경우 변환 함수(예: TO_GEOGRAPHY, TO_GEOMETRY, ST_GEOGRAPHYFROMWKT 또는 ST_GEOMETRYFROMWKT)는 입력을 구문 분석하고 기본적으로 형태의 유효성 검사 또는 복구를 시도합니다. 변환 함수가 형태를 복구할 수 없는 경우 유효하지 않은 형태를 허용하지 않는 한, 오류를 반환합니다.

  • 유효하지 않을 수 있는 데이터(예: 나중에 수정하려는 데이터)를 수집하려면 유효하지 않은 형태를 허용하도록 변환 함수를 호출할 때 추가 allow_invalid 인자에 대해 TRUE를 지정합니다. 그런 다음, ST_ISVALID 함수를 사용하여 테이블의 유효하지 않은 행에 플래그를 지정할 수 있습니다.

  • 일부 지리 공간 함수는 유효하지 않은 형태가 주어지면 오류나 사용할 수 없는 결과를 반환할 수 있습니다. ST_ISVALID 함수를 사용하여 유효성을 확인할 수 있습니다. 공간 분석을 수행하기 전에 유효하지 않은 형태를 수정할 수 있습니다.

  • 형태가 유효하지 않은 경우 작은 양수 또는 음수 거리로 버퍼링한 다음(예: 작은 스파이크를 제거하거나 자체 교차점을 해결하기 위해), ST_ISVALID 함수를 사용하여 유효성을 다시 확인하는 것과 같은 간단한 수정을 할 수 있습니다.

다음 예제에서는 ST_ISVALID 함수를 사용합니다.

다각형이 유효한 형태인지 확인합니다.

SELECT ST_ISVALID(
    TO_GEOGRAPHY('POLYGON((-93.086 37.557,-86.699 37.497,-93.198 35.123,-93.086 37.557))')
  ) AS is_valid;
Copy
+----------+
| IS_VALID |
|----------|
| True     |
+----------+
SELECT ST_ISVALID(
    TO_GEOGRAPHY( 'POLYGON((-92.799 37.601,-88.240 37.617,-92.733 36.198,-88.305 36.171,-92.799 37.601))', TRUE)
  ) AS is_valid;
Copy
+----------+
| IS_VALID |
|----------|
| False    |
+----------+

작은 버퍼를 추가하는 ST_BUFFER 함수를 사용하여 유효하지 않은 형태를 수정합니다.

WITH g AS (
  SELECT TO_GEOMETRY('POLYGON((0 0, 2 2, 2 0, 0 2, 0 0))', TRUE) AS geom
)
SELECT ST_ISVALID(geom) AS is_valid_before_buffer,
  ST_ISVALID(ST_BUFFER(geom, -0.001)) AS is_valid_after_buffer
  FROM g;
Copy
+------------------------+-----------------------+
| IS_VALID_BEFORE_BUFFER | IS_VALID_AFTER_BUFFER |
|------------------------+-----------------------|
| False                  | True                  |
+------------------------+-----------------------+