ArcGIS runtime SDK for WPF/Silverlight中的三种常用的查询:QueryTask、FindTask、IdentifyTask都是继承自ESRI.ArcGIS.Client.Tasks,关系如下图所示:

1、QueryTask:是一个进行空间和属性查询的功能类,它可以在某个地图服务的某个子图层内进行查询,顺便提一下的是,QueryTask进行查询的地图服务并不必须加载到Map中进行显示。QueryTask的执行需要两个先决条件:一个是需要查询的图层URL、一个是进行查询的过滤条件。

下面是QueryTask的基本过程:

            //新建一个QueryTaskQueryTask queryTask = new QueryTask("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Census_USA/MapServer/5");// Query对象Query query = new Query();//传入空间几何范围,可以不设置//合法的geometry类型是Extent, Point, Multipoint, Polyline, Polygonquery.Geometry = geometry;//是否返回查询结果的空间几何信息query.ReturnGeometry = true;//查询结果返回的字段,字段必须在图层中,字段的大小写可忽略query.OutFields.AddRange(new string[] { "AREANAME", "POP2000" });//quer.OutField.Add("*"); //返回所有字段 //查询的where条件,可以是任何合法的SQL语句,可以不设置query.Where = "POP2000 > 350000";//异步查询,需要绑定queryTask的两个事件,通过ExecuteCompleted得到查询结果queryTask.ExecuteCompleted += QueryTask_ExecuteCompleted;queryTask.Failed += QueryTask_Failed;queryTask.ExecuteAsync(query);//同步查询,不需要绑定事件,直接返回查询结果//FeatureSet featureSet = queryTask.Execute(query);

2、FindTask:允许对地图中一个或多个图层的要素进行基于属性字段值的查询(search one or more layers in a map for features with attribute values that match or contain an input value)。FindTask不能进行“空间查询”,因为FindTask可以对多个图层进行查询,所有它的url属性需要指向所查询的地图服务的REST URL,而不像QueryTask需要指定某个图层的URL。

下面是FindTask的基本过程:

            //新建一个Find taskFindTask findTask = new FindTask("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Census_USA/MapServer/");//异步执行,绑定事件findTask.ExecuteCompleted += FindTask_ExecuteCompleted;findTask.Failed += FindTask_Failed;//初始化FindParameters参数FindParameters findParameters = new FindParameters();findParameters.LayerIds.AddRange(new int[] { 3 }); //查找的图层findParameters.SearchFields.AddRange(new string[] { "NAME" }); //查找的字段范围findParameters.ReturnGeometry = true;findParameters.SearchText = FindTextBox.Text; //查找的“属性值”//设置查询的LayerDefinitionsESRI.ArcGIS.Client.LayerDefinition myDefinition = new ESRI.ArcGIS.Client.LayerDefinition();myDefinition.LayerID = 3;//设置LayerDefinition,属性字段“Name”属于ID为0的图层//LayerDefinition的设置语句和Query中的Where语句一样myDefinition.Definition = "NAME = 'XXX'";//创建一个ObservableCollection,add设置的LayerDefinitionSystem.Collections.ObjectModel.ObservableCollection<LayerDefinition> myObservableCollection =new System.Collections.ObjectModel.ObservableCollection<LayerDefinition>();myObservableCollection.Add(myDefinition);findParameters.LayerDefinitions = myObservableCollection; //设置查询的LayerDefinitions//异步执行findTask.ExecuteAsync(findParameters);

3、IdentifyTask:是一个在地图服务中识别要素(Feature)的功能类。通过IdentifyTask可以搜索地图层中与输入几何形相交的要素(search the layers in a map for features that intersect an input geometry)。因为也是在多个图层中查询,所以Task的URL是动态图层服务的地址。同样,返回的要素都可以作为Graphic被添加到地图的GraphicsLayer上。

基本过程如下:

            //新建一个Identify taskIdentifyTask identifyTask = new IdentifyTask("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Census_USA/MapServer");//异步执行,绑定事件identifyTask.ExecuteCompleted += IdentifyTask_ExecuteCompleted;identifyTask.Failed += IdentifyTask_Failed;//初始化 Identify parametersIdentifyParameters identifyParameters = new IdentifyParameters();identifyParameters.LayerOption = LayerOption.all;//传递地图属性给 identify parametersidentifyParameters.MapExtent = MyMap.Extent;identifyParameters.Width = (int)MyMap.ActualWidth;identifyParameters.Height = (int)MyMap.ActualHeight;//输入的几何参数为一个点,args来自点击事件identifyParameters.Geometry = args.MapPoint; //Point Envelop Extent polyline polygon//设置查询的LayerDefinitionsESRI.ArcGIS.Client.LayerDefinition myDefinition = new ESRI.ArcGIS.Client.LayerDefinition();myDefinition.LayerID = 3;//设置LayerDefinition,属性字段“Name”属于ID为0的图层//LayerDefinition的设置语句和Query中的Where语句一样myDefinition.Definition = "NAME = 'XXX'";//创建一个ObservableCollection,add设置的LayerDefinitionSystem.Collections.ObjectModel.ObservableCollection<LayerDefinition> myObservableCollection =new System.Collections.ObjectModel.ObservableCollection<LayerDefinition>();myObservableCollection.Add(myDefinition);identifyParameters.LayerDefinitions = myObservableCollection; //设置查询的LayerDefinitions//异步执行identifyTask.ExecuteAsync(identifyParameters);

三种查询的返回结果:

QueryTask:返回的是一个FeatureSet。Featureset.features[i]可以加入到GraphicsLayer上显示,也可以通过Attributes属性字段得到属性信息。

FindTask:返回的是一个FindResults数组, FindResults[i].feature可以加入到GraphicsLayer上显示,也可以通过Attributes属性字段得到属性信息。

IdentifyTask:返回的是一个IdentifyResults数组,IdentifyResults[i].feature可以加入到GraphicsLayer上显示,也可以通过Attributes属性字段得到属性信息。

参考:

http://help.arcgis.com/en/webapi/silverlight/1.2/help/index.html
http://resources.arcgis.com/en/help/runtime-wpf/concepts/index.html#/Querying_and_searching_overview/0170000000m4000000/

ArcGIS中的三种查询相关推荐

  1. Hibernate中的三种数据持久状态和缓存机制

    Java三大框架之--Hibernate中的三种数据持久状态和缓存机制 Hibernate中的三种状态   瞬时状态:刚创建的对象还没有被Session持久化.缓存中不存在这个对象的数据并且数据库中没 ...

  2. linq拼接where语句_C# 10. LINQ 的三种查询语句写法

    C# 10. LINQ 的三种查询语句写法 前言: LINQ(语言集成查询)是 C#编程语言中的一部分.它在.NET Framework 3.5 和 C#3.0 被引入,在 System.Linq 命 ...

  3. mysql临键锁_详解 MySql InnoDB 中的三种行锁(记录锁、间隙锁与临键锁)

    详解 MySql InnoDB 中的三种行锁(记录锁.间隙锁与临键锁) 前言 InnoDB 通过 MVCC 和 NEXT-KEY Locks,解决了在可重复读的事务隔离级别下出现幻读的问题.MVCC  ...

  4. css中的三种基本定位机制

    css中的三种基本定位机制 a.普通文档流 b.定位:相对定位 绝对定位 固定定位 c.浮动 1.普通流中,元素位置由文档顺序和元素性质决定,块级元素从上到下依次排列,框之间的垂直距离由框的垂直mar ...

  5. Oracle的join默认为,Oracle中的三种Join方法详解

    这里将为大家介绍Oracle中的三种Join方法,Nested loop join.Sort merge join和Hash join.整理出来以便帮助大家学习. 基本概念 Nested loop j ...

  6. oracle hash join outer,CSS_浅谈Oracle中的三种Join方法,基本概念 Nested loop join: Outer - phpStudy...

    浅谈Oracle中的三种Join方法 基本概念 Nested loop join: Outer table中的每一行与inner table中的相应记录join,类似一个嵌套的循环. Sort mer ...

  7. (POST请求中的三种数据请求格式.application/x-www-form-urlencoded和multipart/form-data和application/json)

    (POST请求中的三种数据请求格式.application/x-www-form-urlencoded和multipart/form-data和application/json) applicatio ...

  8. MySQL buffer pool中的三种链

    三种page.三种list.LRU控制调优 一.innodb buffer pool中的三种页 1.free page:从未用过的页 2.clean page:干净的页,数据页的数据和磁盘一致 3.d ...

  9. 061 hive中的三种join与数据倾斜

    一:hive中的三种join 1.map join 应用场景:小表join大表 一:设置mapjoin的方式: )如果有一张表是小表,小表将自动执行map join. 默认是true. <pro ...

最新文章

  1. Spring Cloud 第十一篇:docker部署spring cloud项目
  2. Tomcat源码解析一:下载源码与导入eclipse
  3. PHP的表单获取与HHTP请求方式
  4. Object.definePropety
  5. Jenkins系列之二——centos 6.9 + JenKins 安装
  6. VMware ESXi 虚拟机硬盘格式:精简置备、厚置备延迟置零、厚置备置零
  7. 《普林斯顿微积分读本》笔记-第4章求解多项式的极限问题
  8. 安信可A9G二次开发的准备工作
  9. css 鼠标变成小手
  10. c语言课程设计日程表,日程表:schedule用法大全
  11. ES6之Symbol详解
  12. Python量化交易学习笔记(51)——程序化交易2
  13. ENSP中ACL,NAT配置
  14. 2020移动apn接入点哪个快_手机WiFi网速度太慢?教你一招网速翻倍好用,比5G还快...
  15. 微软服务器改dns,Win10修改微软DNS的方法!
  16. 盘古开源:技术为基创新驱动数据存储体系完善
  17. 如何提升自己的运气?提升运气财运的方法
  18. Ubuntu如何安装搜狗输入法
  19. 支付宝小程序手机相册上传多个图片踩坑
  20. 中山大学 精品课程C++ 视频教学

热门文章

  1. Xamarin Android真机测试报错
  2. 信息批量提取工具bulk-extractor
  3. Xamarin Android设置界面提示类型错误
  4. 简述ospf的工作原理_物联网水表工作原理简述
  5. @scheduled注解配置时间_探究 Spring 的定时任务配置
  6. mysql 分发_装配MySQL源代码分发
  7. python gui label_更新tkinter Label以在pythongui上显示一个文本文件,每次一行
  8. eeglab教程系列(14)-Working with ICA Components
  9. 机器学习(6)--化无限为有限(二)
  10. [unreal4入门系列之五] 熟悉关卡编辑器界面