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