原文 AE地图查询

地图查询主要有两种查询:空间查询和属性查询

所用到知识点:

1  Cursor(游标)对象

本质上是一个指向数据的指针,本身不包含数据内容,提供一个连接到ROW对象或者要素对象(Feature)的桥梁而已。

游标有三种类型,即查询游标、插入游标和更新游标。每一种游标都是通过与之相适应的方法来获得的,如Search、Insert和Update方法。更新和插入游标都需要使用一个过滤器(Filter)对象,因为它们首先必须获得需要进行操作的要素。

FeatureCursor是Cursor的一个子类,指向一个或多个要素,它实现了IFeatureCursor接口,ArcGIS Engine开发所对矢量图层实现查询功能都是实行IFeatureCursor;

其实凡是Search方法,如ILayer::Search、ITable::Search等都可以返回一个游标对象。这个Cursor指向了那些符合选择条件的要素

IFeatureCursor接口重要成员:

NextFeature(方法,将游标向前跳到下一个位置,并且返回该位置的Feature)
UpdateFeature(Feature) (方法,对当前游标位置的Feature进行更新)

InsertFeature(buffer) (方法,用参数传进来的属性值插入一个新的要素到数据库中,返回该插入新的Feature的ID值,其中参数类型为IFeatureBuffer)

2  QueryFilter和SpatialFilter对象

ArcGIS
Engine提供了QueryFilter和SpatialFilter两个过滤器对象来配合完成查询条件的设置,从而查询到想要的数据。
QueryFilter过滤器主要用于对属性数据查询条件的设置,它主要实现IQueryFilter接口从而实现属性查询功能。

IQueryFilter接口成员:

WhereClause(读写属性,为过滤器设置条件语句)
注意!各种不同的数据,设置条件查询语句的语法是不相同的,如一个shp文件在设置字段的时候要加“””双引号,而在SDE数据连接中,则什么都不加;在gdb文件的语句中,符号是“*”,而在SDE或者shp文件查询中则是“%”
SubFields(读写,为过滤器设置提供赛选的字段,用逗号来分隔每一个逗号,如果不设置该属性,则当做所有字段均为查找字段)

SpatialFilter过滤器主要用于空间范围查询条件的设置,它主要实现ISpatialFilter(继承 IQueryFilter接口)接口从而实现空间查询功能。

其中SpatialRel属性是一个确定查询几何对象与目标要素几何对象关系的枚举值。

3 要素选择集(FeatureSelection)对象

获得符合某种条件的数据,一般有两种不同的手段:

一种使用Search方法,它返回一个指向数据的查询Cursor对象:

IFeatureCursor pFeatCursor = pFeatureLayer.Search(pFilter,false);
  IFeature pFeature=pFeatCursor.NextFeature();

另一种是使用SelectFeatures方法构造一个选择集(SelectionSet),然后在选择集中得到Cursor,后者麻烦了点,但是得到的要素选择集在Map上会高亮度显示。

IFeatureSelection pFSelection=pFeatureLayer as IFeatureSelection;
       pFSelection.SelectFeatures(pSpatialFilter,esriSelectionResultEnum.esriSelectionResultNew,false);
       ISelectionSet pSelectionset=pFSelection.SelectionSet;
       ICursor pCursor;
       pSelectionset.Search(null,true,out pCursor);
       IFeatureCursor pFeatCursor=pCursor as IFeatureCursor;
       IFeature pFeature=pFeatCursor.NextFeature();

IFeatureSelection接口重要成员:

SelectFeatures (Filter, Method, justOne )
(方法,根据指定的标准过滤器filter和方法,选择要素,第一个参数为QueryFilter类型的变量,第二个参数为esriSelectionResultEnum类型的变量,第三个参数为布尔型变量,通常为false)

当然还有设置颜色的SelectionColor属性等;

4 SelectionSet对象

支持ISelectionSet接口,用于管理和查询一个选择集。

Search(IQueryFilter,bool,ref ICursor)用于在选择集内进行再选择,

且看示例代码(查询人口>1200000的州并高亮度显示):

Code1

IFeatureLayer pFeatureLayer = axMapControl1.get_Layer() as IFeatureLayer;
IFeatureSelection pFeatSelection = pFeatureLayer as IFeatureSelection;
ISpatialFilter pSpatial = new SpatialFilterClass();
pSpatial.WhereClause = "POP1990>1200000";
pFeatSelection.SelectFeatures(pSpatial, esriSelectionResultEnum.esriSelectionResultNew, false);
pFeatSelection.SelectionColor = Get_RGB(, , );
axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, null);

Code2  统计人口字段的平均值:

IFeatureLayer pFeatureLayer = axMapControl1.get_Layer() as IFeatureLayer;
IFeatureSelection pFeatSelection = pFeatureLayer as IFeatureSelection;
ISpatialFilter pSpatial = new SpatialFilterClass();
pSpatial.WhereClause = "POP1990>1200000";
pFeatSelection.SelectFeatures(pSpatial, esriSelectionResultEnum.esriSelectionResultNew, false); ISelectionSet pSelectionSet = pFeatSelection.SelectionSet;
ICursor pCursor;
pSelectionSet.Search(null, true, out pCursor); IDataStatistics pDataStastics = new DataStatisticsClass();
pDataStastics.Cursor =pCursor ;
pDataStastics.Field = "POP1990";
MessageBox.Show("墨西哥各省平均人口"+pDataStastics.Statistics.Mean.ToString());

结果如下:

最新文章

  1. php地址赋值值和传值赋值
  2. mysql 查询优化规则
  3. leetcode: Path Sum II 迭代法
  4. C# 十进制与十六进制互转
  5. Mir2源码详解之服务端-选择(角色)网关(SelGate)
  6. 11g RAC R2 体系结构---进程,日志
  7. Volley使用指南第一回(来自developer.android)
  8. 最新发布C#.NET快速开发框架企业版V4.0 (适合开发ERP、进销存系统)
  9. 熟悉java堆内存和栈内存和mysql的insert语句中含有id的处理
  10. 前端开发工具(安装及常用技巧)——sublime text 3
  11. javascript7
  12. 关于APIcloud对应C#的 wcf框架作为后台,实现多库功能
  13. mysql数据库保存sesison会话
  14. 一个封装不错的 TcpClient 类
  15. django之前-----web应用与框架
  16. HTML5 Canvas 超炫酷烟花绽放动画教程
  17. fiddler抓web请求
  18. HashMap的put方法返回值问题
  19. MySQL主从复制与读写分离[修改]
  20. FFTW3学习笔记3:FFTW 和 CUFFT 的使用对比

热门文章

  1. amaze ui各个模块简单说明
  2. 75.《nodejs开发指南》express4.x版-微博案例完整实现
  3. Enity Framework已经是.NET下最主要的ORM了
  4. SASS常用方法
  5. cocos2dx——lua自己主动和手动绑定
  6. 重建一些被PHP7废弃的函数,
  7. HUSTOJ 1072 小数背包问题
  8. 洛谷 P1308 统计单词数
  9. WebStorm(Amaze开发工具)--JavaScript 开发工具
  10. 阿里一道Java并发面试题 (详细分析篇)