FeatureLayer的增删改查,编辑要素以及添加shape操作

注释很详细,废话不多说,直接上代码,复用性很高,觉得可以点个攒b( ̄▽ ̄)d再走哈

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″>
    
    <meta name=”viewport” content=”initial-scale=1, maximum-scale=1,user-scalable=no”>
    <title>Landuse</title>

    <link rel=”stylesheet” href=”https://js.arcgis.com/3.21/dijit/themes/claro/claro.css”>
    <link rel=”stylesheet” href=”https://js.arcgis.com/3.21/esri/css/esri.css”>
    
    <style>
      html, body {
        height: 100%;
        width: 100%;
        margin: 0;
        padding: 0;
        overflow:hidden;
        position: absolute;
      }
     
      #map {
        padding:1px;
        border:solid 2px #444;
        -moz-border-radius: 4px;
        border-radius: 4px;
        float: left;
        height: 100%;
        width: 80%;
      }
     
      #templatePicker {
        border: solid 2px #444;
        float: right;
        height: 100%;
        width: auto;
      }
    </style>

  <script src=”https://js.arcgis.com/3.21/”></script>
    <script>
    var map;
    var dynamicUrl=”http://localhost:6080/arcgis/rest/services/MyMapService/MapServer”;
    var pointUrl=”http://localhost:6080/arcgis/rest/services/MyMapService/FeatureServer/0″;
    var lineUrl=”http://localhost:6080/arcgis/rest/services/MyMapService/FeatureServer/1″;
    var polygonUrl=”http://localhost:6080/arcgis/rest/services/MyMapService/FeatureServer/2″;
    var graValues=[];
    var geoValues=[];
    var graphicResult=[];
    var attrbu;
    var lineSymbol;
    require([
        “esri/map”,
        “esri/toolbars/draw”,
        “esri/toolbars/edit”,
        “esri/graphic”,

        “esri/layers/FeatureLayer”,
        “esri/layers/ArcGISDynamicMapServiceLayer”,

        “esri/symbols/SimpleMarkerSymbol”,
        “esri/symbols/SimpleLineSymbol”,
        “esri/symbols/SimpleFillSymbol”,
        “esri/renderers/SimpleRenderer”,
        “esri/Color”,
        
        “esri/layers/TableDataSource”,
        “esri/layers/LayerDataSource”,

        “esri/dijit/editing/TemplatePicker”,

        “dojo/_base/array”,
        “dojo/_base/event”,
        “dojo/_base/lang”,
        “dojo/parser”,
        “dojo/on”,
        “dojo/dom”,
        “dojo/query”,

        “dojo/domReady!”
      ], function(
        Map,
        Draw,
        Edit,
        Graphic,
        FeatureLayer,
        ArcGISDynamicMapServiceLayer,
        SimpleMarkerSymbol,
        SimpleLineSymbol,
        SimpleFillSymbol,
        SimpleRenderer,
        Color,
        TableDataSource,
        LayerDataSource,
        TemplatePicker,
        arrayUtils,
        event,
        lang,
        parser,
        on,
        dom,
        query
      ){
        parser.parse();
        
        //加载地图
        map = new Map(“map”);
        var dynamicLayer=new ArcGISDynamicMapServiceLayer(dynamicUrl);
        //清缓存
        dynamicLayer.setDisableClientCaching(true);
        map.addLayer(dynamicLayer);
        
        //图层加载,绑定监听
        map.on(“layers-add-result”, initEditing);

        var pointLayer = new FeatureLayer(pointUrl ,{
          mode: FeatureLayer.MODE_SNAPSHOT,
          outFields: [“*”]
        });
        var lineLayer = new FeatureLayer(lineUrl, {
          mode: FeatureLayer.MODE_SNAPSHOT,
          outFields: [“*”]
        });
        var polygonLayer = new FeatureLayer(polygonUrl, {
          mode: FeatureLayer.MODE_SNAPSHOT,
          outFields: [“*”]
        });

        map.addLayers([pointLayer,lineLayer,polygonLayer]);

        function initEditing(evt) {
          //当前图层
          var currentLayer = null;
          //dojo/array.map();获取当前添加图层–此处为图层数组
          var layers = arrayUtils.map(evt.layers, function(result) {
            return result.layer;
          });
         
          //编辑工具
          var editToolbar = new Edit(map,{
              showToolTips:true
          });
          //编辑监听编辑结束事件
          editToolbar.on(“deactivate”, function(evt) {
            currentLayer.applyEdits(null, [evt.graphic], null);
          });
            
          //dojo/array.forEach()遍历数组中每个图层
          arrayUtils.forEach(layers, function(dynamicLayer) {
              
        //第一部分
              //可编辑状态–默认值为false
            var editingEnabled = false;
            //底图添加双击监听
            dynamicLayer.on(“dbl-click”, function(evt) {
              //双击事件拦截–防止放大事件触发
              event.stop(evt);
              //第一次双击进入可编辑状态,第二次双击关闭编辑状态
              if (editingEnabled === false) {
                editingEnabled = true;
                editToolbar.activate(Edit.EDIT_VERTICES , evt.graphic);
              } else {
                currentLayer = this;
                editToolbar.deactivate();
                editingEnabled = false;
              }
            });

        //第二部分
            //底图监听单击事件
            dynamicLayer.on(“click”, function(evt) {
              //拦截单击事件,判断是否为删除操作
              event.stop(evt);
              //ctrl or cmd 配合单击事件完成删除操作
              if (evt.ctrlKey === true || evt.metaKey === true) {
                dynamicLayer.applyEdits(null,null,[evt.graphic]);
                currentLayer = this;
                editToolbar.deactivate();
                editingEnabled=false;
              }
            });
          });

        //模板选择器
        var templatePicker = new TemplatePicker({
            //属性设置
            featureLayers: layers,
            rows: “auto”,
            columns: 2,
            grouping: true,
            style: “height: auto; overflow: auto;”
          }, “templatePickerDiv”);
        //开启模板
        templatePicker.startup();
        
        //画图工具
        var drawToolbar = new Draw(map,{
            showToolTips:true
        });
        
        //从模板选择器获取选择模板
        var selectedTemplate;
        
        templatePicker.on(“selection-change”, function() {
            //监听模板选择改变
            if( templatePicker.getSelected() ) {
              selectedTemplate = templatePicker.getSelected();
            }
            
              //判断模板操作类型
            switch (selectedTemplate.featureLayer.geometryType) {
              case “esriGeometryPoint”:
                drawToolbar.activate(Draw.POINT);
                break;
              case “esriGeometryPolyline”:
                drawToolbar.activate(Draw.POLYLINE);
                break;
              case “esriGeometryPolygon”:
                drawToolbar.activate(Draw.POLYGON);
                break;
            }
          });
        
        //监听作图完成事件
        drawToolbar.on(“draw-end”, function(evt) {
            drawToolbar.deactivate();
            editToolbar.deactivate();
            var newAttributes = lang.mixin({}, selectedTemplate.template.prototype.attributes);
               attrbu=newAttributes;
            var newGraphic = new Graphic(evt.geometry, null, newAttributes);
            selectedTemplate.featureLayer.applyEdits([newGraphic],null,null);
          });
        }
        
        
    //添加shape–featureLayer
        on(dom.byId(“added”),”click”,function(e){
            //定义一个数据源
            var dataSource = new TableDataSource();
            //此处为我们设置的命名空间
            dataSource.workspaceId = “test”;
            //命名空间下面的shp
            dataSource.dataSourceName = “经纬网.shp”;
            //定义一个图层数据源
            var layerSource = new LayerDataSource();
            //给图层数据源赋值
            layerSource.dataSource = dataSource;
            //定义一个要素图层:注意链接为动态图层的地址
            var layer2 = new FeatureLayer(“http://localhost:6080/arcgis/rest/services/MyMapService/MapServer/dynamicLayer”, {
                mode: FeatureLayer.MODE_ONDEMAND,
                outFields: [“*”],
                source: layerSource
            });
            //定义线符号
            lineSymbol = new SimpleLineSymbol(SimpleLineSymbol.STYLE_DASH, new dojo.Color([255, 0, 0]), 3);
            //定义渲染器
            var renderer = new esri.renderer.SimpleRenderer(lineSymbol);
               //定义渲染器
            layer2.setRenderer(renderer);
            layer2.refresh();
            layer2.id=”layer2″;
            map.addLayer(layer2);
            alert(graValues.length);
            graValues=map.getLayer(“layer2”).graphics;
            alert(graValues.length);
               });
        
       
        on(dom.byId(“sub”),”click”,function(){
            
            if(graValues.length>0){
                
                for(var i=0;i<graValues.length;i++){
                    var gra=new Graphic(graValues[i].geometry,lineSymbol,attrbu);
                    graphicResult.push(gra);
                }
                
                lineLayer.applyEdits(graphicResult,null,null);
                
            }else{
                alert(“sorry,graValues is null”)
            }
        });
        
        
      });
    </script>
  </head>
  <body class=”claro”>
      <input id=”added” type=”button” value=”add_shape” />
      <input id=”sub” type=”button” value=”submit” />
      <div id=”map”></div>
    <div id=”templatePickerDiv”></div>
    
  </body>
</html>

转载自:https://blog.csdn.net/kangkang_style/article/details/75601974

You may also like...