兩種方式:
第一種
要素服務的增刪改操作,在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]); }); }
