ST_SimplifyPreserveTopology — Returns a simplified and valid version of a geometry, using the Douglas-Peucker algorithm.
geometry ST_SimplifyPreserveTopology(
geometry geomA, float tolerance)
;
더글러스-패커(Douglas-Peucker) 알고리즘을 이용해서 입력 도형의 "단순화"된 버전을 반환합니다. 유효하지 않은 파생 도형(특히 폴리곤)을 생성하지 않을 것입니다. 실제로는 [멀티]라인, [멀티]폴리곤과만 작동하지만, 어떤 종류의 도형도 입력할 수 있다고 해도 과언은 아닙니다. 객체별 기반으로 단순화 작업을 하기 때문에 이 함수에 도형 집합도 입력할 수 있습니다.
GEOS 모듈로 실행
1.3.3 버전부터 사용할 수 있습니다.
ST_Simplify 함수와 동일하지만, ST_SimplifyPreserveTopology는 과단순화(oversimplification)를 막아준다는 사실을 알 수 있습니다. 원을 단순화해도 기껏해야 사각형에서 끝납니다.
SELECT ST_Npoints(geom) As np_before, ST_NPoints(ST_SimplifyPreserveTopology(geom,0.1)) As np01_notbadcircle, ST_NPoints(ST_SimplifyPreserveTopology(geom,0.5)) As np05_notquitecircle, ST_NPoints(ST_SimplifyPreserveTopology(geom,1)) As np1_octagon, ST_NPoints(ST_SimplifyPreserveTopology(geom,10)) As np10_square, ST_NPoints(ST_SimplifyPreserveTopology(geom,100)) As np100_stillsquare FROM (SELECT ST_Buffer('POINT(1 3)', 10,12) As geom) As foo; --result-- np_before | np01_notbadcircle | np05_notquitecircle | np1_octagon | np10_square | np100_stillsquare -----------+-------------------+---------------------+-------------+---------------+------------------- 49 | 33 | 17 | 9 | 5 | 5