ArcGIS中的三种查询

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(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<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

        //设置查询的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);
        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/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值