arcgis 要素服務增刪改查


兩種方式:

第一種

要素服務的增刪改操作,在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]); }); }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM