1 <!DOCTYPE html>
  2     <html xmlns="http://www.w3.org/1999/xhtml">
  3     <head>
  4     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  5     <title>WebGIS</title>
  6     <link rel="stylesheet" type="text/css" href="https://js.arcgis.com/3.21/dijit/themes/tundra/tundra.css"/>
  7     <link rel="stylesheet"type ="text/css" href="https://js.arcgis.com/3.21/esri/css/esri.css" / >
  8         <script type="text/Javascript" src="https://js.arcgis.com/3.21/init.js"></script>
  9 
 10         <style type="text/css">
 11                 .MapClass{
 12 
 13                 width:100%;
 14 
 15                 height:500px;
 16 
 17                 border:1px solid #000;
 18 
 19                 }
 20 
 21         </style>
 22         <script type="text/javascript">
 23                 require(["esri/map",
 24                 "dojo/on",
 25                 "dojo/query",
 26                 "esri/layers/ArcGISDynamicMapServiceLayer",
 27                 "esri/toolbars/draw",
 28                 "esri/layers/FeatureLayer",
 29                 "esri/graphic",
 30                 "esri/dijit/editing/Add",
 31                 "esri/dijit/editing/Delete","esri/dijit/editing/Update","esri/tasks/query","dojo/json","dojo/domReady!"],
 32                 function (Map,on,query, ArcGISDynamicMapServiceLayer, Draw,FeatureLayer,Graphic,Add,Delete,Update,Query,jsonUtil) {
 33                 var map = new esri.Map("MyMapDiv");
 34 
 35                 var layer = new ArcGISDynamicMapServiceLayer("http://127.0.0.1:6080/arcgis/rest/services/test/MapServer");
 36                 map.addLayer(layer);
 37 
 38                 //用于操作的要素图层
 39                 var featureLayer = new FeatureLayer("http://127.0.0.1:6080/arcgis/rest/services/test/FeatureServer/0",
 40                 {
 41                     mode: FeatureLayer.MODE_SNAPSHOT,
 42                     outFields: ["*"]
 43                 });
 44 
 45                 //在添加要素时,利用Draw工具获得geometry对象
 46                 var d = new Draw(map, {
 47                     showTooltips: true
 48                 });
 49 
 50                 //要操作的graphic
 51                 var g;
 52                 query("button").on("click",
 53                 function(event) {
 54                     var value = this.innerHTML;
 55                     switch (value) {
 56                     case "添加要素":
 57                         d.activate(Draw.POLYGON);
 58                         break;
 59                     case "删除要素":
 60                         //创建Graphic对象,删除OBJECTID为34的元素,
 61                         //因为OBJECTID是主键,所以只需要指定主键即可
 62                         g = new Graphic("", "", {
 63                             "OBJECTID": 34
 64                         });
 65                         //创建删除对象
 66                         var de = new Delete({
 67                             "featureLayer": featureLayer,
 68                             "deletedGraphics": [g]
 69                         });
 70                         //执行删除结果
 71                         de.performRedo();
 72                         //刷新图层
 73                         layer.refresh();
 74                         break;
 75                     case "修改要素":
 76                         //用于修改要素的函数,查询更新为36的要素
 77                         updateFeature(223614);
 78                         break;
 79 
 80                     case "查询要素":
 81                         //用于查询要素的函数,查询主键为36的要素
 82                         searchFeather(1);
 83                         break;
 84 
 85                     }
 86 
 87                 });
 88 
 89                 //当画图完毕时,添加要素
 90                 on(d, "draw-complete",
 91                 function(result) {
 92 
 93                     //要素只赋予了geometry,属性信息为空
 94                     var graphic = new Graphic(result.geometry, null, {});
 95                     //graphic.attributes.add("");
 96 
 97                     var add = new Add({
 98                         "featureLayer": featureLayer,
 99                         //给哪一个要素图层添加要素
100                         "addedGraphics": [graphic] //用于添加的要素
101                     })
102 
103                     //执行添加函数
104                     add.performRedo();
105 
106                     //刷新视图
107                     layer.refresh();
108 
109                     //关闭绘图对象
110                     d.deactivate();
111 
112                 });
113 
114                 //根据id修改要素
115                 function updateFeature(id) {
116                     //注意:(第二个参数)这里传入一个回调函数,用于处理查询出来的数据
117                     searchFeather(id,
118                     function(result) {
119                         //获得旧的要素
120                         var oldgraphic = result[0];
121                         //新的要素
122                         var newgraphic = new Graphic(oldgraphic.toJson());
123                         //此处可以Draw重新画图
124                         //var newgraphic=new Graphic(newGeometry,null,newAttributes);
125                         var newAttributes = newgraphic.attributes;
126                         newAttributes.MAINPERSON = "Wxz";
127                         newgraphic.attributes = newAttributes;
128                         //创建更新对象
129                         var update = new Update({
130                             "featureLayer": featureLayer,
131                             "postUpdatedGraphics": [newgraphic],
132                             //修改之后的要素
133                             "preUpdatedGraphics": [oldgraphic] //修改之前的要素
134                         })
135                         //执行刷新操作
136                         update.performRedo();
137                         //刷新视图
138                         layer.refresh();
139 
140                         alert("修改成功");
141 
142                     })
143 
144                 }
145 
146                 //根据id查询要素
147                 function searchFeather(id, callback) {
148 
149                     //得到要素图层的主键属性
150                     var idProperty = featureLayer.objectIdField;
151 
152                     //定义查询参数
153                     var query = new Query();
154 
155                     //是否返回几何形状
156                     query.returnGeometry = false;
157 
158                     //图层的主键名称(根据自己要求修改)
159                     query.objectIds = [id];
160 
161                     //查询条件1=1意思是:只根据主键查询,忽略where子句
162                     query.where = "1=1";
163 
164                     //进行查询
165                     featureLayer.selectFeatures(query, FeatureLayer.SELECTION_NEW,
166                     function(result) {
167 
168                         //如果callback不存在,说明仅仅是查询操作
169                         if (!callback) {
170 
171                             //因为我们根据主键查询,一定只有一个元素
172                             var graphic = result[0];
173 
174                             //获得属性
175                             var attributes = graphic.attributes;
176 
177                             //得到该属性信息转换成字符串
178                             var result = jsonUtil.stringify(attributes)
179 
180                             //将结果弹出一下
181                             alert(result);
182 
183                         } else //如果callback存在,说明是更新操作
184                         {
185 
186                             callback(result);
187 
188                         }
189 
190                     });
191 
192                 }
193 
194                 });  
195 
196         </script> 
197      </head > <body > 
198      <div id="MyMapDiv" class = "MapClass"></div> 
199      <button class="btn">添加要素</button> 
200      <button class="btn"> 删除要素 </button> 
201      <button class="btn">修改要素</button> 
202      <button class = "btn" > 查询要素 </button> 
203 </body >
204  </html>