PostGIS Topology: Porovnání verzí
| Řádek 13: | Řádek 13: | ||
</source> | </source> | ||
=== Feature table ' | === Feature table 'kraje' === | ||
<source lang=sql> | <source lang=sql> | ||
Verze z 9. 4. 2012, 21:30
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
CREATE SCHEMA my_schema;
SET search_path TO my_schema,public;
CREATE TABLE kraje AS SELECT nuts3, st_multi(st_union(geom)) as geom FROM gis1.obce GROUP BY nuts3;
Feature table 'kraje'
SELECT nuts3,st_geometrytype(geom) FROM kraje;
nuts3 | st_geometrytype -------+----------------- CZ042 | ST_MultiPolygon CZ081 | ST_MultiPolygon CZ053 | ST_MultiPolygon CZ032 | ST_MultiPolygon CZ041 | ST_MultiPolygon CZ071 | ST_MultiPolygon CZ061 | ST_MultiPolygon CZ051 | ST_MultiPolygon CZ062 | ST_MultiPolygon CZ021 | ST_MultiPolygon CZ072 | ST_MultiPolygon CZ031 | ST_MultiPolygon CZ052 | ST_MultiPolygon CZ011 | ST_MultiPolygon
Vytvoření topologického schématu 'urbanarea'
SELECT topology.createtopology('urbanarea', 3358);
SELECT * from topology.topology;
id | name | srid | precision | hasz ----+-----------+------+-----------+------ 1 | urbanarea | 3358 | 0 | f
\dt urbanarea.
List of relations Schema | Name | Type | Owner -----------+-----------+-------+-------- urbanarea | edge_data | table | martin urbanarea | face | table | martin urbanarea | node | table | martin urbanarea | relation | table | martin
\d urbanarea.node
Table "urbanarea.node"
Column | Type | Modifiers
-----------------+----------------------+------------------------------------------------------------------
node_id | integer | not null default nextval('urbanarea.node_node_id_seq'::regclass)
containing_face | integer |
geom | geometry(Point,3358) |
Indexes:
"node_primary_key" PRIMARY KEY, btree (node_id)
"node_gist" gist (geom)
Foreign-key constraints:
"face_exists" FOREIGN KEY (containing_face) REFERENCES urbanarea.face(face_id)
Referenced by:
TABLE "urbanarea.edge_data" CONSTRAINT "end_node_exists" FOREIGN KEY (end_node) REFERENCES urbanarea.node(node_id)
TABLE "urbanarea.edge_data" CONSTRAINT "start_node_exists" FOREIGN KEY (start_node) REFERENCES urbanarea.node(node_id)
\d urbanarea.edge_data
Table "urbanarea.edge_data"
Column | Type | Modifiers
---------------------+---------------------------+-----------------------------------------------------------------------
edge_id | integer | not null default nextval('urbanarea.edge_data_edge_id_seq'::regclass)
start_node | integer | not null
end_node | integer | not null
next_left_edge | integer | not null
abs_next_left_edge | integer | not null
next_right_edge | integer | not null
abs_next_right_edge | integer | not null
left_face | integer | not null
right_face | integer | not null
geom | geometry(LineString,3358) |
Indexes:
"edge_data_pkey" PRIMARY KEY, btree (edge_id)
"edge_gist" gist (geom)
"edge_left_face_idx" btree (left_face)
"edge_right_face_idx" btree (right_face)
Foreign-key constraints:
"end_node_exists" FOREIGN KEY (end_node) REFERENCES urbanarea.node(node_id)
"left_face_exists" FOREIGN KEY (left_face) REFERENCES urbanarea.face(face_id)
"next_left_edge_exists" FOREIGN KEY (abs_next_left_edge) REFERENCES urbanarea.edge_data(edge_id) DEFERRABLE INITIALLY DEFERRED
"next_right_edge_exists" FOREIGN KEY (abs_next_right_edge) REFERENCES urbanarea.edge_data(edge_id) DEFERRABLE INITIALLY DEFERRED
"right_face_exists" FOREIGN KEY (right_face) REFERENCES urbanarea.face(face_id)
"start_node_exists" FOREIGN KEY (start_node) REFERENCES urbanarea.node(node_id)
Referenced by:
TABLE "urbanarea.edge_data" CONSTRAINT "next_left_edge_exists" FOREIGN KEY (abs_next_left_edge) REFERENCES urbanarea.edge_data(edge_id) DEFERRABLE INITIALLY DEFERRED
TABLE "urbanarea.edge_data" CONSTRAINT "next_right_edge_exists" FOREIGN KEY (abs_next_right_edge) REFERENCES urbanarea.edge_data(edge_id) DEFERRABLE INITIALLY DEFERRED
\d urbanarea.face
Table "urbanarea.face"
Column | Type | Modifiers
---------+------------------------+------------------------------------------------------------------
face_id | integer | not null default nextval('urbanarea.face_face_id_seq'::regclass)
mbr | geometry(Polygon,3358) |
Indexes:
"face_primary_key" PRIMARY KEY, btree (face_id)
"face_gist" gist (mbr)
Referenced by:
TABLE "urbanarea.node" CONSTRAINT "face_exists" FOREIGN KEY (containing_face) REFERENCES urbanarea.face(face_id)
TABLE "urbanarea.edge_data" CONSTRAINT "left_face_exists" FOREIGN KEY (left_face) REFERENCES urbanarea.face(face_id)
TABLE "urbanarea.edge_data" CONSTRAINT "right_face_exists" FOREIGN KEY (right_face) REFERENCES urbanarea.face(face_id)
\d urbanarea.relation
Table "urbanarea.relation"
Column | Type | Modifiers
--------------+---------+-----------
topogeo_id | integer | not null
layer_id | integer | not null
element_id | integer | not null
element_type | integer | not null
Indexes:
"relation_layer_id_key" UNIQUE, btree (layer_id, topogeo_id, element_id, element_type)
Triggers:
relation_integrity_checks BEFORE INSERT OR UPDATE ON urbanarea.relation FOR EACH ROW EXECUTE PROCEDURE relationtrigger('2', 'urbanarea')
Přidání atributu topologie do feature table
select topology.AddTopoGeometryColumn('urbanarea', 'my_schema', 'urbanarea', 'topo', 'POLYGON');
\d urbanarea ... topo | topology.topogeometry | ...
SELECT * FROM topology.layer;
topology_id | layer_id | schema_name | table_name | feature_column | feature_type | level | child_id
-------------+----------+-------------+------------+----------------+--------------+-------+----------
1 | 1 | my_schema | urbanarea | topo | 3 | 0 |
Poznámka: feature_type '3' odpovídá 'face' (1 - node, 2 - edge).