ArcGIS中的三种查询
2016-01-25 15:32
411 查看
ArcGIS中的三种查询
ArcGIS runtime SDK forWPF/Silverlight中的三种常用的查询:QueryTask、FindTask、IdentifyTask都是继承自ESRI.ArcGIS.Client.Tasks,关系如下图所示:
1、QueryTask:是一个进行空间和属性查询的功能类,它可以在某个地图服务的某个子图层内进行查询,顺便提一下的是,QueryTask进行查询的地图服务并不必须加载到Map中进行显示。QueryTask的执行需要两个先决条件:一个是需要查询的图层URL、一个是进行查询的过滤条件。
下面是QueryTask的基本过程:
//新建一个QueryTask QueryTask 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, Polygon query.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 task FindTask 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; //查找的“属性值” //设置查询的LayerDefinitions ESRI.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设置的LayerDefinition System.Collections.ObjectModel.ObservableCollection myObservableCollection = new System.Collections.ObjectModel.ObservableCollection(); 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 task IdentifyTask identifyTask = new IdentifyTask("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Census_USA/MapServer"); //异步执行,绑定事件 identifyTask.ExecuteCompleted += IdentifyTask_ExecuteCompleted; identifyTask.Failed += IdentifyTask_Failed; //初始化 Identify parameters IdentifyParameters identifyParameters = new IdentifyParameters(); identifyParameters.LayerOption = LayerOption.all; //传递地图属性给 identify parameters identifyParameters.MapExtent = MyMap.Extent; identifyParameters.Width = (int)MyMap.ActualWidth; identifyParameters.Height = (int)MyMap.ActualHeight; //输入的几何参数为一个点,args来自点击事件 identifyParameters.Geometry = args.MapPoint; //Point Envelop Extent polyline polygon //设置查询的LayerDefinitions ESRI.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设置的LayerDefinition System.Collections.ObjectModel.ObservableCollection myObservableCollection = new System.Collections.ObjectModel.ObservableCollection(); 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/
作者:阿凡卢
出处:http://www.cnblogs.com/luxiaoxun/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
相关文章推荐
- TIFF World File(TFW)格式说明
- Echarts中BMapAPI地图绘制功能(BMapExt)的实现步骤
- JavaScript弹出框alert,confirm,prompt
- Javascript模块化编程--require.js(下)
- Javascript模块化编程--require.js(上)
- SQL:将查询结果插入到另一个表的三种情况
- 《用地图说话》资源下载完全汇总
- ArcGIS10.1桌面怎么使用ArcSDE服务
- SQL2008升级SQL2008R2完全教程
- javascript中的闭包以及dojo中的dojo.hitch()
- Dojo与jQuery的比较
- jquery中attr()和prop()的区别
- SQL语句快速参考
- Asp.Net前台调用后台变量的方法
- 百度地图中添加动态热力图
- ios高效开发-如何正确使用const,static,extern
- Spring 定时器 xml文件配置
- 客户端即时相应的框架可以使用workerman
- Django学习之路
- 第一章 进程概述