加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ArcGIS中的三种查询

发布时间:2020-12-15 03:37:48 所属栏目:百科 来源:网络整理
导读:ArcGIS中的三种查询 ArcGIS runtime SDK for WPF/Silverlight中的三种常用的查询:QueryTask、FindTask、IdentifyTask都是继承自ESRI.ArcGIS.Client.Tasks,关系如下图所示: 1、QueryTask:是一个进行空间和属性查询的功能类,它可以在某个地图服务的某个子

ArcGIS中的三种查询

ArcGIS runtime SDK for WPF/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(int[] { 3 }); 查找的图层 findParameters.SearchFields.AddRange(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<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 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

            ";
            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/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读