拓扑(Topology)是在同一个要素集(FeatureDataset)下的要素类(Feature Class)之间的拓扑关系的集合。所以要参与一个拓扑的所有要素类,必须在同一个要素集内(也就是具有同一的空间参考),这样进行的拓扑检查才是精确的。一个要素集可以有多个拓扑,但每个要素类最多只能参与一个拓扑,一个拓扑中可以定义多个规则。
进行拓扑分析的过程:
1 建立拓扑(添加拓扑规则)
2 验证拓扑
3 编辑过程中保证拓扑的正确
4 查询系统中存在的拓扑
1 建立拓扑的方法:
(1)利用 ArcCatalog 桌面建立。
(2)使用程序(ArcEngine)开发建立拓扑。
在 Engine 中建立拓扑的实现接口是ITopologyContainer::CreateTopology
,ITopologyContainer::CreateTopology
方法用来创建拓扑。
接口说明:ITopologyContainer
是用来创建、添加、管理拓扑的平台容器。通过本接口用户可以了解当前要素集的拓扑信息,如名称;如果用户仅出于得到要素集拓扑信息的目的,建议不用本接口打开拓扑,而使用IFeatureDatasetNames::TopologyNames
方法就可以快速获取。一旦使用CreateTopology
方法创建拓扑后,本拓扑的参数便不能更改,如想变更则需删除或重新建立新的拓扑。DefaultClusterTolerance
是建立拓扑默认的“容差”。MaximumClusterTolerance
表示最大“容差”。MinimumClusterTolerance
表示最小“容差”。
如果用户在创建拓扑时使用的容差参数位于最大、最小之间 则参数有效,如位于最大与最小之间则按照极值(最大、最小)来处理;注意默认的容差是与最小容差一样的;
建立拓扑规则:
使用ITopologyRuleContainer
接口。
接口说明:IRule
接口是Engine
中的定义规则的接口,其中它的Type
属性有以下几种:
建立拓扑规则我们将使用esriRTTopology
;并通过ITopologyRule
接口来实现拓扑规则。
并通过ITopologyRuleContainer
接口将所定义的规则添加到当前的拓扑中(AddRule方法)。ITopology
接口和ITopologyRuleContainer
接口共同继承于Topology
类,所以可以QI。
注意 建立拓扑时会出现的问题:
(1)当要素集中的所有要素都已经参加建立其它拓扑的时候,使用已使用的要素类新建立拓扑会产生错误。
(2)当要素已参加网络分析(Geometry Network)运算的时候,建立拓扑也会出现错误。
(3)目标要素类是一个注记层或多维图层,不能建立拓扑。
(4)目标要素类已被注册为有版本,不能建立拓扑。
2 进行拓扑验证(validate)的方法:
(1)在ArcCatalog建立好拓扑后,可以选择直接验证。
(2)也可以在ArcMap中对建立好的拓扑进行验证(要素必须在编辑状态 Start Edit),然后可以进行拓扑的编辑。
(3)利用程序进行验证。
ITopology
有一个方法ValidateTopology
用来验证指定区域内的拓扑。需要注意 没有版本的拓扑可以在 任何时候验证。而有版本的拓扑必须在编辑回话中验证。