arcgis api for javascript要素画图编辑
目录
1、获取要素服务地址
发布服务MyMapService后,可以在ArcGIS Server的Services Directory中可以看到一个名为MyMapService
(FeatureServer)服务,括号中的FeatureServer表明该服务为要素服务。
点击进入后可以看到其中包含的Layer如下
点击其中的GeoFences图层,该网页地址即为后续程序中用到的服务地址。
并且看到详细信息,其中属性信息和图层编辑能力均可以看到。
2、FeatureLayer.applyEdits函数说明
applyEdits函数是FeatureLayer类中的一个方法,主要作用是修改featurelayer的要素,但仅对要素服务(feature
service)
函数形式: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]);
- });
- }
转载自:https://blog.csdn.net/xcymorningsun/article/details/52709833