下面是QueryTask的基本過程:
//新建壹個QueryTask
QueryTask queryTask = new QueryTask("/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("/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("/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屬性字段得到屬性信息。