ITopologicalOperator
作为空间分析重要部分的拓扑关系运算,ArcGISEngine类库中将拓扑关系运算功能函数方法封装在ITopologicalOperator接口。
属性:Boundary
Boundary:几何图形的边界属性。面的边界是多条折线;线的边界是与起始终止点相一致的多点;多点边界是空对象。
属性:IsKnownSimple
IsKnownSimple:如当前几何图形是简单对象返回true,否则返回false;它反映了图形是否进行了拓扑纠正。
下面情况返回False
u 新创建的非空对象
u 图形经过投影、一般化处理
下面情况返回True
u 空几何对象
u 直接从要素类中获得的
u 执行过ITopologicalOperator接口方法后得到的几何图形
属性:IsSimple
IsSimple:当图形还没被认定为简单对象,返回是否已经进行拓扑纠正。可调用Simply方法强制修正。
方法:Buffer
Buffer:根据指定的几何图形生成缓冲区,返回Polygon对象。缓冲区的距离Distance可以为“正”,也可以为“负”;为负数时,只适用于Polygon对象生成缓冲区。缓冲区的距离单位与生成缓冲区源几何图形坐标单位一致。
Buffer,缓冲区,可以为点、线、面做缓冲区,参数为缓冲区范围的大小,大于0向外做缓冲区,小于0向内做缓冲区;
用法:
ITopologicalOperator pTopologBoundary = pGeo as ITopologicalOperator;
IGeometry pGeometry = pTopologBoundary.Buffer(2);
方法:Clip
Clip:裁剪指定区域内的图形。
Clip,叠加裁剪,从源图层中裁剪掉分割图层后的图形;参数类型为IEnvelope类型
用法:
ITopologicalOperator pTopologBoundary = pSourceGeometry as ITopologicalOperator;
pTopologBoundary.Clip(pClipGeometry.Envelope as IEnvelope);
方法:ClipDense
ClipDense:裁剪指定区域内的图形
方法:ConstructUnion
ConstructUnion:合并一组几何图形同时创建一个新的对象
方法:ConvexHull
ConvexHull:创建一个能够包含一组图形的最小边界多边形
方法:Cut
Cut:分割一个几何图形(线、面)为左右两部分(相对于分割线来说)。
ITopologicalOperator.Cut(splitLine, sleftGeom,srightGeom);
分割线绘制的方向决定了被分割后的对象属于左边还是右边。如下图所示,分割线至上而下将图形分割为左、右两部分,所以原图形的左半部分是作为结果的右边对象返回的。
将一个Geometry分割为两部分
IGeometry pSourceGeometry = null, pClipGeometry = null;
IGeometry pLeftGeo,pRightGo;
IPolyline pPolyline=null;
ITopologicalOperator pTopologBoundary = pSourceGeometry as ITopologicalOperator;
pTopologBoundary.Cut(pPolyline, out pLeftGeo, out pRightGo);
当几何图形与分割线没有相交时,几何图形将作为右边部分返回,左边部分为空。
方法:Difference
Difference:获得原始图形除去相交部分之外的图形部分。
Difference,区别,保留下源图层与操作图层中不同的部分。用法:
IGeometry pSourceGeometry = null, pDifGeometry = null;
ITopologicalOperator pTopologBoundary = pSourceGeometry as ITopologicalOperator;
IGeometry pResultGeo= pTopologBoundary.Difference(pDifGeometry);
方法:Intersect
Intersect:获得源图形与另外图形相交部分
ITopologicalOperator pTopological = (pSubFeature.Shape) as ITopologicalOperator;
IGeometry pGeoIntersect=pTopological.Intersect(pFeature.Shape, esriGeometryDimension.esriGeometry2Dimension);
方法:QueryClipped
QueryClipped:与Clip相似,其中第二个参数为剪切后返回输出,被剪切对象本身不会改变
方法:QueryClippedDense
QueryClippedDense:与ClipDense相似,其中第三个参数为剪切后返回输出,被剪切对象本身不会改变。
方法:Simplify
Simplify:改变原有几何图形,对几何图形进行拓扑纠正
点集合:不做任何处理。
多点:经过Simplify后会移除相同的点
多线:有平面和非平面之分。
当有M值时:重叠部分被舍去变成单一的;每个部分在相交位置被打断。对于最后输出的对象来说,相连续的部分合并生成个新对象;原来的线段可能会保留,其内部的结构会有所调整。
当没有M值时:重叠、自相交的部分被保留,长度为0的部分被舍去;线段的走向会被调整;线段不相连时将创建新的部分;两个线段在终端相连时被融合
多面:监测内部、外部结构,然后更改整个多边形结构。一般过程:移除所有悬挂的系列片段;找出最大的环,并添加到要输出的多边形中,同时在当前的多边形中删除这个环;重复这个步骤(如果这个过程在移除较多的片段时结束,则应该考虑使用IPolygon接口的方法来实现Simplify相似的操纵);将异或逻辑运算参数设置为true。Simplify结束后,除了必须的情况外,不会存在重叠、自相交的情况;并且任何点不是在外部边界上就是在多边形内。
ITopologicalOperator pTopologBoundary = pSourceGeometry as ITopologicalOperator;
pTopologBoundary.Simplify();
方法:SymmetricDifference
SymmetricDifference:两个几何图形合并后再减去相交的部分,是对两个图形的异或逻辑操作。
IGeometry pSourceGeometry = null, SymDifferenceGeometry = null;
ITopologicalOperator pTopologBoundary = pSourceGeometry as ITopologicalOperator;
IGeometry pSDifGeo=pTopologBoundary. SymmetricDifference(SymDifferenceGeometry);
方法:Union
Union:图形合并。
Union,使Geometry组合起来
IGeometry pSourceGeometry = null, pUnionGeometry = null;
ITopologicalOperator pTopologBoundary = pSourceGeometry as ITopologicalOperator;
IGeometry pUnionGeo=pTopologBoundary.Union(pUnionGeometry);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了