|
|
Řádek 39: |
Řádek 39: |
| </pre> | | </pre> |
|
| |
|
| === Vytvoření topologického schématu 'urbanarea' === | | === Vytvoření topologického schématu 'kraje' === |
|
| |
|
| * [http://postgis.org/documentation/manual-svn/CreateTopology.html CreateTopology()] | | * [http://postgis.org/documentation/manual-svn/CreateTopology.html CreateTopology()] |
|
| |
|
| <source lang=sql> | | <source lang=sql> |
| SELECT topology.createtopology('urbanarea', 3358); | | SELECT topology.createtopology('kraje', 2065, 1); |
| </source> | | </source> |
|
| |
|
Řádek 54: |
Řádek 54: |
| id | name | srid | precision | hasz | | id | name | srid | precision | hasz |
| ----+-----------+------+-----------+------ | | ----+-----------+------+-----------+------ |
| 1 | urbanarea | 3358 | 0 | f | | 1 | kraje | 2065 | 1 | f |
| </pre> | | </pre> |
|
| |
|
| \dt urbanarea. | | \dt kraje. |
|
| |
|
| <pre> | | <pre> |
| List of relations
| | List of relations |
| Schema | Name | Type | Owner
| | Schema | Name | Type | Owner |
| -----------+-----------+-------+--------
| | --------+-----------+-------+--------- |
| urbanarea | edge_data | table | martin | | kraje | edge_data | table | postgis |
| urbanarea | face | table | martin | | kraje | face | table | postgis |
| urbanarea | node | table | martin | | kraje | node | table | postgis |
| urbanarea | relation | table | martin | | kraje | relation | table | postgis |
| </pre>
| |
| | |
| <pre>
| |
| \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)
| |
| </pre>
| |
| <pre>
| |
| \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
| |
| </pre>
| |
| <pre>
| |
| \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)
| |
| </pre>
| |
| <pre>
| |
| \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')
| |
| </pre> | | </pre> |
|
| |
|
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;
Feature table 'kraje'
CREATE TABLE kraje AS SELECT nuts3, st_multi(st_union(geom)) as geom FROM gis1.obce GROUP BY nuts3;
SELECT nuts3,st_geometrytype(geom) AS type, ROUND(st_area(geom)/1e6) AS area from kraje;
nuts3 | type | area
-------+-----------------+-------
CZ042 | ST_MultiPolygon | 5341
CZ081 | ST_MultiPolygon | 5566
CZ053 | ST_MultiPolygon | 4523
CZ032 | ST_MultiPolygon | 7566
CZ041 | ST_MultiPolygon | 3317
CZ071 | ST_MultiPolygon | 5141
CZ061 | ST_MultiPolygon | 6924
CZ051 | ST_MultiPolygon | 3163
CZ062 | ST_MultiPolygon | 7065
CZ021 | ST_MultiPolygon | 11013
CZ072 | ST_MultiPolygon | 3961
CZ031 | ST_MultiPolygon | 10071
CZ052 | ST_MultiPolygon | 4767
CZ011 | ST_MultiPolygon | 496
(14 rows)
Vytvoření topologického schématu 'kraje'
SELECT topology.createtopology('kraje', 2065, 1);
SELECT * from topology.topology;
id | name | srid | precision | hasz
----+-----------+------+-----------+------
1 | kraje | 2065 | 1 | f
\dt kraje.
List of relations
Schema | Name | Type | Owner
--------+-----------+-------+---------
kraje | edge_data | table | postgis
kraje | face | table | postgis
kraje | node | table | postgis
kraje | relation | table | postgis
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).
Sestavení topologie (Geometry → TopoGeometry)
Externí odkazy