當前位置:編程學習大全網 - 源碼下載 - Arcgis for Android identify 和query查詢遇到的問題,求教

Arcgis for Android identify 和query查詢遇到的問題,求教

1、QueryTask:是壹個進行空間和屬性查詢的功能類,它可以在某個地圖服務的某個子圖層內進行查詢,順便提壹下的是,QueryTask進行查詢的地圖服務並不必須加載到Map中進行顯示。QueryTask的執行需要兩個先決條件:壹個是需要查詢的圖層URL、壹個是進行查詢的過濾條件。

下面是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屬性字段得到屬性信息。

  • 上一篇:外匯SAR技術指標怎麽用?
  • 下一篇:莊嘿,莊是什麽歌?
  • copyright 2024編程學習大全網