利用ArcGIS Server REST API實現對Feature的編輯操作


ArcGIS API for Flex中提供了一些工具實現對Feature的編輯操作,不過其實質是對ArcGIS Server REST API的再包裝。為了更大的靈活性,在這里我們談一下如何直接調用ArcGIS Server REST API來實現對Feature的新增、更新、刪除操作。

FeatureServer

對Feature進行操作,首先需要FeatureServer的支持。這里我們使用ArcGIS服務器上的一個FeatureServer,http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Fire/Sheep/FeatureServer。在瀏覽器中打開這個rest服務,共有點、線、面三個圖層,點擊進入點圖層Points of Interest后,在頁面的最下方可以看到該圖層支持查詢(Query)、新增(add Features)、更新(Update Features)、刪除(Delete Features)和可以同時執行新增、更新和刪除操作的應用編輯(Apply Edits)操作。

點擊任何一個操作,在新打開的頁面中輸入一些必要的參數便可執行。對應在頁面中輸入參數這種方式,本文以對點要素的操作為例,講述在Flex中如何調用ArcGIS Server REST API、如何傳遞參數以及如何對返回結果進行處理,從而實現對Featrue的新增、更新和刪除操作。

新增點

點擊上圖的Add Features進入新頁面后,其url地址為http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Fire/Sheep/FeatureServer/0/addFeatures。這個地址即為實現新增feature功能的rest接口,Format選擇JSON,在Features中輸入[{"geometry":{"y":34,"x":108},"attributes":{"description":"addPoint","type":2}}],點擊Add Features按鈕開始執行。

如果成功,返回

否則

相應地,在Flex中需要三步來完成上述操作,首先構造一個JSON格式字符串;其次調用對應的Rest接口;最后對返回結果進行處理。

在Flex中構造JSON字符串,可以采用直接構造或者先構造成嵌套的Object,然后轉成JSON兩種方式。為了靈活性,本文采用后一種方式,構造的代碼如下,

var feature:Object = new Object();
//設置幾何信息
feature.geometry = new Object();
feature.geometry.x = x;
feature.geometry.y = y;
//設置屬性信息
feature.attributes = new Object();	
feature.attributes["description"] = "addPoint";
feature.attributes["type"] = type;
				
//把對象轉成JSON,備注:此處使用的是Flash Builder的JSON類,需要SDK4.5及其以上版本的支持。
//當然也可以使用ArcGIS Flex API帶的JSON類,在3.0版本中JSON類該層了JSONUtil。				
var arr:Array = new Array();
arr.push(feature);
var features:String = JSON.stringify(arr);

在Flex中調用ArcGIS Server REST API,通過URLRequest調用一個URL地址就可以了,同時需要將JSON賦值給URLRequest的data屬性,設置format為json。至於是選擇POST還是GET,這個取決於REST接口支持哪種方式。

//調用FeatureServer支持的addFeature操作,添加元素;
var loader:URLLoader = new URLLoader();
var request:URLRequest = new URLRequest("http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Fire/Sheep/FeatureServer/0/addFeatures");
request.method = URLRequestMethod.POST;
var data:URLVariables = new URLVariables();
data.f = "json";
data.features = features;
request.data = data;

最后需要對返回的結果進行處理,這里尤其要強調的是,執行后有正確和錯誤兩種返回結果。需要對返回的內容進行判斷,才能最終確定是否能正確執行。

loader.addEventListener(Event.COMPLETE, function(event:Event):void{
//對結果進行處理,分成功和失敗兩種
});				
loader.addEventListener(IOErrorEvent.IO_ERROR,function(event:Event):void{
//執行失敗
});				
loader.load(request); 

更新和刪除點

和新增點相差無幾,就是調用的REST接口和返回結果有所不同而已,當然需要構造對應的JSON字符串。相關代碼均在源程序中,在這里就不再詳細講解。

小結

本文以對點的編輯操作為例,講述了如何使用ArcGIS Server REST API,當然這種方式不局限於此,適合於所有的REST API。除此之外需要說明的是,上述API支持多個點的同時編輯操作,為了簡潔源碼中僅僅對單個點進行編輯操作。 開發環境為Flash Builder4.6,ArcGIS API 2.5 for Flex。

源代碼下載地址:http://dl.vmall.com/c0bz10cedn


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM