PostGIS Topology: Porovnání verzí
| Řádek 175: | Řádek 175: | ||
* [http://2010.foss4g.org/presentations/3555.pdf State of the art of FOSS4G for topology and network analysis] | * [http://2010.foss4g.org/presentations/3555.pdf State of the art of FOSS4G for topology and network analysis] | ||
* [http://www.postgis.org/documentation/manual-svn/Topology.html PostGIS 2.0 Topology section of manual] | * [http://www.postgis.org/documentation/manual-svn/Topology.html PostGIS 2.0 Topology section of manual] | ||
* [http://cs.wikipedia.org/wiki/Topologie Topogie] {{bullet}} [http://cs.wikipedia.org/wiki/Sedm_most%C5%AF_m%C4%9Bsta_Kr%C3%A1lovce Sedm mostů města Královce] {{bullet}} [http://en.wikipedia.org/wiki/Geographic_information_system#Topological_modeling Topological modeling] | |||
{{Databáze}} | {{Databáze}} | ||
{{GIS}} | {{GIS}} | ||
{{GFOSS}} | {{GFOSS}} | ||
Verze z 30. 3. 2011, 22:23
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
Feature table 'urbanarea'
\d urbanarea
Table "public.urbanarea"
Column | Type | Modifiers
--------------+-------------------+-------------------------------------------------------------
ogc_fid | integer | not null default nextval('urbanarea_ogc_fid_seq'::regclass)
wkb_geometry | geometry |
cat | integer |
objectid | integer |
ua | character varying |
name | character varying |
ua_type | character varying |
Indexes:
"urbanarea_pk" PRIMARY KEY, btree (ogc_fid)
"urbanarea_geom_idx" gist (wkb_geometry)
Check constraints:
"enforce_dims_wkb_geometry" CHECK (st_ndims(wkb_geometry) = 2)
"enforce_geotype_wkb_geometry" CHECK (geometrytype(wkb_geometry) = 'POLYGON'::text OR wkb_geometry IS NULL)
"enforce_srid_wkb_geometry" CHECK (st_srid(wkb_geometry) = 900914)
SELECT cat, ua, name, ST_GeometryType(wkb_geometry) from urbanarea limit 5;cat | ua | name | st_geometrytype -----+-------+------------+----------------- 1 | 29305 | Farmville | ST_Polygon 2 | 92404 | Washington | ST_Polygon 3 | 35380 | Greenville | ST_Polygon 4 | 46315 | La Grange | ST_Polygon 5 | 45397 | Kinston | ST_Polygon
Vytvoření topologického schématu 'urbanarea'
SELECT topology.createtopology('urbanarea');SELECT * from topology.topology;id | name | srid | precision ----+-----------+------+----------- 1 | urbanarea | -1 | 0
\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 |
Indexes:
"node_primary_key" PRIMARY KEY, btree (node_id)
"node_gist" gist (geom)
Check constraints:
"enforce_dims_geom" CHECK (st_ndims(geom) = 2)
"enforce_geotype_geom" CHECK (geometrytype(geom) = 'POINT'::text OR geom IS NULL)
"enforce_srid_geom" CHECK (st_srid(geom) = (-1))
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 |
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)
Check constraints:
"enforce_dims_geom" CHECK (st_ndims(geom) = 2)
"enforce_geotype_geom" CHECK (geometrytype(geom) = 'LINESTRING'::text OR geom IS NULL)
"enforce_srid_geom" CHECK (st_srid(geom) = (-1))
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 |
Indexes:
"face_primary_key" PRIMARY KEY, btree (face_id)
"face_gist" gist (mbr)
Check constraints:
"enforce_dims_mbr" CHECK (st_ndims(mbr) = 2)
"enforce_geotype_mbr" CHECK (geometrytype(mbr) = 'POLYGON'::text OR mbr IS NULL)
"enforce_srid_mbr" CHECK (st_srid(mbr) = (-1))
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)
Přidání atributu topologie do feature table
select topology.AddTopoGeometryColumn('urbanarea', 'public', '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 | 2 | public | urbanarea | topo | 3 | 0 |