PostGIS Topology

Z GeoWikiCZ

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)
Klad mapových listu TM50 (území ČR)
Klad mapových listu TM50 (území ČR)

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)

Externí odkazy