mirror of
https://git.osgeo.org/gitea/postgis/postgis
synced 2024-10-26 10:02:50 +00:00
162 lines
5.9 KiB
MySQL
162 lines
5.9 KiB
MySQL
|
--
|
||
|
-- From examples in chapter 1.12.1 of
|
||
|
-- "Spatial Topology and Network Data Models" (Oracle manual)
|
||
|
--
|
||
|
-- Modified to use postgis-based topology model.
|
||
|
-- Loads the whole topology represented in Figure 1-1 of the
|
||
|
-- manual, creates TopoGeometry objects and associations.
|
||
|
--
|
||
|
|
||
|
--ORA--------------------------------
|
||
|
--ORA---- Main steps for using the topology data model with a topology
|
||
|
--ORA---- built from edge, node, and face data
|
||
|
--ORA--------------------------------
|
||
|
--ORA---- ...
|
||
|
--ORA---- 3. Create feature tables.
|
||
|
--ORA---- 4. Associate feature tables with the topology.
|
||
|
--ORA---- 5. Initialize topology
|
||
|
--ORA---- 6. Load feature tables using the SDO_TOPO_GEOMETRY constructor.
|
||
|
|
||
|
|
||
|
BEGIN;
|
||
|
|
||
|
-- 3. Create feature tables
|
||
|
|
||
|
CREATE SCHEMA features;
|
||
|
|
||
|
CREATE TABLE features.land_parcels ( -- Land parcels (selected faces)
|
||
|
feature_name VARCHAR PRIMARY KEY) with oids;
|
||
|
CREATE TABLE features.city_streets ( -- City streets (selected edges)
|
||
|
feature_name VARCHAR PRIMARY KEY) with oids;
|
||
|
CREATE TABLE features.traffic_signs ( -- Traffic signs (selected nodes)
|
||
|
feature_name VARCHAR PRIMARY KEY) with oids;
|
||
|
|
||
|
|
||
|
|
||
|
-- 4. Associate feature tables with the topology.
|
||
|
-- Add the three topology geometry layers to the CITY_DATA topology.
|
||
|
-- Any order is OK.
|
||
|
SELECT topology.AddTopoGeometryColumn('city_data', 'features', 'land_parcels', 'feature', 'POLYGON');
|
||
|
SELECT topology.AddTopoGeometryColumn('city_data', 'features', 'traffic_signs','feature', 'POINT');
|
||
|
SELECT topology.AddTopoGeometryColumn('city_data', 'features', 'city_streets','feature', 'LINE');
|
||
|
|
||
|
-- As a result, Spatial generates a unique TG_LAYER_ID for each layer in
|
||
|
-- the topology metadata (USER/ALL_SDO_TOPO_METADATA).
|
||
|
|
||
|
--NOTYET---- 5. Initialize topology metadata.
|
||
|
--NOTYET--EXECUTE topology.INITIALIZE_METADATA('CITY_DATA');
|
||
|
|
||
|
|
||
|
-- 6. Load feature tables using the CreateTopoGeom constructor.
|
||
|
-- Each topology feature can consist of one or more objects (face, edge, node)
|
||
|
-- of an appropriate type. For example, a land parcel can consist of one face,
|
||
|
-- or two or more faces, as specified in the SDO_TOPO_OBJECT_ARRAY.
|
||
|
-- There are typically fewer features than there are faces, nodes, and edges.
|
||
|
-- In this example, the only features are these:
|
||
|
-- Area features (land parcels): P1, P2, P3, P4, P5
|
||
|
-- Point features (traffic signs): S1, S2, S3, S4
|
||
|
-- Linear features (roads/streets): R1, R2, R3, R4
|
||
|
|
||
|
-- 6A. Load LAND_PARCELS table.
|
||
|
-- P1
|
||
|
INSERT INTO features.land_parcels VALUES ('P1', -- Feature name
|
||
|
topology.CreateTopoGeom(
|
||
|
'city_data', -- Topology name
|
||
|
3, -- Topology geometry type (polygon/multipolygon)
|
||
|
1, -- TG_LAYER_ID for this topology (from topology.layer)
|
||
|
'{{3,3},{6,3}}') -- face_id:3 face_id:6
|
||
|
);
|
||
|
|
||
|
-- P2
|
||
|
INSERT INTO features.land_parcels VALUES ('P2', -- Feature name
|
||
|
topology.CreateTopoGeom(
|
||
|
'city_data', -- Topology name
|
||
|
3, -- Topology geometry type (polygon/multipolygon)
|
||
|
1, -- TG_LAYER_ID for this topology (from ALL_SDO_TOPO_METADATA)
|
||
|
'{{4,3},{7,3}}'));
|
||
|
-- P3
|
||
|
INSERT INTO features.land_parcels VALUES ('P3', -- Feature name
|
||
|
topology.CreateTopoGeom(
|
||
|
'city_data', -- Topology name
|
||
|
3, -- Topology geometry type (polygon/multipolygon)
|
||
|
1, -- TG_LAYER_ID for this topology (from topology.layer)
|
||
|
'{{5,3},{8,3}}'));
|
||
|
-- P4
|
||
|
INSERT INTO features.land_parcels VALUES ('P4', -- Feature name
|
||
|
topology.CreateTopoGeom(
|
||
|
'city_data', -- Topology name
|
||
|
3, -- Topology geometry type (polygon/multipolygon)
|
||
|
1, -- TG_LAYER_ID for this topology (from topology.layer)
|
||
|
'{{2,3}}'));
|
||
|
-- P5 (Includes F1, but not F9.)
|
||
|
INSERT INTO features.land_parcels VALUES ('P5', -- Feature name
|
||
|
topology.CreateTopoGeom(
|
||
|
'city_data', -- Topology name
|
||
|
3, -- Topology geometry type (polygon/multipolygon)
|
||
|
1, -- TG_LAYER_ID for this topology (from topology.layer)
|
||
|
'{{1,3}}'));
|
||
|
|
||
|
-- 6B. Load TRAFFIC_SIGNS table.
|
||
|
-- S1
|
||
|
INSERT INTO features.traffic_signs VALUES ('S1', -- Feature name
|
||
|
topology.CreateTopoGeom(
|
||
|
'city_data', -- Topology name
|
||
|
1, -- Topology geometry type (point)
|
||
|
2, -- TG_LAYER_ID for this topology (from topology.layer)
|
||
|
'{{14,1}}'));
|
||
|
-- S2
|
||
|
INSERT INTO features.traffic_signs VALUES ('S2', -- Feature name
|
||
|
topology.CreateTopoGeom(
|
||
|
'city_data', -- Topology name
|
||
|
1, -- Topology geometry type (point)
|
||
|
2, -- TG_LAYER_ID for this topology (from topology.layer)
|
||
|
'{{13,1}}'));
|
||
|
-- S3
|
||
|
INSERT INTO features.traffic_signs VALUES ('S3', -- Feature name
|
||
|
topology.CreateTopoGeom(
|
||
|
'city_data', -- Topology name
|
||
|
1, -- Topology geometry type (point)
|
||
|
2, -- TG_LAYER_ID for this topology (from topology.layer)
|
||
|
'{{6,1}}'));
|
||
|
-- S4
|
||
|
INSERT INTO features.traffic_signs VALUES ('S4', -- Feature name
|
||
|
topology.CreateTopoGeom(
|
||
|
'city_data', -- Topology name
|
||
|
1, -- Topology geometry type (point)
|
||
|
2, -- TG_LAYER_ID for this topology (from topology.layer)
|
||
|
'{{4,1}}'));
|
||
|
|
||
|
-- 6C. Load CITY_STREETS table.
|
||
|
-- (Note: "R" in feature names is for "Road", because "S" is used for signs.)
|
||
|
-- R1
|
||
|
INSERT INTO features.city_streets VALUES ('R1', -- Feature name
|
||
|
topology.CreateTopoGeom(
|
||
|
'city_data', -- Topology name
|
||
|
2, -- Topology geometry type (line string)
|
||
|
3, -- TG_LAYER_ID for this topology (from topology.layer)
|
||
|
'{{9,2},{-10,2}}')); -- E9, E10
|
||
|
-- R2
|
||
|
INSERT INTO features.city_streets VALUES ('R2', -- Feature name
|
||
|
topology.CreateTopoGeom(
|
||
|
'city_data', -- Topology name
|
||
|
2, -- Topology geometry type (line string)
|
||
|
3, -- TG_LAYER_ID for this topology (from topology.layer)
|
||
|
'{{4,2},{-5,2}}')); -- E4, E5
|
||
|
-- R3
|
||
|
INSERT INTO features.city_streets VALUES ('R3', -- Feature name
|
||
|
topology.CreateTopoGeom(
|
||
|
'city_data', -- Topology name
|
||
|
2, -- Topology geometry type (line string)
|
||
|
3, -- TG_LAYER_ID for this topology (from topology.layer)
|
||
|
'{{25,2}}'));
|
||
|
-- R4
|
||
|
INSERT INTO features.city_streets VALUES ('R4', -- Feature name
|
||
|
topology.CreateTopoGeom(
|
||
|
'city_data', -- Topology name
|
||
|
2, -- Topology geometry type (line string)
|
||
|
3, -- TG_LAYER_ID for this topology (from topology.layer)
|
||
|
'{{3,2}}'));
|
||
|
|
||
|
END;
|
||
|
|