1.6 Topology Data Types
The main data type associated with the Topology Data Model is SDO_TOPO_GEOMETRY, which describes a topology geometry.
The SDO_TOPO_GEOMETRY type has several constructors and member functions. This section describes the topology model types, constructors, and member functions.
- SDO_TOPO_GEOMETRY Type
- SDO_TOPO_GEOMETRY Constructors
- GET_GEOMETRY Member Function
- GET_TGL_OBJECTS Member Function
- GET_TOPO_ELEMENTS Member Function
- SDO_LIST_TYPE Type
- SDO_EDGE_ARRAY and SDO_NUMBER_ARRAY Types
Parent topic: Topology Data Model Overview
1.6.1 SDO_TOPO_GEOMETRY Type
The description of a topology geometry is stored in a single row, in a single column of object type SDO_TOPO_GEOMETRY in a user-defined table. The object type SDO_TOPO_GEOMETRY is defined as:
CREATE TYPE sdo_topo_geometry AS OBJECT (tg_type NUMBER, tg_id NUMBER, tg_layer_id NUMBER, topology_id NUMBER);
The SDO_TOPO_GEOMETRY type has the attributes shown in Table 1-7.
Table 1-7 SDO_TOPO_GEOMETRY Type Attributes
Attribute | Explanation |
---|---|
Type of topology geometry: 1 = point or multipoint, 2 = line string or multiline string, 3 = polygon or multipolygon, 4 = heterogeneous collection |
|
Unique ID number (generated by Spatial) for the topology geometry |
|
ID number for the topology geometry layer to which the topology geometry belongs. (This number is generated by Spatial, and it is unique within the topology geometry layer.) |
|
Unique ID number (generated by Spatial) for the topology |
Each topology geometry in a topology is uniquely identified by the combination of its TG_ID and TG_LAYER_ID values.
You can use an attribute name in a query on an object of SDO_TOPO_GEOMETRY. Example 1-3 shows SELECT statements that query each attribute of the FEATURE column of the CITY_STREETS table, which is defined in Example 1-12 in Topology Examples (PL/SQL).
Example 1-3 SDO_TOPO_GEOMETRY Attributes in Queries
SELECT s.feature.tg_type FROM city_streets s; SELECT s.feature.tg_id FROM city_streets s; SELECT s.feature.tg_layer_id FROM city_streets s; SELECT s.feature.topology_id FROM city_streets s;
Parent topic: Topology Data Types
1.6.2 SDO_TOPO_GEOMETRY Constructors
The SDO_TOPO_GEOMETRY type has constructors for inserting and updating topology geometry objects. The constructors can be classified into two types, depending on the kind of objects they use:
-
Constructors that specify the lowest-level topological elements (nodes, edges, and faces). These constructors have at least one attribute of type SDO_TOPO_OBJECT_ARRAY and no attributes of type SDO_TGL_OBJECT_ARRAY.
-
Constructors that specify elements in the child level. These constructors have at least one attribute of type SDO_TGL_OBJECT_ARRAY and no attributes of type SDO_TOPO_OBJECT_ARRAY.
To insert and update topology geometry objects when the topology does not have a topology geometry layer hierarchy or when the operation affects the lowest level (level 0) in the hierarchy, you must use constructors that specify the lowest-level topological elements (nodes, edges, and faces). (Topology geometry layer hierarchy is explained in Topology Geometry Layer Hierarchy.)
To insert and update topology geometry objects when the topology has a topology geometry layer hierarchy and the operation affects a level other than the lowest in the hierarchy, you can use either or both types of constructor. That is, for each topology geometry object to be inserted or updated, you can use either of the following:
-
To insert and update a topology geometry object consisting of the lowest-level topological elements (for example, to create a tract from faces), use the format that has at least one attribute of type SDO_TOPO_OBJECT_ARRAY and no attributes of type SDO_TGL_OBJECT_ARRAY.
-
To insert and update a topology geometry object consisting of features at the next lower level (for example, create a tract from block groups), use the format that has at least one attribute of type SDO_TGL_OBJECT_ARRAY and no attributes of type SDO_TOPO_OBJECT_ARRAY.
This section describes the available SDO_TOPO_GEOMETRY constructors.
Note:
An additional SDO_TOPO_GEOMETRY constructor with the same attributes as the type definition (tg_type, tg_id, tg_layer_id, topology_id
) is for Oracle internal use only.
- Constructors for Insert Operations: Specifying Topological Elements
- Constructors for Insert Operations: Specifying Lower-Level Features
- Constructors for Update Operations: Specifying Topological Elements
- Constructors for Update Operations: Specifying Lower-Level Features
Parent topic: Topology Data Types
1.6.2.1 Constructors for Insert Operations: Specifying Topological Elements
The SDO_TOPO_GEOMETRY type has the following constructors for insert operations in which you specify topological elements (faces, nodes, or edges). You must use one of these formats to create new topology geometry objects when the topology does not have a topology geometry layer hierarchy or when the operation affects the lowest level (level 0) in the hierarchy, and you can use one of these formats to create new topology geometry objects when the operation affects a level higher than level 0 in the hierarchy:
SDO_TOPO_GEOMETRY (topology VARCHAR2, tg_type NUMBER, tg_layer_id NUMBER, topo_ids SDO_TOPO_OBJECT_ARRAY) SDO_TOPO_GEOMETRY (topology VARCHAR2, table_name VARCHAR2, column_name VARCHAR2, tg_type NUMBER, topo_ids SDO_TOPO_OBJECT_ARRAY)
The SDO_TOPO_OBJECT_ARRAY type is defined as a VARRAY of SDO_TOPO_OBJECT objects.
The SDO_TOPO_OBJECT type has the following two attributes:
(topo_id NUMBER, topo_type NUMBER)
The TG_TYPE and TOPO_IDS attribute values must be within the range of values from the <topology-name>_RELATION$ table (described in Relationship Information Table) for the specified topology.
Example 1-4 shows two SDO_TOPO_GEOMETRY constructors, one in each format. Each constructor inserts a topology geometry into the LAND_PARCELS table, which is defined in Example 1-12 in Topology Examples (PL/SQL).
Example 1-4 INSERT Using Constructor with SDO_TOPO_OBJECT_ARRAY
INSERT INTO land_parcels VALUES ('P1', -- Feature name SDO_TOPO_GEOMETRY( 'CITY_DATA', -- Topology name 3, -- Topology geometry type (polygon/multipolygon) 1, -- TG_LAYER_ID for this topology (from ALL_SDO_TOPO_METADATA) SDO_TOPO_OBJECT_ARRAY ( SDO_TOPO_OBJECT (3, 3), -- face_id = 3 SDO_TOPO_OBJECT (6, 3))) -- face_id = 6 ); INSERT INTO land_parcels VALUES ('P1A', -- Feature name SDO_TOPO_GEOMETRY( 'CITY_DATA', -- Topology name 'LAND_PARCELS', -- Table name 'FEATURE', -- Column name 3, -- Topology geometry type (polygon/multipolygon) SDO_TOPO_OBJECT_ARRAY ( SDO_TOPO_OBJECT (3, 3), -- face_id = 3 SDO_TOPO_OBJECT (6, 3))) -- face_id = 6 );
Parent topic: SDO_TOPO_GEOMETRY Constructors
1.6.2.2 Constructors for Insert Operations: Specifying Lower-Level Features
The SDO_TOPO_GEOMETRY type has the following constructors for insert operations in which you specify features in the next lower level of the hierarchy. You can use one of these formats to create new topology geometry objects when the operation affects a level higher than level 0 in the hierarchy:
SDO_TOPO_GEOMETRY (topology VARCHAR2, tg_type NUMBER, tg_layer_id NUMBER, topo_ids SDO_TGL_OBJECT_ARRAY) SDO_TOPO_GEOMETRY (topology VARCHAR2, table_name VARCHAR2, column_name VARCHAR2, tg_type NUMBER, topo_ids SDO_TGL_OBJECT_ARRAY)
The SDO_TGL_OBJECT_ARRAY type is defined as a VARRAY of SDO_TGL_OBJECT objects.
The SDO_TGL_OBJECT type has the following two attributes:
(tgl_id NUMBER, tg_id NUMBER)
Example 1-5 shows an SDO_TOPO_GEOMETRY constructor that inserts a row into the BLOCK_GROUPS table, which is the feature table for the Block Groups level in the topology geometry layer hierarchy. The Block Groups level is the parent of the Land Parcels level at the bottom of the hierarchy.
Example 1-5 INSERT Using Constructor with SDO_TGL_OBJECT_ARRAY
INSERT INTO block_groups VALUES ('BG1', -- Feature name SDO_TOPO_GEOMETRY('LAND_USE_HIER', 3, -- Topology geometry type (polygon/multipolygon) 2, -- TG_LAYER_ID for block groups (from ALL_SDO_TOPO_METADATA) SDO_TGL_OBJECT_ARRAY ( SDO_TGL_OBJECT (1, 1), -- land parcel ID = 1 SDO_TGL_OBJECT (1, 2))) -- land parcel ID = 2 );
Parent topic: SDO_TOPO_GEOMETRY Constructors
1.6.2.3 Constructors for Update Operations: Specifying Topological Elements
The SDO_TOPO_GEOMETRY type has the following constructors for update operations in which you specify topological elements (faces, nodes, or edges). You must use one of these formats to update topology geometry objects when the topology does not have a topology geometry layer hierarchy or when the operation affects the lowest level (level 0) in the hierarchy, and you can use one of these formats to update topology geometry objects when the operation affects a level higher than level 0 in the hierarchy:
SDO_TOPO_GEOMETRY (topology VARCHAR2, tg_type NUMBER, tg_layer_id NUMBER, add_topo_ids SDO_TOPO_OBJECT_ARRAY, delete_topo_ids SDO_TOPO_OBJECT_ARRAY) SDO_TOPO_GEOMETRY (topology VARCHAR2, table_name VARCHAR2, column_name VARCHAR2, tg_type NUMBER, add_topo_ids SDO_TOPO_OBJECT_ARRAY, delete_topo_ids SDO_TOPO_OBJECT_ARRAY)
For example, you could use one of these constructor formats to add an edge to a linear feature or to remove an obsolete edge from a feature.
The SDO_TOPO_OBJECT_ARRAY type definition and the requirements for the TG_TYPE and TOPO_IDS attribute values are as described in Constructors for Insert Operations: Specifying Topological Elements.
You can specify values for both the ADD_TOPO_IDS and DELETE_TOPO_IDS attributes, or you can specify values for one attribute and specify the other as null; however, you cannot specify null values for both ADD_TOPO_IDS and DELETE_TOPO_IDS.
Example 1-6 shows two SDO_TOPO_GEOMETRY constructors, one in each format. Each constructor removes two faces from the CITY_DATA
topology in the LAND_PARCELS table, which is defined in Example 1-12 in Topology Examples (PL/SQL).
Example 1-6 UPDATE Using Constructor with SDO_TOPO_OBJECT_ARRAY
UPDATE land_parcels l SET l.feature = SDO_TOPO_GEOMETRY( 'CITY_DATA', -- Topology name 3, -- Topology geometry type (polygon/multipolygon) 1, -- TG_LAYER_ID for this topology (from ALL_SDO_TOPO_METADATA) NULL, -- No topological elements to be added SDO_TOPO_OBJECT_ARRAY ( SDO_TOPO_OBJECT (3, 3), -- face_id = 3 SDO_TOPO_OBJECT (6, 3))) -- face_id = 6 WHERE l.feature_name = 'P1'; UPDATE land_parcels l SET l.feature = SDO_TOPO_GEOMETRY( 'CITY_DATA', -- Topology name 'LAND_PARCELS', -- Table name 'FEATURE', -- Column name 3, -- Topology geometry type (polygon/multipolygon) NULL, -- No topological elements to be added SDO_TOPO_OBJECT_ARRAY ( SDO_TOPO_OBJECT (3, 3), -- face_id = 3 SDO_TOPO_OBJECT (6, 3))) -- face_id = 6 WHERE l.feature_name = 'P1A';
Parent topic: SDO_TOPO_GEOMETRY Constructors
1.6.2.4 Constructors for Update Operations: Specifying Lower-Level Features
The SDO_TOPO_GEOMETRY type has the following constructors for update operations in which you specify features in the next lower level of the hierarchy. You can use one of these formats to update topology geometry objects when the operation affects a level higher than level 0 in the hierarchy:
SDO_TOPO_GEOMETRY (topology VARCHAR2, tg_type NUMBER, tg_layer_id NUMBER, add_topo_ids SDO_TGL_OBJECT_ARRAY, delete_topo_ids SDO_TGL_OBJECT_ARRAY) SDO_TOPO_GEOMETRY (topology VARCHAR2, table_name VARCHAR2, column_name VARCHAR2, tg_type NUMBER, add_topo_ids SDO_TGL_OBJECT_ARRAY, delete_topo_ids SDO_TGL_OBJECT_ARRAY)
For example, you could use one of these constructor formats to add an edge to a linear feature or to remove an obsolete edge from a feature.
The SDO_TGL_OBJECT_ARRAY type definition and the requirements for its attribute values are as described in Constructors for Insert Operations: Specifying Lower-Level Features.
You can specify values for both the ADD_TOPO_IDS and DELETE_TOPO_IDS attributes, or you can specify values for one attribute and specify the other as null; however, you cannot specify null values for both ADD_TOPO_IDS and DELETE_TOPO_IDS.
Example 1-7 shows two SDO_TOPO_GEOMETRY constructors, one in each format. Each constructor deletes the land parcel with the ID value of 2 from a feature (named BG1
in the first format and BG1A
in the second format, though each feature has the same definition) from the CITY_DATA
topology in the BLOCK_GROUPS table, which is the feature table for the Block Groups level in the topology geometry layer hierarchy. The Block Groups level is the parent of the Land Parcels level at the bottom of the hierarchy.
Example 1-7 UPDATE Using Constructor with SDO_TGL_OBJECT_ARRAY
UPDATE block_groups b SET b.feature = SDO_TOPO_GEOMETRY( 'LAND_USE_HIER', 3, -- Topology geometry type (polygon/multipolygon) 2, -- TG_LAYER_ID for block groups (from ALL_SDO_TOPO_METADATA) null, -- No IDs to add SDO_TGL_OBJECT_ARRAY ( SDO_TGL_OBJECT (1, 2)) -- land parcel ID = 2 ) WHERE b.feature_name = 'BG1'; UPDATE block_groups b SET b.feature = SDO_TOPO_GEOMETRY( 'LAND_USE_HIER', 'BLOCK_GROUPS', -- Feature table 'FEATURE', -- Feature column 3, -- Topology geometry type (polygon/multipolygon) null, -- No IDs to add SDO_TGL_OBJECT_ARRAY ( SDO_TGL_OBJECT (1, 2)) -- land parcel ID = 2 ) WHERE b.feature_name = 'BG1A';
Parent topic: SDO_TOPO_GEOMETRY Constructors
1.6.3 GET_GEOMETRY Member Function
The SDO_TOPO_GEOMETRY type has a member function GET_GEOMETRY, which you can use to return the SDO_GEOMETRY object for the topology geometry object.
Example 1-8 uses the GET_GEOMETRY member function to return the SDO_GEOMETRY object for the topology geometry object associated with the land parcel named P1
.
Example 1-8 GET_GEOMETRY Member Function
SELECT l.feature_name, l.feature.get_geometry() FROM land_parcels l WHERE l.feature_name = 'P1'; FEATURE_NAME ------------------------------ L.FEATURE.GET_GEOMETRY()(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, -------------------------------------------------------------------------------- P1 SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 3, 1), SDO_ORDINATE_ARRAY( 21, 14, 21, 22, 9, 22, 9, 14, 9, 6, 21, 6, 21, 14))
Parent topic: Topology Data Types
1.6.4 GET_TGL_OBJECTS Member Function
The SDO_TOPO_GEOMETRY type has a member function GET_TGL_OBJECTS, which you can use to return the SDO_TOPO_OBJECT_ARRAY object for a topology geometry object in a geometry layer with a hierarchy level greater than 0 (zero) in a topology with a topology geometry layer hierarchy. (If the layer is at hierarchy level 0 or is in a topology that does not have a topology geometry layer hierarchy, this method returns a null value.)
The SDO_TGL_OBJECT_ARRAY type is described in Constructors for Insert Operations: Specifying Lower-Level Features.
Example 1-9 uses the GET_TGL_OBJECTS member function to return the SDO_TOPO_OBJECT_ARRAY object for the topology geometry object associated with the block group named BG2
.
Example 1-9 GET_TGL_OBJECTS Member Function
SELECT bg.feature_name, bg.feature.get_tgl_objects() FROM block_groups bg WHERE bg.feature_name = 'BG2'; FEATURE_NAME ------------------------------ BG.FEATURE.GET_TGL_OBJECTS()(TGL_ID, TG_ID) -------------------------------------------------------------------------------- BG2 SDO_TGL_OBJECT_ARRAY(SDO_TGL_OBJECT(1, 3), SDO_TGL_OBJECT(1, 4))
Parent topic: Topology Data Types
1.6.5 GET_TOPO_ELEMENTS Member Function
The SDO_TOPO_GEOMETRY type has a member function GET_TOPO_ELEMENTS, which you can use to return the SDO_TOPO_OBJECT_ARRAY object for the topology geometry object.
The SDO_TOPO_OBJECT_ARRAY type is described in Constructors for Insert Operations: Specifying Topological Elements.
Example 1-8 uses the GET_TOPO_ELEMENTS member function to return the SDO_TOPO_OBJECT_ARRAY object for the topology geometry object associated with the land parcel named P1
.
Example 1-10 GET_TOPO_ELEMENTS Member Function
SELECT l.feature_name, l.feature.get_topo_elements() FROM land_parcels l WHERE l.feature_name = 'P1'; FEATURE_NAME ------------------------------ L.FEATURE.GET_TOPO_ELEMENTS()(TOPO_ID, TOPO_TYPE) -------------------------------------------------------------------------------- P1 SDO_TOPO_OBJECT_ARRAY(SDO_TOPO_OBJECT(3, 3), SDO_TOPO_OBJECT(6, 3))
Parent topic: Topology Data Types
1.6.6 SDO_LIST_TYPE Type
The SDO_LIST_TYPE type is used to store the EDGE_ID values of island edges and NODE_ID values of island nodes in a face. The SDO_LIST_TYPE type is defined as:
CREATE TYPE sdo_list_type as VARRAY(2147483647) OF NUMBER;
Parent topic: Topology Data Types
1.6.7 SDO_EDGE_ARRAY and SDO_NUMBER_ARRAY Types
The SDO_EDGE_ARRAY type is used to specify the coordinates of attached edges affected by a node move operation. The SDO_EDGE_ARRAY type is defined as:
CREATE TYPE sdo_edge_array as VARRAY(1000000) OF MDSYS.SDO_NUMBER_ARRAY;
The SDO_NUMBER_ARRAY type is a general-purpose type used by Spatial for arrays. The SDO_NUMBER_ARRAY type is defined as:
CREATE TYPE sdo_number_array as VARRAY(1048576) OF NUMBER;
Parent topic: Topology Data Types