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);

 

posted @ 2022-03-30 15:56  小鱼写代码的过往  阅读(380)  评论(0编辑  收藏  举报