5.4QueryFilter对象与SpatialFilter对象
在关系型数据库中,查询条件是通过SQL语句的Where子语句来完成的。在ArcGIS Engine中不能直接使用SQL语句,但ArcGIS Engine提供了QueryFilter和SpatialFilter两个过滤器对象来配合完成查询条件的设置,从而查询到想要的数据。
QueryFilter过滤器主要用于对属性数据查询条件的设置,它主要实现IQueryFilter接口从而实现属性查询功能。
空间过滤器空间关系类型主要有以下几种类型如表一所示:
在关系型数据库中,查询条件是通过SQL语句的Where子语句来完成的。在ArcGIS Engine中不能直接使用SQL语句,但ArcGIS Engine提供了QueryFilter和SpatialFilter两个过滤器对象来配合完成查询条件的设置,从而查询到想要的数据。
QueryFilter过滤器主要用于对属性数据查询条件的设置,它主要实现IQueryFilter接口从而实现属性查询功能。
CODE:
IQueryFilter pQueryFilter = new QueryFilterClass();
//设置过滤器对象的属性
pQueryFilter.WhereClause = "人口> 10000000";
SpatialFilter过滤器主要用于空间范围查询条件的设置,它主要实现ISpatialFilter(继承 IQueryFilter接口)接口从而实现空间查询功能。
CODE:
ISpatialFilter pSpatialFilter = new SpatialFilterClass();
//设置空间过滤器的范围(多边形)
pSpatialFilter.Geometry = pGeometry;
//设置空间过滤器空间关系类型
pSpatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelContains;
空间过滤器空间关系类型主要有以下几种类型如表一所示:
表1
空间过滤器空间关系类型 | 描述(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空间关联 |