利用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

posted @ 2012-11-05 09:56 esrixa 阅读(...) 评论(...) 编辑 收藏