11. PostGIS - topologie vektorových dat

Přednáška

-- nahrání dat ve formě simple features
CREATE TABLE p2 (fid serial PRIMARY KEY, geom geometry(Polygon));
INSERT INTO p2 (geom) VALUES (ST_GeomFromText('Polygon(
 (0 0, 100 0, 100 100, 0 100, 0 0))'));
INSERT INTO p2 (geom) VALUES (ST_GeomFromText('Polygon(
 (100 0, 200 0, 200 100, 100 100, 100 0))'));

-- vytvoření topologického schématu
SELECT topology.CreateTopology('topo_p2');

-- přidání topologického datového atributu 
SELECT topology.AddTopoGeometryColumn('topo_p2', 'topo_test', 'p2', 'topo', 'POLYGON');

-- sestavení topologických elementů na zakladě jednoduchých prvků
UPDATE p2 SET topo = topology.toTopoGeom(geom, 'topo_p2', 1);

-- seznam uzlů
SELECT node_id,containing_face,st_astext(geom) from topo_p2.node;

-- seznam hran
SELECT edge_id,start_node,end_node,next_left_edge,next_right_edge,
 left_face,right_face,st_astext(geom) from topo_p2.edge;

-- seznam stěn
SELECT face_id,ST_AsText(mbr) from topo_p2.face;

-- vypsání topogeometrie 
SELECT fid,ST_AsText(geom),(topo).* FROM p2;

-- dotaz na topologická primitiva
SELECT f.face_id, ST_AsText(mbr)
FROM
(
SELECT *
FROM p2
WHERE fid = 1
) as p2
JOIN topo_p2.face AS f
ON (topo).id = f.face_id;

-- validace
SELECT topology.TopologySummary('topo_p2');
SELECT topology.ValidateTopology('topo_p2');

Cvičení

-- vybereme část parcel na území Hl. města Prahy
CREATE TABLE parcely AS
 SELECT * FROM ruian_praha.parcely WHERE katastralniuzemikod = 732583;

-- přídáme primární klíč
ALTER TABLE parcely ADD PRIMARY KEY (ogc_fid);

-- a prostorové indexy
CREATE INDEX ON parcely USING gist (geom);

-- topologické schéma
SELECT topology.CreateTopology('topo_parcely', 5514);

-- topologický atribut
SELECT topology.AddTopoGeometryColumn('topo_parcely', 'topo_test',
 'parcely', 'topo', 'POLYGON');

-- sestavení topologických primitiv
UPDATE parcely SET topo = topology.toTopoGeom(geom, 'topo_parcely', 1, 0.01);

Další materiály