在 Standard 或 Advanced 许可等级下可用。
在 ArcGIS Pro 中创建新拓扑的主要方法为创建拓扑向导。了解如何创建拓扑后,可以使用一系列地理处理工具自动执行此操作。
使用“创建拓扑”向导创建拓扑
要使用创建拓扑向导创建拓扑,请完成以下步骤:
- 在目录窗格中,右键单击要向其中添加拓扑的要素数据集,然后单击新建 > 创建拓扑。
- 为新拓扑命名并指定拓扑容差。默认值被设置为要素数据集的 X,Y 容差。理想的默认值是 0.001 米或以空间参考单位表示的等效值(例如,单位是英尺时为 0.003281 英尺,单位是以十进制度数表示的经纬度时为 0.0000000556 度)。
- 选中要参与拓扑的要素类复选框。系统将显示要素数据集中所有要素类的列表。
- 为拓扑中的各要素类设置坐标精度等级。
如果一个或多个要素类包含坐标 Z 值,则单击 Z 属性设置 Z 等级。Z 容差用于区分彼此容差范围内折点的 Z 高度或高程。例如,两个高度不同的相邻要素之间可能共享一条公用边。但是,只有各自的 X,Y 折点会定位于同一点,Z 值或高度则不然。Z 容差可在验证和聚类操作期间帮助正确处理此信息。Z 容差默认值与 X,Y 容差默认值相同(以实际单位表示为 0.001 米)。
- 单击下一步。
- 现在,您需要在参与要素类及其子类型之间创建拓扑规则。在要素类 1 下拉菜单中,选择一个要素类。如果要创建与子类型相关联的规则,请使用子类型 1 下拉菜单选择一个子类型。
- 在下一列中,选择相应的规则。规则可帮助您构造要素间的空间关系以控制和验证要素共享几何的方式。
- 如果适用于您选择的规则,请从要素类 2 和子类型 2 下拉菜单中选择第二个要素类和子类型,以完成规则。
- 请重复步骤 6、7 和 8,以视需要创建规则。完成操作后,请单击下一步。
查看之前所有配置的摘要信息,然后单击完成。现在已将新拓扑添加到要素数据集。随即显示提示消息,询问您是否要验证要素数据集中的拓扑。如果要素类中已有数据,请单击是。
使用地理处理工具创建拓扑
ArcToolbox 包含一系列用于拓扑的地理处理工具。拓扑工具集位于“数据管理”工具箱中。
使用这些工具可构建用于创建和修改地理数据库拓扑的脚本。脚本可用于自动执行一系列任务和构建可重复工作流。
要使用创建拓扑工具创建拓扑,请完成以下步骤:
- 选择将参与拓扑的要素类。使用向拓扑中添加要素类地理处理工具将这些要素类添加到拓扑当中。
多次运行此工具,直到添加了您希望参与拓扑的所有要素类为止。
- 现在,您已创建拓扑并向其中添加了一些要素类,随后可以使用向拓扑中添加规则地理处理工具添加一系列规则。拓扑规则可帮助您构造要素间的空间关系以控制和验证要素共享几何的方式。
您可能还需要多次运行此工具,直到向拓扑中添加完所有所需的拓扑规则为止。
- 现在,您已在要素数据集中设置一个新拓扑,其中包含参与的要素类和拓扑规则。如果要素类中含有数据,则可以使用验证拓扑地理处理工具来验证拓扑。
以下为独立 Python 脚本示例,您可使用该脚本创建拓扑并向拓扑中添加多个要素类和规则:
可使用此独立 Python 脚本创建拓扑、添加多个要素类和规则以及验证拓扑。
import arcpy
import os
# Input variables
input_dataset = r"C:\MyProjects\MyProject.gdb\fds"
topo_name = "Topology"
cluster_tol = 0.001
input_fc = r"C:\MyProjects\MyProject.gdb\fds\fc1 1 1;C:\MyProjects\MyProject.gdb\fds\fc2 1 1"
rules = r"'Must Not Overlap (Area)' C:\MyProjects\MyProject.gdb\fds\fc1 # C:\MyProjects\MyProject.gdb\fds\fc1 #;'Must Be Covered By Feature Class Of (Area-Area)' C:\MyProjects\MyProject.gdb\fds\fc1 # C:\MyProjects\MyProject.gdb\fds\fc2 #"
validate = "true"
# Create the topology
out_topo = arcpy.CreateTopology_management(input_dataset, topo_name, cluster_tol)
print("Created topology.")
# Loop through the list of feature classes and add them to the topology
input_fcL = input_fc.split(";")
for fc in input_fcL:
param = fc.rsplit(" ", 2)
in_fc = param[0]
xy_rank = param[1]
z_rank = param[2]
arcpy.AddFeatureClassToTopology_management(out_topo, in_fc, xy_rank, z_rank)
print(arcpy.GetMessages())
# Loop through the list of rules and add rules to the topology
rulesL = rules.split(";")
for rule in rulesL:
r = rule.rsplit(" ", 4)
rule_type = r[0].replace("'","")
in_fc1 = r[1]
subtype1 = r[2]
in_fc2 = r[3]
subtype2 = r[4]
arcpy.AddRuleToTopology_management(out_topo, rule_type, in_fc1, subtype1, in_fc2, subtype2)
print(arcpy.GetMessages())
# Validate the topology
if validate == "true":
try:
arcpy.ValidateTopology_management(out_topo)
except:
print(arcpy.GetMessages())
print("Finished.")