首页 > 代码库 > ArcEngine拓扑

ArcEngine拓扑

空间拓扑描述的是自然界地理对象的空间位置关系-相邻,重合,连通等,是地理对象空间属性的一部分.目前ESRI提供的数据存储方式中,CoverageGeoDatabase能够建立拓扑,Shape格式的数据不能建立拓扑

1.     GeoDataBase建立拓扑的基础 

1).GeoDatabase实现拓扑的基础是”几何重合”,Geodatabase中的地理对象都是实体存储,主要是根据节点坐标是否重合来判断地理要素之间是否存在某种拓扑关系 

2).拓扑只能在要素集(FeatureDataset)中创建,参加创建拓扑的所有要素类(FeatureClass)必须具有相同的空间参考 

3).参与拓扑创建的必须是简单要素类,注记类(Annoca),尺寸和几何网络要素类不能参与拓扑的创建 

4)单个要素集可以创建多个拓扑 
  

2.     GeoDatabase拓扑中的重要概念 

1).规则:表达要素之间的空间关系,ESRI提供了27中拓扑关系(见后面附表

2).拓扑容限.决定在多大范围内要素能够被捕捉在一起(也称为聚类容限(cluster tolerance)) 

3).拓扑等级 控制在拓扑验证的过程中节点移动的级别.这时候,等级低的要素类将向等级高的要素类移动,最高级别为1,最低级别为-50 

4).脏区(dirty area):脏区就是参与拓扑创建时被修改的地理要素(,,)的区域 

5).错误要素(Error Feature):只要素类中不符合拓扑规则的要素或者要素的一部分 

 

3.     使用拓扑的详细步骤及代码 

1).创建拓扑 

  ITopology是一个不可创建类,创建拓扑需通过调用ITopologyContainer:CreateTopology方法来建立拓扑,拓扑的规则要用ITopologyRule接口来表达,必须加到ITopologyRuleContainer

public void CreateTopology(IFeatureDataset featuredataset, string topologyName,esriTopologyRuleType rulename,double clusterTolerance,int classID) {    try   {    ITopologyContainer topologyContainer = (ITopologyContainer)featureDataset;    ITopology topology=topologyContainer.CreateTopology(topologyName, clusterTolerance, -1, "");    IFeatureClassContainer featureclassContainer = (IFeatureClassContainer)featureDataset;    ITopologyRuleContainer topologyRuleContainer = (ITopologyRuleContainer)topology;    ITopologyRule topologyRule = new TopologyRuleClass();    topologyRule.TopologyRuleType = rulename; 
topologyRule.OriginClassID
= classID; if (topologyRuleContainer.get_CanAddRule(topologyRule)) { topologyRuleContainer.AddRule(topologyRule); } } catch (COMException ex) { MessageBox.Show(ex.
}
}

2).验证拓扑 

通过调用ITopology:ValidateTopology 方法来验证指定区域内的拓扑,没有版本的拓扑可以在任何时候验证,指定版本的拓扑必须在编辑会话中验证 

例如验证整个区域的拓扑的代码片段,假设已经存在创建好的拓扑ITopology topo 

IGeoDataset geodataset=(IGeoDataset) topo; topo. ValidateTopology(geodataset. Extent.Envelope); 

 

ESRI的拓扑规则 

esriTRTAny 
任何拓扑规则查询拓扑的时候用 

esriTRTFeatureLargerThanClusterTolerance 
地理要素小于聚类容限被删除 

esriTRTAreaNoGaps 
面是封闭的 

esriTRTAreaNoOverlap 
面不相交 

esriTRTAreaCoveredByAreaClass 
The rule is an area covered by area class rule. 

esriTRTAreaAreaCoverEachOther 
两个区域完全重合 

esriTRTAreaCoveredByArea 
一个区域被另一个区域覆盖 

esriTRTAreaNoOverlapArea 
一个面没有相交的面 

esriTRTLineCoveredByAreaBoundary 
线被区域的边线覆盖 

esriTRTPointCoveredByAreaBoundary 
点在面的边界上 

esriTRTPointProperlyInsideArea 
点完全在面内 

esriTRTLineNoOverlap 
无重合的线 

esriTRTLineNoIntersection 
无相交的线 

esriTRTLineNoDangles 
无摇摆的线 

esriTRTLineNoPseudos 
线不存在伪节点 

esriTRTLineCoveredByLineClass 
The rule is a line covered by line class rule. 

esriTRTLineNoOverlapLine 
The rule is a line-no overlap line rule. 

esriTRTPointCoveredByLine 
点被线覆盖 

esriTRTPointCoveredByLineEndpoint 
点被线的尾节点覆盖 

esriTRTAreaBoundaryCoveredByLine 
一个面的边界被线覆盖 

esriTRTAreaBoundaryCoveredByAreaBoundary 
一个面的边界被另一个面的边界覆盖 

esriTRTLineNoSelfOverlap 
不存在自重合的线 

esriTRTLineNoSelfIntersect 
不存在自相交的线 

esriTRTLineNoIntersectOrInteriorTouch 
The rule is a line-no intersect or interior touch rule. 

esriTRTLineEndpointCoveredByPoint 
线的尾节点被点覆盖 

esriTRTAreaContainPoint 
面包含点 

esriTRTLineNoMultipart 
The rule is a line cannot be multipart rule.

 

ArcEngine拓扑