PostGIS Topology
PostGIS Topology je rozšíření pro PostGIS umožňující topologickou správu vektorových dat v prostředí PostGIS/PostgreSQL.
Více přednášky Úvod do zpracování prostorových dat.
Příklad
Data z cvičné databáze pgis_student.
CREATE SCHEMA my_schema;
SET search_path TO my_schema,public,topology,gis1;
Feature table 'tm50_cr'
CREATE TABLE tm50_cr AS SELECT DISTINCT k.ogc_fid,k.tm50,k.geom FROM kltm50 AS k JOIN obce AS o ON ST_Overlaps(k.geom, o.geom);
SELECT COUNT(*) FROM tm50_cr;
count ------- 289 (1 row)

Vytvoření topologického schématu 'tm50_cr'
SELECT topology.createtopology('tm50_cr', 2065, 1);
Argumenty:
- 2065 (EPSG)
- 1 (přesnost v mapových jednotkách, tj. v tomto případě v metrech)
SELECT * from topology.topology;
id | name | srid | precision | hasz ----+-----------+------+-----------+------ 1 | tm50_cr | 2065 | 1 | f
\dt tm50_cr.
List of relations Schema | Name | Type | Owner ---------+-----------+-------+--------- tm50_cr | edge_data | table | postgis tm50_cr | face | table | postgis tm50_cr | node | table | postgis tm50_cr | relation | table | postgis (4 rows)
Přidání atributu topologie do feature table
select topology.AddTopoGeometryColumn('tm50_cr', 'my_schema', 'tm50_cr', 'topo', 'POLYGON');
SELECT * FROM topology.layer;
topology_id | layer_id | schema_name | table_name | feature_column | feature_type | level | child_id -------------+----------+-------------+------------+----------------+--------------+-------+---------- 1 | 1 | my_schema | tm50_cr | topo | 3 | 0 |
Poznámka: feature_type '3' odpovídá 'face' (1 - node, 2 - edge).
Sestavení topologie (Geometry → TopoGeometry)
UPDATE tm50_cr set topo = topology.toTopoGeom(geom, 'tm50_cr', 1);
SELECT tm50,topo from tm50_cr limit 3;
tm50 | topo -----------+------------ M-33-29-D | (10,1,1,3) M-33-30-C | (10,1,2,3) M-33-30-D | (10,1,3,3) (3 rows)
Počet uzlů:
SELECT count(*) from tm50_cr.node;
count ------- 313 (1 row)
Počet hran:
SELECT count(*) from tm50_cr.edge_data;
count ------- 601 (1 row)
Počet stěn:
SELECT count(*) from tm50_cr.face;
count ------- 290 (1 row)