toTopoGeom — Converts a simple Geometry into a topo geometry.
topogeometry toTopoGeom(
geometry geom, varchar toponame, integer layer_id, float8 tolerance)
;
topogeometry toTopoGeom(
geometry geom, topogeometry topogeom, float8 tolerance)
;
단순 도형을 TopoGeometry 로 변환합니다.
기저 지형에 입력 도형을 표현해야 하는 지형 원시형을 추가할 것입니다. 이 지형 원시형이 기존 지형을 분할할 수도 있습니다. 분할된 지형들은 relation
테이블에서 출력 TopoGeometry와 관련될 것입니다.
기존 TopoGeometry 객체는 (topogeom
을 설정할 경우 제외할 수도 있습니다) 자기 형상을 유지할 것입니다.
tolerance
를 설정하면 입력 도형을 기존 원시형에 스냅시키는 데 허용 오차를 이용할 것입니다.
변종 1의 경우 입력 지형(toponame
)의 입력 레이어(layer_id
)에 대해 새 TopoGeometry를 생성할 것입니다.
변종 2의 경우, 기존 TopoGeometry(toponame
)에 작업중 생성된 원시형을 추가할 것입니다. 기존 TopoGeometry의 최종 형상에 공간을 추가할 수도 있습니다. 새 형상이 예전 형상을 완전히 대체하도록 하려면 clearTopoGeom 을 참조하십시오.
2.0 버전부터 사용할 수 있습니다.
개선 사항: 2.1.0 버전에서 기존 TopoGeometry를 입력받는 버전을 추가했습니다.
다음은 완전히 자급자족하는 독립적인 작업 흐름(workflow)입니다.
-- do this if you don't have a topology setup already -- creates topology not allowing any tolerance SELECT topology.CreateTopology('topo_boston_test', 2249); -- create a new table CREATE TABLE nei_topo(gid serial primary key, nei varchar(30)); --add a topogeometry column to it SELECT topology.AddTopoGeometryColumn('topo_boston_test', 'public', 'nei_topo', 'topo', 'MULTIPOLYGON') As new_layer_id; new_layer_id ----------- 1 --use new layer id in populating the new topogeometry column -- we add the topogeoms to the new layer with 0 tolerance INSERT INTO nei_topo(nei, topo) SELECT nei, topology.toTopoGeom(geom, 'topo_boston_test', 1) FROM neighborhoods WHERE gid BETWEEN 1 and 15; --use to verify what has happened -- SELECT * FROM topology.TopologySummary('topo_boston_test'); -- summary-- Topology topo_boston_test (5), SRID 2249, precision 0 61 nodes, 87 edges, 35 faces, 15 topogeoms in 1 layers Layer 1, type Polygonal (3), 15 topogeoms Deploy: public.nei_topo.topo
-- Shrink all TopoGeometry polygons by 10 meters UPDATE nei_topo SET topo = toTopoGeom(ST_Buffer(topo, -10), clearTopoGeom(topo), 0); -- Get the no-one-lands left by the above operation -- I think GRASS calls this "polygon0 layer" SELECT ST_GetFaceGeometry('topo_boston_test', f.face_id) FROM topo_boston_test.face f WHERE f.face_id > 0 -- don't consider the universe face AND NOT EXISTS ( -- check that no TopoGeometry references the face SELECT * FROM topo_boston_test.relation WHERE layer_id = 1 AND element_id = f.face_id );