Name

ST_Snap — 입력 도형의 분절 구간과 꼭짓점을 참조 도형의 꼭짓점으로 스냅시킵니다.

Synopsis

geometry ST_Snap(geometry input, geometry reference, float tolerance);

설명

Snaps the vertices and segments of a geometry to another Geometry's vertices. A snap distance tolerance is used to control where snapping is performed. The result geometry is the input geometry with the vertices snapped. If no snapping occurs then the input geometry is returned unchanged.

한 도형을 또다른 도형으로 스냅시키면, (노드 및 교차점 계산 과정에서 문제를 일으킬 수 있는) 거의 일치하는 경계선을 제거함으로써 오버레이 연산을 강력하게 향상시킬 수 있습니다.

스냅을 너무 많이 하면 유효하지 않은 지형을 생성하는 결과를 가져올 수 있기 때문에, 경험식(heuristics)을 통해 어떤 경우 안전하게 스냅시킬 수 있는지 알아내서 스냅시킬 꼭짓점의 개수 및 위치를 결정합니다. 하지만 이런 방식은 몇몇 가능할 수도 있는 스냅 작업을 제외하게 될 수도 있습니다.

[Note]

반환되는 도형이 단순성(ST_IsSimple 참조) 및 유효성(ST_IsValid 참조)을 잃을 수도 있습니다.

GEOS 모듈로 실행

2.0.0 버전부터 사용할 수 있습니다.

예시

라인스트링과 함께 표출된 멀티폴리곤(스냅 작업 전)

허용 거리 1.01을 기준으로 라인스트링에 스냅된 멀티폴리곤. 새로운 멀티폴리곤은 참조 라인스트링과 함께 표출됩니다.

SELECT ST_AsText(ST_Snap(poly,line, ST_Distance(poly,line)*1.01)) AS polysnapped
FROM (SELECT
   ST_GeomFromText('MULTIPOLYGON(
     ((26 125, 26 200, 126 200, 126 125, 26 125 ),
      ( 51 150, 101 150, 76 175, 51 150 )),
      (( 151 100, 151 200, 176 175, 151 100 )))') As poly,
       ST_GeomFromText('LINESTRING (5 107, 54 84, 101 100)') As line
        ) As foo;

                             polysnapped
---------------------------------------------------------------------
 MULTIPOLYGON(((26 125,26 200,126 200,126 125,101 100,26 125),
 (51 150,101 150,76 175,51 150)),((151 100,151 200,176 175,151 100)))
                                

허용 거리 1.25를 기준으로 라인스트링에 스냅된 멀티폴리곤. 새로운 멀티폴리곤은 참조 라인스트링과 함께 표출됩니다.

SELECT ST_AsText(
    ST_Snap(poly,line, ST_Distance(poly,line)*1.25)
  ) AS polysnapped
FROM (SELECT
  ST_GeomFromText('MULTIPOLYGON(
    (( 26 125, 26 200, 126 200, 126 125, 26 125 ),
      ( 51 150, 101 150, 76 175, 51 150 )),
      (( 151 100, 151 200, 176 175, 151 100 )))') As poly,
       ST_GeomFromText('LINESTRING (5 107, 54 84, 101 100)') As line
        ) As foo;

                             polysnapped
---------------------------------------------------------------------
MULTIPOLYGON(((5 107,26 200,126 200,126 125,101 100,54 84,5 107),
(51 150,101 150,76 175,51 150)),((151 100,151 200,176 175,151 100)))
                                

허용 거리 1.01을 기준으로 원래 멀티폴리곤에 스냅된 라인스트링. 새로운 라인스트링은 참조 멀티폴리곤과 함께 표출됩니다.

SELECT ST_AsText(
   ST_Snap(line, poly, ST_Distance(poly,line)*1.01)
  ) AS linesnapped
FROM (SELECT
  ST_GeomFromText('MULTIPOLYGON(
     ((26 125, 26 200, 126 200, 126 125, 26 125),
      (51 150, 101 150, 76 175, 51 150 )),
      ((151 100, 151 200, 176 175, 151 100)))') As poly,
       ST_GeomFromText('LINESTRING (5 107, 54 84, 101 100)') As line
        ) As foo;

              linesnapped
----------------------------------------
 LINESTRING(5 107,26 125,54 84,101 100)
                                

허용 거리 1.25를 기준으로 원래 멀티폴리곤에 스냅된 라인스트링. 새로운 라인스트링은 참조 멀티폴리곤과 함께 표출됩니다.

SELECT ST_AsText(
 ST_Snap(line, poly, ST_Distance(poly,line)*1.25)
  ) AS linesnapped
FROM (SELECT
  ST_GeomFromText('MULTIPOLYGON(
     (( 26 125, 26 200, 126 200, 126 125, 26 125 ),
      (51 150, 101 150, 76 175, 51 150 )),
      ((151 100, 151 200, 176 175, 151 100 )))') As poly,
       ST_GeomFromText('LINESTRING (5 107, 54 84, 101 100)') As line
        ) As foo;
              linesnapped
---------------------------------------
LINESTRING(26 125,54 84,101 100)
                                

참고

ST_SnapToGrid