用于返回和修改filter使用的空间关系。
ISpatialFilter是一个包含空间和属性限制的QueryFilter。因此可以使用SpatialFilter来限制从要素类中获得的要素集。ISpatialFilter继承IQueryFilter接口,因此可以指定一个whereclause、返回的colunms或者指定输出图形的空间参考。
使用spatial filter执行空间查询,常将其作为IFeatureClass::Search、IFeatureClass::Select或feature layers上相似方法的参数。
需要Geometry,GeometryField和SpatialRel属性。
Geometry是源图形,根据与其的关系执行空间选择。GeometryField是图形字段名,将其中的图形与源图形比较。SpatialRel属性将一个esriSpatialRelEnum传入来指定空间关系。
使用esriSearchOrder指定SearchOrder。当指定属性查询后,该属性将指定先执行那一部分查询,该属性仅对SDE数据源有效。
SaptialRelDescription是个字符串,可代替SpatialRel属性定义额外的空间关系。这种情况下,SpatialRel参数必须设置成esriSpatialRelRelation。
esriGeometry提供其他方式执行空间查询。
成员
除了IQueryFilter的成员外,又增加了自己的成员
FilterOwnsGeometry,Geometry,GeometryEx,GeometryField,SearchOrder,SpatialRel,SpatialRelDescription,
ISpatialFilter.SpatialRelDescription属性
该要素描述了查询的图形和返回的图形之间的关系。该字符串中有9个字符,可以是’F’,’T’或’*’;例如,TT*FFT***表示包含。
SpatialRelDescription表示两个形状之间任何可能的空间关系。
ISpatialFilter Example
[C#]
NOTE:要用到ISpatialFilter的三个方法Geometry,GeometryField和SpatialRel。
public void ISpatialFilter_(IFeatureClass featureClass)
{
//Create a point to use for the search;
ESRI.ArcGIS.Geometry.IPoint point=new ESRI.ArcGIS.Geometry.PointClass();
point.PutCoords(-117.946,35.823);
//Getting a reference;
ISpatialFilter spatialFilter=new SpatialFilterClass();
//Setting the Geometry,GeometryField and SpatialRel parameters;
spatialFilter.Geometry=point;
spatialFilter.GeometryField=featureClass.ShapeFieldName;
spatialFilter.SpatialRel=esriSpatialRelEnum.esriSpatialRelIntersects;
//Execute the spatiafilter;
IFeatureCursor featureCursor=featureClass.Search(spatialFilter,false);
}
附注:空间过滤器空间关系类型 | 描述(A是待查询图形,B是过滤条件图形) |
esriSpatialRelUndefined | 未定义 |
esriSpatialRelIntersects | A与B图形相交 |
esriSpatialRelEnvelopeIntersects | A的Envelope和B的Envelope相交 |
esriSpatialRelIndexIntersects | A与B索引相交 |
esriSpatialRelTouches | A与B边界相接 |
esriSpatialRelOverlaps | A与B相叠加 |
esriSpatialRelCrosses | A与B相交(两条线相交于一点,一条线和一个面相交) |
esriSpatialRelWithin | A在B内 |
esriSpatialRelContains | A包含B |
esriSpatialRelRelation | A与B空间关联 |
空间关系说明:
1, esriSpatialRelTouches(邻接)
应用范围:
除点与点之间的关系外,其它的要素之间都可以具有该关系。
描述:
如果二个要素有相同的边界,且它们内部不相交的话,称这二个要素之间的关系是邻接的关系
2, esriSpatialRelCrosses (交叉)
应用范围:
线与面,线与线等。不能用于面与面(面与面相交部分是面,),不能用于面与点(二个要素的维数差2)以及点与线。
描述:
如果二个要素的相交部分不为空,并且相交部分形状的维数比两个要素中最高维数低1(即线面交叉是线,线线交叉是点)则称这二个要素具有交叉关系,
3, esriSpatialRelOverlaps(重叠关系)
应用范围:
线与线,面与面之间,其它的不具有该关系。(只要有重叠部分,如果重叠部分与某一要素完全相同,则不能称为重叠关系)
描述:
二个同维的要素之间的相交部分的图形具有与这二个要素相同的维数的,且不与任何一个要素完全相同,则称这二个要素重叠。
4,esriSpatialRelWithin (包涵)
应用范围:
所有要素类之间均具有该关系。
描述:
该关系为一个要素(已知)完全位于另一个要素(待查询的)的内部,它们是相对的关系。如当查询的要素完全位于被查询的要素内部的话(即spatialRel的值是esriSpatialRelWithin),则返回被查询的要素
5,esriSpatialRelContains
应用范围:
所有要素类之间均具有该关系。
描述:
该关系为一个要素完全包涵另外一个要素,它们是相对的关系。如果查询的要素完全被被查询的要素包括时(即spatialRel的值是esriSpatialRelcontains)则返回被查询的要素。
6,esriSpatialRelIntersects(相交)
描述:
相交关系是一个广义的关系,包括上述4种关系。因此如果spatialRel的值是esriSpatialRelIntersects关系的话,只要查询要素和被查询要素之间满足上述四种空间关系的任一种空间关系,即可返回被查询的要素。
7,esriSpatialRelEnvelopeIntersects
应用范围:
所有要素类之间均具有该关系。
描述:
该关系为2要素的范围线相交的情况。