两种方式:

第一种

要素服务的增删改操作,在ArcGIS API for JS中给我们提供了三个类用于要素的增Add,删Delete,改Update

添加draw和要素服务

//用于操作的要素图层,注意我们是操作的宿舍楼图层
var featureLayer = new FeatureLayer("http://localhost:6080/arcgis/rest/services/Test/ft/FeatureServer/1",
{
mode:FeatureLayer.MODE_SNAPSHOT,
outFields: ["*"]
});
//在添加要素时,利用Draw工具获得geometry对象
var d = new Draw(map, { showTooltips: true });
//要操作的graphic
var g;
   query("button").on("click",function(event){
//获得按钮的文本
var value=this.innerHTML;
//根据文本绑定不同的事件
switch(value){
case "添加要素":
d.activate(Draw.POLYGON);
break;
case "删除要素":
//创建Graphic对象,删除OBJECTID为34的元素,
//因为OBJECTID是主键,所以只需要指定主键即可
g=new Graphic("","",{
"OBJECTID":34
});
//创建删除对象
var de=new Delete({
"featureLayer":featureLayer,
"deletedGraphics":[g]
});
//执行删除结果
de.performRedo();
//刷新图层
layer.refresh();
break;
case "修改要素":
//用于修改要素的函数,查询更新为36的要素
updateFeature(36);
break;
case "查询要素":
//用于查询要素的函数,查询主键为36的要素
searchFeather(36);
break;
}
});

修改、更新:

var oldUpdateGrapgics;
var updateGrapgics; var selectid = selectArray[0]["OBJECTID"]; var queryTask, query;
queryTask = new esri.tasks.QueryTask(featureURL);
//dojo.connect(queryTask, "onComplete", showResults);
var queryWhere = "OBJECTID=" + selectid;
//build query filter
query = new esri.tasks.Query();
query.returnGeometry = true;
query.outFields = ["*"];
query.where = queryWhere;
queryTask.execute(query, queryUpdateResults); function queryUpdateResults(results) {
var features = results.features;
oldUpdateGrapgics = features[0];
updateGrapgics = new esri.Graphic(oldUpdateGrapgics.toJson());
//featureAttribution["OBJECTID"] = ;
$("input[name='OBJECTID']").val(updateGrapgics.attributes["OBJECTID"]);
$("input[name='ID']").val(updateGrapgics.attributes["ID"]);
$("input[name='要素代码']").val(updateGrapgics.attributes["要素代码"]);
$("input[name='图斑编号']").val(updateGrapgics.attributes["图斑编号"]);
$("input[name='地类编码']").val(updateGrapgics.attributes["地类编码"]);
$("input[name='城镇用地']").val(updateGrapgics.attributes["城镇用地"]);
} function saveUpdateClick() {
require(["esri/map", "dojo/on",
"esri/layers/FeatureLayer",
"esri/graphic", "esri/dijit/editing/Add",
"esri/dijit/editing/Delete", "esri/dijit/editing/Update", "esri/tasks/query", "dojo/json",
"dojo/domReady!"
],
function(Map, on, FeatureLayer, Graphic, Add, Delete, Update, Query, jsonUtil) {
//console.log($("#attrForm").serialize());
// attributes =$("#attrForm").serializeObject(); //将表单序列化为JSON对象
//console.log(attributes);
// updateGrapgics.setAttributes(attributes);
// editFeatureLayer.applyEdits(null, [updateGrapgics], null);
updateGrapgics.attributes['要素代码'] = getValueOrNULL($("input[name='要素代码']").val());
updateGrapgics.attributes['图斑编号'] = getValueOrNULL($("input[name='图斑编号']").val());
updateGrapgics.attributes['城镇用地'] = getValueOrNULL($("input[name='城镇用地']").val()); var update = new Update({
"featureLayer": editFeatureLayer,
"postUpdatedGraphics": [updateGrapgics], //修改之后的要素
"preUpdatedGraphics": [oldUpdateGrapgics] //修改之前的要素
}); update.performRedo();
//刷新视图
editFeatureLayer.refresh();
alert("修改成功");
});
}

删除

var selectid = selectArray[0].OBJECTID;
var selectids = [];
selectids.push(selectid); $("#table").bootstrapTable('remove', {
field: 'OBJECTID',
values: selectids
});
//queryFeaturesByWhere();
var queryTask, query;
queryTask = new esri.tasks.QueryTask(featureURL);
//dojo.connect(queryTask, "onComplete", showResults);
var queryWhere = "OBJECTID=" + selectid;
//build query filter
query = new esri.tasks.Query();
query.returnGeometry = true;
query.outFields = ["*"];
query.where = queryWhere;
queryTask.execute(query, deleteResults); function deleteResults(results) {
var gs = results.features;
editFeatureLayer.applyEdits(null, null, gs, function(evt) {
console.log(evt);
// alert("删除成功");
});
// return features;
}

第二种:

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);
...
});
//删除       
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 要素服务增删改查的更多相关文章

  1. 数据库开发基础-SQl Server 控制数据库的服务+数据库的创建与管理(增删改查)

    控制数据库的服务: 方法一: 1.Windows+R 打开运行  打开cmd 2.输入net start MSSQLserver 启动数据库服务 输入net stop MSSQLserver 关闭数据 ...

  2. WCFRESTFul服务搭建及实现增删改查

    WCFRESTFul服务搭建及实现增删改查 RESTful Wcf是一种基于Http协议的服务架构风格,  RESTful 的服务通常是架构层面上的考虑. 因为它天生就具有很好的跨平台跨语言的集成能力 ...

  3. 基于SpringBoot开发一个Restful服务,实现增删改查功能

    前言 在去年的时候,在各种渠道中略微的了解了SpringBoot,在开发web项目的时候是如何的方便.快捷.但是当时并没有认真的去学习下,毕竟感觉自己在Struts和SpringMVC都用得不太熟练. ...

  4. 使用HttpClient对ASP.NET Web API服务实现增删改查

    本篇体验使用HttpClient对ASP.NET Web API服务实现增删改查. 创建ASP.NET Web API项目 新建项目,选择"ASP.NET MVC 4 Web应用程序&quo ...

  5. 数据库开发基础-★SQl Server 控制数据库的服务+数据库的创建与管理(增删改查)★

    控制数据库的服务: 方法一: 1.Windows+R 打开运行  打开cmd 2.输入net start MSSQLserver 启动数据库服务 输入net stop MSSQLserver 关闭数据 ...

  6. AD 域服务简介(三)- Java 对 AD 域用户的增删改查操作

    博客地址:http://www.moonxy.com 关于AD 域服务器搭建及其使用,请参阅:AD 域服务简介(一) - 基于 LDAP 的 AD 域服务器搭建及其使用 Java 获取 AD 域用户, ...

  7. Go微服务框架go-kratos实战03:使用 gorm 实现增删改查操作

    一.简介 在上一篇文章 go-kratos实战02 中,详细介绍了用 kratos 编写项目代码的步骤.这篇就在上篇基础上,再结合 Go 数据库操作库 gorm 一步一步来实现一个简单的增删改查操作. ...

  8. AngularJS的增删改查、state嵌套案例,不涉及服务端

    本篇实践一个案例,大致是:左边有导航菜单,右边显示列表,并可对列表项编辑或删除,也可添加新的列表项.借此,可体会到:如何组织可扩展的AngualrJS文件结构,如何点击左侧菜单项右侧显示相应内容,an ...

  9. WFS1.1.0协议(增删改查)+openlayers4.3.1前端构建+geoserver2.15.1安装部署+shpfile数据源配置

    WFS简介 1.WFS即,Web要素服务,全称WebFeatureService.GIS下,支持对地理要素的插入,更新,删除,检索和发现服务. 2.属于OGC标准下的通信协议.OGC标准下的GIS服务 ...

随机推荐

  1. crontab 在指定时间范围每隔2小时执行一次和指定时间执行实例

    crontab 在指定时间范围每隔2小时执行一次和指定时间执行,下面实例实现了:10-23点每两个小时执行一次,2点执行一次,分钟依次是1 2 3 ,没有24点的,晚上12点是0点注:*代表所有的取值 ...

  2. bzoj1606

    题目链接 反着循环就是每个东西只能选一次 #include<iostream> #include<cstdio> #include<cstdlib> #includ ...

  3. java之定时任务

    package com.financial.server.util; import java.text.SimpleDateFormat; import java.util.Date; import ...

  4. php学习路线(转)

    作者:Summer链接:https://www.zhihu.com/question/20034403/answer/135433912来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转 ...

  5. i2c调试碰到的问题

    i2c eeprom i2cget两次结果不一致 i2cset没成功. device里只看到50,却冒出了51地址. i2ctools是针对8bit地址的,而我们的eeprom都是用16bit add ...

  6. Percona Server 5.6 安装TokuDB

    系统:Red Hat Enterprise Linux Server release 6.3 (Santiago) 数据库:Percona-Server-5.6.29-rel76.2-Linux.x8 ...

  7. API网关性能比较:NGINX vs. ZUUL vs. Spring Cloud Gateway vs. Linkerd(转)

    前几天拜读了 OpsGenie 公司(一家致力于 Dev & Ops 的公司)的资深工程师 Turgay Çelik 博士写的一篇文章(链接在文末),文中介绍了他们最初也是采用 Nginx 作 ...

  8. (5keras自带的模型之间的关系)自己动手,编写神经网络程序,解决Mnist问题,并网络化部署

    ​ ​其中: 1.VGG 网络以及从 2012 年以来的 AlexNet 都遵循现在的基本卷积网络的原型布局:一系列卷积层.最大池化层和激活层,最后还有一些全连接的分类层. 2.ResNet 的作者将 ...

  9. OO课程第四次总结

    终于来到了最后一次的OO作业,以博客作业的形式来终结也是极好的,回顾一下过去十六周自己的经历,感慨颇深. 测试和正确性论证 简单来说,测试的目的是将程序的代码做到全覆盖,从而确保每个分支都运行一遍,进 ...

  10. MongoDB的C#驱动报错Server instance 127.0.0.1:27017 is no longer connected的解决方案

    使用C#的MondoDB驱动,一直没问题.结果最近,MongoCursor的ToList方法,取列表,总是报错 Server instance 127.0.0.1:27017 is no longer ...