ST_SIMPLIFY
ST_SIMPLIFY
선 또는 Polygon을 나타내는 입력 GEOGRAPHY 또는 GEOMETRY 객체가 주어지면, 객체의 더 단순한 근사치를 반환해요. 이 함수는 선택된 정점을 식별하고 제거하여 정점이 더 적은 유사한 객체를 만들어요.
예를 들어 입력 객체가 50개의 정점을 가진 Polygon이라면 ST_SIMPLIFY는 그중 20개의 정점만 가진 더 단순한 Polygon을 반환할 수 있어요.
객체를 단순화할 때 이 함수는 그 정점과 정점 제거로 생긴 모서리 사이의 거리가 지정된 허용 오차(tolerance) 범위 안에 있을 때만 정점을 제거해요.
본문
구문
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 |
+------------------+-------------------------+------------------------+