空间关系分类及接口方法

一、IRelationalOperator接口

IRelationalOperator接口用来确定两个图形之间存在的空间关系,空间关系类型包括包含、相交、相等、相接、不相交、重叠、内部等。

IRelationalOperator接口主要方法有以下8个:

wps28_thumb[4]

private bool CheckGeometryContain(IGeometry pGeometryA, IGeometry pGeometryB)
{
    IRelationalOperator pRelOperator = pGeometryA as IRelationalOperator;
    if (pRelOperator.Contains(pGeometryB))
        return true;
}

1.Contains包含关系

包含关系只存在于以下6种情况:点包含点、线包含点、线包含线、面包含点、面包含线、面包含面情况。

wps29_thumb[1]

2.Cross相交关系

相交关系只能用于线与线、面与线、线与面这三种情况。

wps30_thumb

3.Disjoint不相交关系

不相交关系使用范围最广,涵盖点、线、面所有的相互关系,判断点、线、面图形是否存在不相交关系,不存在,返回true,相交,返回false。

wps31_thumb[1]

4.Equal相等关系

相等关系只存在三种比较:点与点、线与线、面与面。

wps32_thumb

5.Overlap重叠关系

重叠关系也只存在三种比较:多点与多点、线与线、面与面。

如果其中一个图形为空,则不存在重叠关系。

wps33_thumb[1]

6.Touch相接关系

相接关系除了不能用与点与点,其他图形都可以进行判断。

wps34_thumb

7.Within内部关系

内部关系用于点被点、点被线、点被面、线被线、线被面和面被面包含与关系,他与contains正好相反,是一种被内部的关系。

wps35_thumb

8.Relation关系

用于检测是否存在定义relationship,一般不使用。

 

二、ITopologicalOperator接口

作为空间分析重要部分的拓扑关系运算,ArcGISEngine类库中将拓扑关系运算功能函数方法封装在ITopologicalOperator接口。

属性:Boundary边界

几何图形的边界属性。面的边界是多条折线;线的边界是与起始终止点相一致的多点;多点边界是空对象。

wps36_thumb

属性:IsKnownSimple是否简单对象

如当前几何图形是简单对象返回true,否则返回false;它反映了图形是否进行了拓扑纠正。

返回False:新创建的非空对象;图形经过投影、一般化处理;

返回True:空几何对象;直接从要素类中获得的;执行过ITopologicalOperator接口方法后得到的几何图形;

属性:IsSimple是否已拓扑纠正

当图形还没被认定为简单对象,返回是否已经进行拓扑纠正。可调用Simply方法强制修正。

方法:Buffer缓冲区

根据指定的几何图形生成缓冲区,返回Polygon对象。缓冲区的距离Distance可以为“正”,也可以为“负”;为负数时,只适用于Polygon对象生成缓冲区。缓冲区的距离单位与生成缓冲区源几何图形坐标单位一致。

ITopologicalOperator pTopologBoundary = pGeo as ITopologicalOperator;

IGeometry pGeometry = pTopologBoundary.Buffer(2);

wps37_thumb

方法:Clip裁剪

裁剪指定区域内的图形。

wps38_thumb

方法:ClipDense裁剪

裁剪指定区域内的图形,并致密化输出线。(densifies lines in output contributed by the clipping envelope)

方法:ConstructUnion合并

合并一组几何图形同时创建一个新的对象

方法:ConvexHull包络多边形

创建一个能够包含一组图形的最小边界多边形

wps39_thumb

方法:Cut分割

分割一个几何图形(线、面)为左右两部分(相对于分割线来说)。

ITopologicalOperator.Cut(splitLine, sleftGeom,srightGeom);

分割线绘制的方向决定了被分割后的对象属于左边还是右边。如下图所示,分割线至上而下将图形分割为左、右两部分,所以原图形的左半部分是作为结果的右边对象返回的。

当几何图形与分割线没有相交时,几何图形将作为右边部分返回,左边部分为空。

wps40_thumb

方法:Difference去除相交部分

获得原始图形除去相交部分之外的图形部分。

wps41_thumb

方法:Intersect相交

获得源图形与另外图形相交部分

wps42_thumb

方法:QueryClipped裁剪

与Clip相似,其中第二个参数为剪切后返回输出,被剪切对象本身不会改变

方法:QueryClippedDense裁剪

与ClipDense相似,其中第三个参数为剪切后返回输出,被剪切对象本身不会改变。

方法:Simplify拓扑纠正

改变原有几何图形,对几何图形进行拓扑纠正

点集合:不做任何处理。多点:经过Simplify后会移除相同的点。

wps43_thumb

多线:有平面和非平面之分。

当有M值时:重叠部分被舍去变成单一的;每个部分在相交位置被打断。对于最后输出的对象来说,相连续的部分合并生成个新对象;原来的线段可能会保留,其内部的结构会有所调整。

当没有M值时:重叠、自相交的部分被保留,长度为0的部分被舍去;线段的走向会被调整;线段不相连时将创建新的部分;两个线段在终端相连时被融合。

wps44_thumb

多面:监测内部、外部结构,然后更改整个多边形结构。一般过程:移除所有悬挂的系列片段;找出最大的环,并添加到要输出的多边形中,同时在当前的多边形中删除这个环;重复这个步骤(如果这个过程在移除较多的片段时结束,则应该考虑使用IPolygon接口的方法来实现Simplify相似的操纵);将异或逻辑运算参数设置为true。Simplify结束后,除了必须的情况外,不会存在重叠、自相交的情况;并且任何点不是在外部边界上就是在多边形内。

wps45_thumb

方法:SymmetricDifference合并且去除相交部分

两个几何图形合并后再减去相交的部分,是对两个图形的异或逻辑操作。

wps46_thumb

方法:Union合并

图形合并。

wps47_thumb

 

三、esriSpatialRelEnum枚举类型

在使用ISpatialFilter接口进行空间关系查询时,使用esriSpatialRelEnum枚举类型来判断空间关系。

ISpatialFilter ipSpatialFilter = new SpatialFilterClass()
{
    GeometryField = ipFeatureClass.ShapeFieldName,
    Geometry = ipGeometry,
    SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects,
    WhereClause = sWhere
};
IFeatureCursor ipCursor = ipFeatureClass.Search(ipSpatialFilter, false);
System.Runtime.InteropServices.Marshal.ReleaseComObject(ipSpatialFilter);
//ESRI.ArcGIS.ADF.ComReleaser.ReleaseCOMObject(ipSpatialFilter);

esriSpatialRelContains包含

esriSpatialRelWithin包含于

应范围:所有要素类之间均具有该关系

描述:可细分为一个要素完全包含另一个要素和一个要素被另一个要素完全包含。它们是相对的关系,若果说要素A完全位于要素B内,则要素B完全包含要素A。当两个图形完全相等时,即相互包含。

wps48_thumbwps49_thumbwps50_thumb

esriSpatialRelTouches边界相接

应用范围:除点与点之间的关系外,其它的要素之间都可以具有该关系。

描述:两个几何图形只在它们的交界处相交,而两个几何图形内部的交集为空。如点和线的相接,那么点必须在线的端点处才会发生相接关系。

wps51_thumbwps52_thumb

esriSpatialRelCrosses穿越

应用范围:线与面,线与线。

描述:如果二个要素的相交部分不为空,并且相交部分形状的维数比两个要素中最高维数低1(即线面交叉是线,线线交叉是点)则称这二个要素具有交叉关系。

wps53_thumb

esriSpatialRelOverlaps空间覆盖

应用范围:线与线,面与面,多点与多点。

描述:两个几何图形的交集与这两个几何图形的维数相同,但其交集结果与这两个几何图形不同。

wps54_thumb

esriSpatialRelIntersects广义相交

应用范围:所有要素类之间均具有该关系。

描述:相交关系是一个广义的关系,包括上述4种关系(包含、包含于、边界相接、穿越、空间覆盖)。

esriSpatialRelEnvelopeIntersects包络线相交

应用范围:所有要素类之间均具有该关系。

描述:查询几何和目标几何的Envelope(包络线--最小外接矩形)相交(本身不一定相交)

esriSpatialRelIndexIntersects索引相交

描述:查询几何图形的空间范围和目标几何图形的索引范围相交。

API解释:Returns a feature if the envelope of the query geometry intersects the index entry for the target geometry.  Because it uses the underlying index grid, rather than the evelope of the feature, it is faster and is commonly used for return features for display purposes.

esriSpatialRelUndefined未定义

描述:相当于不考虑空间关系。

esriSpatialRelRelation空间关联

描述:Query geometry IBE(Interior-Boundary-Exterior) relationship with target geometry。通过SpatialRelDescription属性设置自定义空间关系。俗称九关系查询。

ISpatialFilter.SpatialRel设置为esriSpatialRelRelation,并且设置SpatialRelDescription为某个字符串。字符串中有9个字符,每个字符可以是F,T,或者*,T表示True,F表示False,*表示无关。这九个关系取交集,最终的结果为满足条件的结果集。例如:TT*FFT***表达了包含。

这9个关系是分别从几何体的内部,边界,外部来区分的,所有的几何体之间的拓扑关系不外乎这9个关系的组合。

ISpatialFilter spatialFilter = new SpatialFilterClass()
{
    Geometry = geometry,
    GeometryField = originFClass.ShapeFieldName,
    SpatialRel = esriSpatialRelEnum.esriSpatialRelRelation,
    SpatialRelDescription = "FF*FF****";
};
 

Query Geometry

Target Geometry

1

interior

interior

2

interior

boundary

3

interior

exterior

4

boundary

interior

5

boundary

boundary

6

boundary

exterior

7

exterior

interior

8

exterior

boundary

9

exterior

exterior

posted @ 2021-02-22 14:56  publiter  阅读(1654)  评论(0编辑  收藏  举报