ArcGIS Engine属性查询和空间查询联合查询要素
项目中遇到了需要通过属性查询和空间查询两种查询方式联合,查找要素,主要流程是先通过空间查询,选择到符合条件的要素,添加到选择集中,然后再通过属性查询条件在候选集中查找要素,最终筛选出符合条件的要素。
主要代码如下:
/
/定义和创建用于空间查询的ISpatialFilter接口的对象
ISpatialFilter spatialFilter = new SpatialFilterClass();
//默认设定用于查询的空间几何体为当前地图源图层中所有要素几何体的集合
spatialFilter.Geometry = pFeature.Shape;
//根据对空间选择方法的选择采用相应的空间选择方法
spatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects;
//进行接口转换,使用IFeatureSelection接口选择要素
IFeatureSelection featureSelection = pLayer as IFeatureSelection;
//使用IFeatureSelection接口的SelectFeatures方法根据空间查询过滤器选择要素,将其放在新的选择集中
featureSelection.SelectFeatures((IQueryFilter)spatialFilter, esriSelectionResultEnum.esriSelectionResultAdd, false);
//新建IQueryFilter接口的对象来进行where语句的定义
IQueryFilter queryFilter = new QueryFilterClass();
设置where语句内容
queryFilter.WhereClause = sql;
featureSelection.SelectFeatures(queryFilter, esriSelectionResultEnum.esriSelectionResultAnd, false);
featureSelection.SelectionSet.Search(null, false, out ppCursor);
ICursor ppCursor;
IFeatureCursor pFeatureCursor2 = ppCursor as IFeatureCursor;
IFeature pFeature2 = pFeatureCursor2.NextFeature();
while (pFeature2 != null)
{
.....
}