Name

AddFace — 지형에 표면 원시형(face primitive)을 등록하고 그 식별자를 반환합니다.

Synopsis

integer AddFace(varchar toponame, geometry apolygon, boolean force_new=false);

설명

지형에 표면 원시형(face primitive)을 등록하고 그 식별자를 반환합니다.

새로 추가된 표면의 left_face 및 right_face 항목이 정확한 값을 가지도록 그 외곽선을 형성하는 경계선들 및 표면이 담고 있는 경계선들을 업데이트합니다. 표면이 담고 있는 고립된 노드들도 containing_face 항목이 정확한 값을 가지도록 업데이트할 것입니다.

[Note]

이 함수는 edge 테이블의 next_left_edge 및 next_right_edge 항목을 이용하지도 설정하지도 않습니다.

대상 지형이 유효하다고 (자체 교차하는 경계선을 담고 있지 않다고) 가정합니다. 기존 경계선들이 폴리곤 외곽선을 완전하게 정의하고 있지 않거나, 또는 폴리곤이 기존 표면과 중첩할 경우 예외가 발생합니다.

apolygon 도형과 동일한 표면이 이미 존재할 경우, force_new 가 (기본값인) 거짓이면 기존 표면의 표면 ID를 반환하고, force_new 가 참이면 새로 등록된 표면에 새 ID를 할당할 것입니다.

[Note]

기존 표면을 새로 등록할 경우 (force_new = true) 경계선, 노드, 관계성 테이블에 있는 기존 표면에 대한 예전 참조들을 해결하기 위한 어떤 작동도 하지 않을 것입니다. 또 기존 표면 레코드의 MBR 항목도 업데이트하지 않을 것입니다. 호출자가 해결해야 할 문제입니다.

[Note]

apolygon 도형의 srid 와 지형에 대해 정의된 srid 가 동일해야만 합니다. 그렇지 않을 경우 유효하지 않은 공간 참조 시스템 오류가 발생할 것입니다.

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

예시


-- first add the edges we use generate_series as an iterator (the below
-- will only work for polygons with < 10000 points because of our max in gs)
SELECT topology.AddEdge('ma_topo', ST_MakeLine(ST_PointN(geom,i), ST_PointN(geom, i + 1) )) As edgeid
    FROM (SELECT  ST_NPoints(geom) AS npt, geom
            FROM
                (SELECT ST_Boundary(ST_GeomFromText('POLYGON((234896.5 899456.7,234914 899436.4,234946.6 899356.9,234872.5 899328.7,
                234891 899285.4,234992.5 899145, 234890.6 899069,234755.2 899255.4,
                234612.7 899379.4,234776.9 899563.7,234896.5 899456.7))', 26986) )  As geom
            )  As geoms) As facen CROSS JOIN generate_series(1,10000) As i
         WHERE i < npt;
-- result --
 edgeid
--------
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
(10 rows)
-- then add the face -

SELECT topology.AddFace('ma_topo',
    ST_GeomFromText('POLYGON((234896.5 899456.7,234914 899436.4,234946.6 899356.9,234872.5 899328.7,
    234891 899285.4,234992.5 899145, 234890.6 899069,234755.2 899255.4,
    234612.7 899379.4,234776.9 899563.7,234896.5 899456.7))', 26986) ) As faceid;
-- result --
faceid
--------
 1