ArcEngine拓扑常用接口_第1页
ArcEngine拓扑常用接口_第2页
ArcEngine拓扑常用接口_第3页
ArcEngine拓扑常用接口_第4页
ArcEngine拓扑常用接口_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

拓扑(Topology)是在同一个要素集(FeatureDataset)下的要素类(FeatureClass)之间的拓扑关系的集合。所以要参与一个拓扑的所有要素类,必须在同一个要素集内(也就是具有同一的空间参考),这样进行的拓扑检查才是精确的。一个要素集可以有多个拓扑,但每个要素类最多只能参与一个拓扑,一个拓扑中可以定义多个规则。进行拓扑分析的过程:一、 建立拓扑(添加拓扑规则)二、 验证拓扑三、 编辑过程中保证拓扑的正确四、 查询系统中存在的拓扑*******************************************************************************一、建立拓扑的方法: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:当要素已参加网络分析(GeometryNetwork)运算的时候,建立拓扑也会出现错误;3:目标要素类是一个注记层或多维图层,不能建立拓扑;4:目标要素类已被注册为有版本,不能建立拓扑;二、进行拓扑验证(validate)的方法:1:在ArcCatalog建立好拓扑后,可以选择直接验证;2:也可以在ArcMap中对建立好的拓扑进行验证(要素必须在编辑状态StartEdit),然后可以进行拓扑的编辑;3:利用程序进行验证;ITopology有一个方法ValidateTopology用来验证指定区域内的拓扑。需要注意没有版本的拓扑可以在任何时候验证。而有版本的拓扑必须在编辑回话中验证。通过验证后,当前的拓扑就可以检查出相应的拓扑错误,并生成拓扑图层ITopologyLayerITopologyLayer其实也是一个layer,继承与layer类。接口说明:ITopologyLayer接口具有一个渲染Renderer的方法,可以根据拓扑错误信息(esriTopologyRenderer)进行分类渲染。三、拓扑编辑:当对拓扑分析验证后,就需要对当前的拓扑错误进行编辑更改。在进行拓扑编辑的时候,我们需要知道一个概念,就是TopologyGraph;什么是TopologyGraph呢?其实就是在进行拓扑分析后,我们要对错误的线、点(因为多边形也是有线和点组成的)进行编辑,来修改当前的要素错误。在编辑前要生成TopologyGraph拓扑图,在拓扑图上显示了需要修改的Nodes、Edges等信息,我们所做的编辑其实就是在TopologyGraph上进行的。上面我提到过ITopologyLayer,当ITopologyLayer建立后,其实在内存中就存在了Cache缓存。拓扑图TopologyGraph的建立就是需要这个ITopologyLayer的Cache来完成的,方法如下://topoLayer是一个打开的拓扑图层ITopologyGraphpTG=topoLayer.Topology.Cache;pTG.Build(pA.Extent,false);建立拓扑图,其中pA.Extent是所要分析的范围;接口说明:在接口的属性方法中,我们可以看到很多对要素编辑的操作。那就对了,对拓扑编辑其实很大一部分是利用这个方法来完成的。如:切割、重建、删除等等。HitTest方法来获取所点击的Edges、Nodes;使用ITopologyNode、ITopologyEdge获取边、点同样实现相应的编辑操作。使用ITopologyErrorFeature接口可以获取产生错误的要素Feature,它继承与Feature类。ITopologyErrorSelection接口操作当前TopologyLayer层下的错误是否可用;ITopologyExtension是当前拓扑的扩展,包括可以设置错误要素的样式symbol等。注意:本接口只能在Desktop许可下获取,Engine不能应用。那么有人会问:“我们对拓扑图层、拓扑要素进行更改颜色,Engine就做不了了?”呵呵,当然不是。别忘了我前面提到过的ITopologyLayer接口利用这个接口我们同样可以对图层进行renderer渲染,具体操作请参考help帮助文档!topologyelements(NodeandEdges)当编辑结束后,我们就可以提交更改了。ITopologyGraph:Post方法提交所做的编辑。部分编辑的代码:***************************************************SetpTopologyGraph=pTopology.CachepTopologyGraph.BuildpMxDoc.ActiveView.Extent,FalseSetpEnumTopologyEdge=pTopologyGraph.EdgesSetpTopologyEdge=pEnumTopologyEdge.Nextbsel=pTopologyGraph.Select(esriTopologySelectionResultNew,pTopologyEdge)SetpAffine=NewAffineTransformation2DpAffine.Move10,10pTopologyGraph.TransformSelectionesriTransformForward,pAffine,FalsepTopologyGraph.PostpGDset.Extent''提交编辑****************************************************这样整个拓扑建立、验证、编辑整个流程就完成了。如果我们想对这个拓扑进行查看,可以使用ITopologyWorkspace::OpenTopology方法来打开拓扑。重要说明:如果我们对当前的拓扑不满意需要删除的话,我们首先要清空当前拓扑中的要素类removeclass(Itopology接口),然后再delete(Dataset接口)拓扑,否则会出现错误。附录:一、拓扑数据图层(ItopologyLayer)中拓扑错误类型:作为图层可以进行renderer渲染,以下也是可以渲染得类型;esriTRAreaErrors0AreaErrorrenderer.esriTRLineErrorsLineErrorrenderer.esriTRPointErrorsPointErrorrenderer.esriTRAreaExceptionsPolygonExceptionrenderer.esriTRLineExceptionsLineExceptionrenderer.esriTRPointExceptions5PointExceptionrenderer.esriTRDirtyAreas6DirtyArearenderer二、Geodatabase的Topology规则:多边形topology规则mustnotoverlay:单要素类,多边形要素相互不能重叠mustnothavegaps:单要素类,连续连接的多边形区域中间不能有空白区(非数据区)containspoint:多边形+点,多边形要素类的每个要素的边界以内必须包含点层中至少一个点boundarymustbecoveredby:多边形+线,多边形层的边界与线层重叠(线层可以有非重叠的更多要素)mustbecoveredbyfeatureclassof:多边形+多边形,第一个多边形层必须被第二个完全覆盖(省与全国的关系)mustbecoveredby:多边形+多边形,第一个多边形层必须把第二个完全覆盖(全国与省的关系)mustnotoverlaywith:多边形+多边形,两个多边形层的多边形不能存在一对相互覆盖的要素mustcovereachother:多边形+多边形,两个多边形的要素必须完全重叠areaboundarymustbecoveredbyboundaryof :多边形+多边形,第一个多边形的各要素必须为第二个的一个或几个多边形完全覆盖mustbeproperlyinsidepolygons:点+多边形,点层的要素必须全部在多边形内mustbecoveredbyboundaryof:点+多边形,点必须在多边形的边界上线topology规则mustnothavedangle:线,不能有悬挂节点mustnothavepseudo-node:线,不能有伪节点mustnotoverlay:线,不能有线重合(不同要素间)mustnotselfoverlay:线,一个要素不能自覆盖mustnotintersect:线,不能有线交*(不同要素间)mustnotselfintersect:线,不能有线自交*mustnotintersectortouchinterrior:线,不能有相交和重叠mustbesinglepart:线,一个线要素只能由一个path组成mustnotcoveredwith:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论