查询统计是地理信息系统的一大关键模块,选择是与查询类似的形式,查询的效率可以看出一个软件系统的优劣。ArcGIS Engine提供了高效的查询统计模块。我们从头开始讲述。
操作的对象
一、查询的对象
首先要明白是谁要执行查询,对什么进行查询。
AE中可以执行查询操作的有:FeatureLayer、FeatureClass,其查询的对象为Feature
二、选择的对象
AE中可以执行选择操作的有:FeatureClass、Map、FeatureSelection
注:FeatrueSelection是较为专业的选择类,它不仅能进行要素选择,还能设置选中要素的样式
FeatureSelection是抽象类,可以通过FeatureLayer转化而来
注意:Map的FeatureSelection属性返回结果为Selection,而Selecrtion是对于多个图层的选择集,二者不能互相转换
所以com开发转来转去到底是在干嘛,新手感觉好麻烦
IFeatureSelection pFeatureSelection = pFeatureLayer as IFeatureSelection;
三、查询与选择的区别
选择可以同时对多个图层进行选择,而查询只能对于单个图层
查询返回的结果为:FeatureCursor,选择返回的结果为 Selection,(注意:不是FeatureSelection)
如何筛选要素
一、按属性筛选
1、QueryFilter类
QueryFilter既可以作为查询的参数,也可以作为选择的参数,其有两个主要属性:
属性 | 描述 |
WhereClause | 使用SQL语句表达式定义过滤数据的条件 |
SubFields | 指定返回的字段列表,如果有多项,项与项中间用逗号隔开 |
IQueryFilter pQueryFilter = new QueryFilterClass();
pQueryFilter.WhereClause = '"' + "FID" + '"' + "=1";
2、QueryDef类
没有遇到过,基本用第一个就应付得了。
二、按空间关系筛选
1、SpatialFilter类
类似QueryFilter类,SpatialFilter类有三个主要属性,必须同时指定
属性 | 描述 |
Geometry | 设置用于筛选数据的几何体 |
GeometryField | 设置用于过滤的图形的字段,只有一个图形 |
SpatialRef | 其值为esriSpatialRelEnum枚举类型,用于指定要素之间的空间关系 |
处理的结果
查询结果集合
FeatureCursor,Cursor
二者可以互相转化
选择结果集合
Selection,EnumFeature
要获取Selection中的Feature,必须首先将其转化为IEnumFeature类型
FeatureSelection
这个类有些特殊,因此拿出来单独讲一下:
FeatureSelection有一个SelectFeatures,可以选择对象,并对选中的对象修改外观,同时它还有一个SelectionSet属性,用于获得Cursor,因此,如果既想要获得cursor同时又得到cursor,可以使用此类。