3. 拓扑和拓扑几何管理
3.1. AddTopoGeometryColumn
AddTopoGeometryColumn
— 向现有表中添加一个拓扑几何列,并将这个新列注册为拓扑中的一个层。 并返回新的layer_id。
3.1.1. 概要
integer AddTopoGeometryColumn(varchar topology_name, varchar schema_name, varchar table_name, varchar column_name,varchar feature_type);
integer AddTopoGeometryColumn(varchar topology_name, varchar schema_name, varchar table_name, varchar column_name,varchar feature_type, integer child_layer);
3.1.2. 描述
每个TopoGeometry对象都属于特定拓扑的特定层。 在创建TopoGeometry对象之前,您需要创建它的TopologyLayer。 拓扑层是特征表与拓扑的关联。 它还包含类型和层次结构信息。 我们使用AddTopoGeometryColumn()函数创建一个层:
此函数将向表中添加请求的列,并向拓扑中添加记录。 层表与所有给定的信息。
如果不指定child_layer,该层将包含基本拓扑几何(由基本拓扑元素组成)。 否则,该层将包含分层拓扑几何(由来自child_layer的拓扑几何组成)。
一旦创建了层(它的id由AddTopoGeometryColumn函数返回),就可以在其中构造TopoGeometry对象了
有效的feature_type是:POINT, LINE, POLYGON, COLLECTION
3.1.3. 样例
-- 注意,在本例中,我们在ma_topo模式中创建了新表
-- 尽管我们可以在不同的模式中创建它——在这种情况下,topology_name和schema_name将是不同的
CREATE SCHEMA ma;
CREATE TABLE ma.parcels(gid serial, parcel_id varchar(20) PRIMARY KEY, address text);
SELECT topology.AddTopoGeometryColumn('ma_topo', 'ma', 'parcels', 'topo', 'POLYGON');
CREATE SCHEMA ri;
CREATE TABLE ri.roads(gid serial PRIMARY KEY, road_name text);
SELECT topology.AddTopoGeometryColumn('ri_topo', 'ri', 'roads', 'topo', 'LINE');
3.2. DropTopology
DropTopology
— 谨慎使用:删除拓扑模式并从拓扑中删除其引用。 拓扑表,并从geometry_columns表中引用到该模式中的表。
3.2.1. 概要
integer DropTopology(varchar topology_schema_name);
3.2.2. 描述
删除拓扑模式并从拓扑中删除其引用。 拓扑表和对该模式中来自geometry_columns表的表的引用。 使用此函数时应小心,因为它可能会破坏您所关心的数据。 如果模式不存在,它只是删除命名模式中的引用条目。
3.2.3. 样例
- 级联删除ma_topo模式,并删除拓扑中对它的所有引用。 拓扑和geometry_columns。
SELECT topology.DropTopology('ma_topo');
3.3. DropTopoGeometryColumn
DropTopoGeometryColumn
— 在schema_name模式中从名为table_name的表中删除拓扑几何列,并从topology.layer中表注销这些列。
3.3.1. 概要
text DropTopoGeometryColumn(varchar schema_name, varchar table_name, varchar column_name);
3.3.2. 描述
从模式schema_name中名为table_name的表中删除拓扑几何学列,并从拓扑表中注销这些列。 返回drop状态的摘要。 注意:它首先将所有值设置为NULL,然后删除以绕过参考完整性检查。
3.3.3. 样例
SELECT topology.DropTopoGeometryColumn('ma_topo', 'parcel_topo', 'topo');
3.4. Populate_Topology_Layer
Populate_Topology_Layer
— 将缺少的条目添加到拓扑中。 从拓扑表中读取元数据。
3.4.1. 概要
setof record Populate_Topology_Layer();
3.4.2. 描述
将缺少的条目添加到拓扑中。 通过检查表上的拓扑约束来分层表。 此函数用于在用拓扑数据恢复模式后修复拓扑编目中的条目。
它返回创建的条目列表。 返回的列是schema_name, table_name, feature_column。
3.4.3. 样例
SELECT CreateTopology('strk_topo');
CREATE SCHEMA strk;
CREATE TABLE strk.parcels(gid serial, parcel_id varchar(20) PRIMARY KEY, address text);
SELECT topology.AddTopoGeometryColumn('strk_topo', 'strk', 'parcels', 'topo', 'POLYGON');
-- 这将不会返回任何记录,因为该功能已经注册
SELECT * FROM topology.Populate_Topology_Layer();
-- 重建
TRUNCATE TABLE topology.layer;
SELECT * FROM topology.Populate_Topology_Layer();
SELECT topology_id,layer_id, schema_name As sn, table_name As tn, feature_column As fc FROM topology.layer;
schema_name | table_name | feature_column |
---|---|---|
strk | parcels | topo |
topology_id | layer_id | sn | tn | fc |
---|---|---|---|---|
2 | 2 | strk | parcels | topo |
3.5 TopologySummary
TopologySummary
— 接受拓扑名称,并提供拓扑中对象类型的汇总
3.5.1. 概要
text TopologySummary(varchar topology_schema_name);
3.5.2. 描述
接受拓扑名称并提供拓扑中对象类型的汇总
3.5.3. 样例
SELECT topology.topologysummary('city_data');
topologysummary |
---|
Topology city_data (329), SRID 4326, precision: 0 22 nodes, 24 edges, 10 faces, 29 topogeoms in 5 layers |
Layer 1, type Polygonal (3), 9 topogeoms Deploy: features.land_parcels.feature
Layer 2, type Puntal (1), 8 topogeoms Deploy: features.traffic_signs.feature
Layer 3, type Lineal (2), 8 topogeoms Deploy: features.city_streets.feature
Layer 4, type Polygonal (3), 3 topogeoms Hierarchy level 1, child layer 1 Deploy: features.big_parcels.feature
Layer 5, type Puntal (1), 1 topogeoms Hierarchy level 1, child layer 2 Deploy: features.big_signs.feature|
3.6. ValidateTopology
ValidateTopology -返回一组validatetopology_returntype对象,这些对象详细描述了拓扑问题
3.6.1. 概要
setof validatetopology_returntype ValidateTopology(varchar topology_schema_name);
3.6.2. 描述
返回一组validatetopology_returntype对象,该对象详细描述了拓扑问题。 可能的错误列表和返回的id代表如下所示:
Error | id1 | id2 |
---|---|---|
edge crosses node(边缘交叉节点) | edge_id | node_id |
invalid edge(无效的边缘) | edge_id | null |
edge not simple(边不简单) | edge_id | null |
edge crosses edge(边缘交叉边缘) | edge_id | edge_id |
edge start node geometry mis-match(边缘开始节点几何不匹配) | edge_id | node_id |
edge end node geometry mis-match(边缘末端节点几何不匹配) | edge_id | node_id |
face without edges(没有边缘的面) | face_id | null |
face has no rings(面不包含环) | face_id | null |
face overlaps face(面重叠) | face_id | face_id |
face within face inner(面包含) | face_id | outer face_id |
3.6.3. 样例
SELECT * FROM topology.ValidateTopology('ma_topo');
error | id1 | id2 |
---|---|---|
face without edges | 0 |