ArcGIS API for Javascript 实现在线要素编辑(二)
2014-12-06 23:11
706 查看
1、获取要素服务地址
发布服务MyMapService后,可以在ArcGIS Server的Services Directory中可以看到一个名为MyMapService (FeatureServer)服务,括号中的FeatureServer表明该服务为要素服务。点击进入后可以看到其中包含的Layer如下
点击其中的GeoFences图层,该网页地址即为后续程序中用到的服务地址。
并且看到详细信息,其中属性信息和图层编辑能力均可以看到。
2、FeatureLayer.applyEdits函数说明
applyEdits函数是FeatureLayer类中的一个方法,主要作用是修改featurelayer的要素,但仅对要素服务(featureservice)
函数形式:applyEdits(adds?,
updates?, deletes?, callback?, errback?)
返回类型:dojo.Deferred
参数表:
1)<Graphic[]>
adds 可选项 要被添加到要素服务中的图层中的要素数组。新要素通常由Draw工具条创建。
2)<Graphic[]>
updates 可选项 几何对象和属性有所改变的要素数组。要素必须有一个有效的OBJECTID。要素的几何对象通常由Edit工具条修改。属性使用Attribute Inspector修改。
3)<Graphic[]>
deletes 可选项 待删除的要素数组,这些要素必须有有效的OBJECTID。
4)<Function>
callback 可选项 当操作完成时本函数会被调用。传给本函数的参数和onEditsComplete事件中的一样。
5)<Function>
callback 可选项 如果有错误发生将会返回一个错误对象。
例子:
require([ "esri/layers/FeatureLayer", ... ], function(FeatureLayer, ... ) { var firePerimeterFL = new FeatureLayer( ... ); var targetGraphic = firePerimeterFL.getSelectedFeatures()[0].setGeometry(reshapedGeometry); firePerimeterFL.applyEdits(null, [targetGraphic], null); ... });
3、增加要素
参照ESRI网站例子,但并没有使用TemplatePicker而是直接用Draw来画Graphic增加要素。这里仅以增加面状要素为例,主要步骤如下:1)将底图添加到Map中
myMap = new Map("mapDiv"); var myTiledMapServiceLayer = new ArcGISDynamicMapServiceLayer( "http://localhost:6080/arcgis/rest/services/XZAirportBaseMap/MapServer"); myTiledMapServiceLayer.setDisableClientCaching(true); myMap.addLayer(myTiledMapServiceLayer);
2)由要素服务创建FeatureLayer,使用Map类中的addLayers函数添加到Map中,在Map执行完成addLayers函数后会响应layers-add-result事件,执行initSelectToolbar
var myFeatureLayer = new FeatureLayer("http://localhost:6080/arcgis/rest/services/MyMapService/FeatureServer/0", { outFields: ["属性1", "属性2", "属性3"] }); myMap.addLayers([myFeatureLayer]); myMap.on("layers-add-result", initSelectToolbar);
3)在FeatureLayer的edits-complete事件中完成底图刷新工作
myFeatureLayer.on("edits-complete", function() { myTiledMapServiceLayer.refresh(); })
4),此时响应相应按钮点击事件,启动Draw工具
var drawToolbar = new Draw(myMap); on(dom.byId("addFence"), "click", function(evt) { drawToolbar.activate(Draw.POLYGON); });
5)在draw-end事件响应中使用FeatureLayer.applyEdits函数将Graphic保存到FeatureLayer中,需要注意的是必须为Graphic添加OBJECTID属性,并且类型为数值型
function initSelectToolbar(evt) { var petroFieldsFL = evt.layers[0].layer; drawToolbar.on("draw-end", function(evt) { drawToolbar.deactivate(); //获取要素个数 currentGraphciNo = petroFieldsFL.graphics.length; //获取最后一个要素的OBJECTID,并转为数值类型 currentObj = Number(petroFieldsFL.graphics[currentGraphciNo - 1].attributes['OBJECTID']); //设置新增Graphic的属性,OBJECTID必须设置,其余可以设为NULL var attr = { "OBJECTID": currentObj + 1 }; //产生新的Graphic var newGraphic = new Graphic(evt.geometry, null, attr); //使用applyEdits函数将Graphic保存到FeatureLayer中 petroFieldsFL.applyEdits([newGraphic], null, null); }); }
4、删除要素
删除要素和增加要素类似,同样使用FeatureLayer.applyEdits函数.前两步和增加要素中的1)2)相同,这里规定双击删除要素,因此在FeatureLayer的dbl-click事件中使用如下代码:function initSelectToolbar(evt) { var petroFieldsFL = evt.layers[0].layer; petroFieldsFL.on("dbl-click", function(evt) { event.stop(evt); petroFieldsFL.applyEdits(null, null, [evt.graphic]); }); }
相关文章推荐
- ArcGIS API for Javascript 实现在线要素编辑(一)
- ArcGIS API for Javascript 实现在线要素编辑(二)
- ArcGIS API for Javascript 实现在线要素编辑(一)
- Arcgis api for JavaScript 跨域配置(在线编辑问题)
- 在线编辑(二)ArcGIS API for Sillverlight 实现
- 【转】在线编辑(二)ArcGIS API for Sillverlight 实现
- ArcGIS API for Javascript 开发:不适用esri.toolbar.draw接口,由用户控制定位中心点和半径,实现查询落在圆内的要素
- ArcGIS API for JavaScript 通过identifyTask实现点击选择要素
- Arcgis api for JavaScript 跨域配置(在线编辑问题)
- ArcGIS API For Javascript之编辑服务器端图层(通过要素服务feature进行增删改查 )
- 在线编辑(二)ArcGIS API for Sillverlight 实现
- ArcGIS.Server.9.3和ArcGIS API for JavaScript实现查询定位中心的功能和FindTask功能应用(七)
- ArcGIS.Server.9.3和ArcGIS API for JavaScript实现语句查询QueryTask(八)
- ArcGIS.Server.9.3和ArcGIS API for JavaScript实现点、线、面的buffer分析(十一)
- ArcGIS.Server.9.3和ArcGIS API for JavaScript实现基本的地图功能(一)
- ArcGIS.Server.9.3和ArcGIS API for JavaScript实现查询定位中心的功能和FindTask功能应用(七)
- ArcGIS.Server.9.3和ArcGIS API for JavaScript实现Identify功能(六)
- ArcGIS.Server.9.3和ArcGIS API for JavaScript地图实现Toorbar功能(四)
- ArcGIS.Server.9.3和ArcGIS API for JavaScript实现Identify功能(六)
- 使用ArcGIS API for Silverlight实现地形坡度在线分析