1. 程式人生 > >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屬性欄位得到屬性資訊。

參考:

相關推薦

ArcGIS查詢

ArcGIS runtime SDK for WPF/Silverlight中的三種常用的查詢:QueryTask、FindTask、IdentifyTask都是繼承自ESRI.ArcGIS.Client.Tasks,關係如下圖所示: 1、QueryTask:是一個進行空間和屬性查詢的功能類,它可以在某

Hibernate常用的資料庫查詢

HQL查詢: public List<User> getUserByNameAndAge(String name, Integer age) { Session session = getSession(); //from後面是物件,不是表名 Strin

java循環的區別

一次 for ava 循環 初始 條件 如果 -- pre while(條件){循環體}先判斷條件,滿足就執行循環體,不滿足則退出;do{循環體}while(條件)先執行一次循環體,再判斷條件,如果條件滿足,繼續執行,不滿足,退出循環,最少執行一次;for(<初始化&

CSS格式與布局位置的理解與應用

tom ora col 使用 其它 wid abs 方式 出現   第一種位置關系:position:fixed 鎖定位置(相對於整個瀏覽器的位置),常用在各大網站的右下角或其它位置的小廣告。 如果需要調整鎖定位置,需要使用如下方式:<div style="widt

C++創建對象的方法【轉】

內存 stream self 一般來說 ron ref 支持 內存碎片 搜索 我們都知道C++中有三種創建對象的方法,如下: #include <iostream> using namespace std; class A { private: in

Golang 讀取文件發放性能對比

多少 amp 性能 title 進行 con 讀取 == 生態 Golang 中讀取文件大概有三種方法,分別為:     1. 通過原生態 io 包中的 read 方法進行讀取     2. 通過 io/ioutil 包提供的 read 方法進行讀取     3. 通過 b

Android常用解析XML的方式(DOM、SAX、PULL)簡介及區別

字符串 lan win name屬性 Coding 空間 toc log fin XML在各種開發中都廣泛應用,Android也不例外。作為承載數據的一個重要角色,如何讀寫XML成為Android開發中一項重要的技能。今天就由我向大家介紹一下在Android平臺下幾種常見的

Git文件狀態及其轉換

com att AD .com check 方案 方便 因此 ddl Git作為一種版本控制解決方案,由於其具有的分布式特性,正被越來越多的用戶熟知,一些有名的開源項目,如:Linux kernel,CakePHP,Ruby on Rails等,都在使用Git進行版本管理。

Eclipse設置編碼格式的方法

右擊 https 出現 water 不一致 沒有 部分 space 菜單 轉自:https://blog.csdn.net/rainy_black_dog/article/details/52403735 很早以前聽過一位老師說過:咱們中國人不管學習哪種編程語言,總會遇到亂

Qt解析xml的方式

處理異常 AR ttr omd ostream odin move encoding efault 在下面的隨筆中,我會根據xml的結構,給出Qt中解析這個xml的三種方式的代碼。雖然,這個代碼時通過調用Qt的函數實現的,但是,很多開源的C++解析xml的庫,甚至很多其他語

c++參數引用方式

例子 機制 string ret 調用 esp roc tor cpp 傳值調用 是默認的參數傳遞機制,實參會復制給形參,調用的語義是每次取得實參的副本並將該復本用作形參,即會有復本的開銷,並且不改變實參的值。 適用於:傳值調用用於不應該被函數改變的小型對象。 例子:voi

mybatis學習四 mybatis的查詢方式

open bat 設計 獲取 n) map import col util <select id="selAll" resultType="com.caopeng.pojo.Flower"> select * from flow

Java Web 項目發布到Tomcat部署方法

true app text 中新 xml文件 serve pac base win 第一種方法:在tomcat中的conf目錄中,在server.xml中的,節點中添加: <Context path="/" docBase="E:\TOMCAT\apache-tomc

java基本語句及四道例題

一、if-else語句 if (關係/邏輯/算術表示式) { 當條件成立時所要執行的函式功能 } else { 當if後的條件不成立時所要執行的函式體 } 二、switch語句 switch(引數) { case 表示式1(即有可能輸入的引數): 所要執行的函式體;

oracle迴圈(For、While、Loop)案例

1.ORACLE中的FOR迴圈用法(九九乘法表) 1 declare 2 i int:=0; 3 j int:=0; 4 begin 5 for i in 1..9 loop 6 for j in 1..i loop 7 Dbms_Output.p

oracle循環(For、While、Loop)案例

acl end tput out class toolbar 代碼 exit for循環 1.ORACLE中的FOR循環用法(九九乘法表) 1 declare 2 i int:=0; 3 j int:=0; 4 begin 5 for i in 1..9 lo

035捷聯慣導姿態更新演算法說明

看到了不同的姿態更新演算法,很迷惑,陷入了誰相對於誰的思考中。翻翻嚴老師部落格,貼出來如下: 原文地址:http://blog.sina.com.cn/s/blog_40edfdc90102v6il.html#cmt_556E9C77-7F000001-41D46DB9-790-8

20172314 查詢演算法練習

課程:《程式設計與資料結構》 班級: 1723 姓名: 方藝雯 學號: 20172314 實驗教師:王志強 測試日期:2018年10月19日 必修/選修: 必修 錯誤原因分析 雜湊查詢不需要排序,而我是對排序之後的數求H(k)。 雜湊查詢中ASL不會求。 雜湊查詢中時間太緊急漏了一個數。

20172328 藍墨雲實驗——查詢演算法練習

20172328 藍墨雲實驗——三種查詢演算法練習 課程:《軟體結構與資料結構》 班級: 1723 姓名: 李馨雨 學號:20172328 實驗教師:王志強老師 實驗日期:2018年10月19日 必修選修: 必修 一、實驗要求學習內容 查詢的關鍵:比較 用平均

CSS定位介紹

在這段時間對CSS學習中到今天也終於能收個尾了,小編這篇會對CSS中的3種定位做一個詳細介紹 1.相對定位 相對定位:相對於自己原來的位置進行移動。 實際程式碼操作:對於標籤樣式先宣告 position:relative; 再描述移動方向與畫素大小 left帶正數向右移,以此