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/