PostGIS Topology: Porovnání verzí

Z GeoWikiCZ
Řá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>



Verze z 9. 4. 2012, 21:40

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