ST_SIMPLIFY

ST_SIMPLIFY

선 또는 Polygon을 나타내는 입력 GEOGRAPHY 또는 GEOMETRY 객체가 주어지면, 객체의 더 단순한 근사치를 반환해요. 이 함수는 선택된 정점을 식별하고 제거하여 정점이 더 적은 유사한 객체를 만들어요.

예를 들어 입력 객체가 50개의 정점을 가진 Polygon이라면 ST_SIMPLIFY는 그중 20개의 정점만 가진 더 단순한 Polygon을 반환할 수 있어요.

객체를 단순화할 때 이 함수는 그 정점과 정점 제거로 생긴 모서리 사이의 거리가 지정된 허용 오차(tolerance) 범위 안에 있을 때만 정점을 제거해요.

출처: Snowflake SQL Reference - ST_SIMPLIFY

본문

구문

ST_SIMPLIFY( <geography_expression>, <tolerance> [ , <preserve_collapsed> ] )
ST_SIMPLIFY( <geometry_expression>, <tolerance> )

인자

필수:

geography_expression 또는 geometry_expression

  • 단순화할 GEOGRAPHY 또는 GEOMETRY 객체예요. GEOGRAPHY 또는 GEOMETRY 객체의 유형에 따라 ST_SIMPLIFY는 다음과 같은 효과가 있어요.
객체 유형 ST_SIMPLIFY의 효과
LineString, MultiLineString, Polygon 또는 MultiPolygon ST_SIMPLIFY가 단순화 알고리즘을 적용해요.
Point 또는 MultiPoint ST_SIMPLIFY가 아무 효과가 없어요.
GeometryCollection 또는 FeatureCollection GEOGRAPHY 객체의 경우 ST_SIMPLIFY가 컬렉션의 각 객체에 단순화 알고리즘을 적용해요. GEOMETRY 객체의 경우 ST_SIMPLIFY는 이러한 유형을 지원하지 않아요.

tolerance

  • 단순화 알고리즘이 사용하는 최대 거리예요. 객체의 데이터 타입에 따라 작업에 사용되는 단위는 다음과 같아요. GEOGRAPHY — 거리가 미터로 해석돼요. GEOMETRY — 거리가 객체의 SRID(공간 참조 시스템 식별자) 단위로 해석돼요. 예를 들어 EPSG:4326에는 도(degree) 단위, 많은 투영 SRID에는 미터 단위, 일부 로컬 SRID에는 피트 단위로 해석돼요. 후보 정점의 거리가 이 허용 오차를 초과하면 ST_SIMPLIFY는 그 정점을 단순화된 객체에 유지해요.

선택:

preserve_collapsed

  • (GEOGRAPHY 객체 전용) TRUE이면 허용 오차를 고려할 때 너무 작아질 객체를 유지해요. 예를 들어 preserve_collapsed가 FALSE이고 tolerance가 10(미터)일 때 1m 길이의 선은 단순화된 객체에서 점으로 줄어들어요. preserve_collapsed가 TRUE이면 그 선은 단순화된 객체에 보존돼요. 기본값: FALSE.

반환

이 함수는 GEOGRAPHY 또는 GEOMETRY 타입의 값을 반환해요.

예제

GEOGRAPHY 예제

이 섹션의 예제는 출력을 WKT 형식으로 표시해요.

alter session set GEOGRAPHY_OUTPUT_FORMAT='WKT';

다음 예제는 원래 LineString보다 정점이 더 적은 단순화된 LineString을 반환해요. 단순화된 객체에서 정점과 그 정점을 대체하는 모서리 사이의 거리가 1000미터보다 작으면 정점이 생략돼요.

SELECT ST_SIMPLIFY(
    TO_GEOGRAPHY('LINESTRING(-122.306067 37.55412, -122.32328 37.561801, -122.325879 37.586852)'),
    1000);
+----------------------------------------------------------------------------------------------------+
| ST_SIMPLIFY(                                                                                       |
|     TO_GEOGRAPHY('LINESTRING(-122.306067 37.55412, -122.32328 37.561801, -122.325879 37.586852)'), |
|     1000)                                                                                          |
|----------------------------------------------------------------------------------------------------|
| LINESTRING(-122.306067 37.55412,-122.325879 37.586852)                                             |
+----------------------------------------------------------------------------------------------------+

GEOMETRY 예제

이 섹션의 예제는 출력을 WKT 형식으로 표시해요.

ALTER SESSION SET GEOMETRY_OUTPUT_FORMAT='WKT';

다음 예제는 원래 LineString보다 정점이 더 적은 단순화된 LineString을 반환해요. 단순화된 객체에서 정점과 그 정점을 대체하는 모서리 사이의 거리가 500미터보다 작으면 정점이 생략돼요.

SELECT ST_SIMPIFY(
  TO_GEOMETRY('LINESTRING(1100 1100, 2500 2100, 3100 3100, 4900 1100, 3100 1900)'),
  500);

+----------------------------------------------------------------------------------------------------+
| ST_SIMPLIFY(TO_GEOMETRY('LINESTRING(1100 1100, 2500 2100, 3100 3100, 4900 1100, 3100 1900)'), 500) |
|----------------------------------------------------------------------------------------------------|
| LINESTRING(1100 1100,3100 3100,4900 1100,3100 1900)                                                |
+----------------------------------------------------------------------------------------------------+

다음 예제는 처음에 정점이 36개인 타원을 허용 오차 인자에 따라 정점이 16개 또는 10개인 모양으로 단순화해요.

SELECT ST_NUMPOINTS(geom) AS numpoints_before,
  ST_NUMPOINTS(ST_Simplify(geom, 0.5)) AS numpoints_simplified_05,
  ST_NUMPOINTS(ST_Simplify(geom, 1)) AS numpoints_simplified_1
  FROM
  (SELECT ST_BUFFER(to_geometry('LINESTRING(0 0, 1 1)'), 10) As geom);

+------------------+-------------------------+------------------------+
| NUMPOINTS_BEFORE | NUMPOINTS_SIMPLIFIED_05 | NUMPOINTS_SIMPLIFIED_1 |
|------------------+-------------------------+------------------------|
|               36 |                      16 |                     10 |
+------------------+-------------------------+------------------------+

더 알아보기