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