zoukankan      html  css  js  c++  java
  • GIS-010-ArcGIS JS 三种查询模式(转)

    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://www.cnblogs.com/luxiaoxun/p/3297654.html

    参考:

    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/

  • 相关阅读:
    Java实现 蓝桥杯VIP 算法提高 排队打水问题
    Java实现 蓝桥杯VIP 算法提高 排队打水问题
    Java实现 蓝桥杯VIP 算法提高 排队打水问题
    Java实现 蓝桥杯VIP 算法提高 特殊的质数肋骨
    Java实现 蓝桥杯VIP 算法提高 特殊的质数肋骨
    Java实现 蓝桥杯VIP 算法提高 特殊的质数肋骨
    Java实现 蓝桥杯VIP 算法提高 特殊的质数肋骨
    现在使用控件, 更喜欢继承(覆盖控件已有的函数,很奇怪的一种使用方式)
    Controls 属性与继承 TShape 类的小练习(使用TShape可以解决很多图形问题)
    QT创建窗口程序、消息循环和WinMain函数(为主线程建立了一个QEventLoop,并执行exec函数)
  • 原文地址:https://www.cnblogs.com/defineconst/p/5982152.html
Copyright © 2011-2022 走看看