GIS空间查询(SpatialFilter)时各种空间关系总结

版权声明: https://blog.csdn.net/qq_33459369/article/details/88090990

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

1、esriSpatialRelContains(包含)和esriSpatialRelWithin(包含于)

 应用范围:
       所有要素类之间均具有该关系
描述:可细分为一个要素完全包含另一个要素和一个要素被另一个要素完全包含。它们是相对的关系,若果说要素A完全位于要素B内,则要素B完全包含要素A。当两个图形完全相等时,即相互包含。

示意图:

2、esriSpatialRelTouches (边界相接)

应用范围: 
     除点与点之间的关系外,其它的要素之间都可以具有该关系。 
描述: 
 两个几何图形只在它们的交界处相交,而两个几何图形内部的交集为空。如点和线的相接,那么点必须在线的端点处才会发生相接关系。

示意图:

3、esriSpatialRelCrosses (穿越)

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

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

示意图:

4、esriSpatialRelOverlaps (空间覆盖)

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

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

示意图:

 

5、esriSpatialRelIntersects (广义相交)

应用范围:
      所有要素类之间均具有该关系。
描述: 
相交关系是一个广义的关系,包括上述4种关系。

6、esriSpatialRelEnvelopeIntersects(包络线相交)

应用范围:
     所有要素类之间均具有该关系。
描述:
查询几何和目标几何的Envelope(包络线--最小外接矩形)相交(本身不一定相交)

7、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.

8、esriSpatialRelUndefined  (未定义)

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

9、esriSpatialRelRelation  (空间关联)

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

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

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

  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

例如:不相交关系

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

但是在实际运用中却出现了问题,忘大神们看到能给点提示

如上图(线面相交):利用九关系的不相交居然能查询到与线相交的面。

猜你喜欢

转载自blog.csdn.net/qq_33459369/article/details/88090990