0

我正在尝试使用具有撤消、重做功能的 ArcGIS 10.2 JavaScript 3.6 API 来实现多边形联合操作。我能够执行联合操作,但是当我尝试撤消操作时,我收到以下错误:

http://js.arcgis.com/3.6/js/esri/dijit/editing/Cut.js中第 19 行第 1879 列未处理的异常

0x800a138f - JavaScript 运行时错误:无法获取未定义或空引用的属性“长度”

代码片段:

dojo.connect(dijit.byId("Merge_Button"), "onClick", function () {
    editing_function = "Merge_From";
    document.getElementById("Status_Message").innerHTML = "Select Polygon to Merge From"
    esri.bundle.toolbars.draw.addPoint = "Select Polygon to Merge From";
    drawToolbar.activate(esri.toolbars.Draw.POINT);
});

dojo.connect(drawToolbar, "onDrawEnd", function (geometry) {

if (editing_function == "Merge_From") {
    var point_selectQuery = new esri.tasks.Query();
    point_selectQuery.geometry = geometry;

    edit_featurelayer.selectFeatures(point_selectQuery, esri.layers.FeatureLayer.SELECTION_NEW, function (features) {
        if (features.length == 0) {
            r = confirm("Nothing Selected. Try again?");
            if (r == true) {
                return;
            }
            drawToolbar.deactivate();
            document.getElementById("Status_Message").innerHTML = "Nothing exciting going on around here";
            return
        }
        merge_from_features = features;
        editing_function = "Merge_To";
        document.getElementById("Status_Message").innerHTML = "Select Polygon to Merge To";
        esri.bundle.toolbars.draw.addPoint = "Select Polygon to Merge To";
    });
    return;
}

if (editing_function == "Merge_To") {
    var point_selectQuery = new esri.tasks.Query();
    point_selectQuery.geometry = geometry;
    edit_featurelayer.selectFeatures(point_selectQuery, esri.layers.FeatureLayer.SELECTION_ADD, function (features) {
        if (features.length == 0) {
            r = confirm("Nothing Selected. Try again?");
            if (r == true) {
                return;
            }
            drawToolbar.deactivate();
            document.getElementById("Status_Message").innerHTML = "Nothing exciting going on around here";
            return
        }
        merge_to_features = features;
        editing_function = "";
        document.getElementById("Status_Message").innerHTML = "Nothing exciting going on around here";
        drawToolbar.deactivate();

        var input_geometries;
        try {

            var from_g = merge_from_features[0].geometry;
            var to_g = merge_to_features[0].geometry;
            var input_geometries = [from_g, to_g];

            geometryService.union(input_geometries, function (unioned_geometry) {
                var merge_from_feature = merge_from_features[0];
                var merge_to_feature = merge_to_features[0];

                var original_feature = merge_to_feature.toJson();
                merge_to_feature.geometry = unioned_geometry;

                edit_featurelayer.applyEdits(null, [merge_to_feature], [merge_from_feature], function () {
                    try {

                        var operation = new esri.dijit.editing.Union({
                            deleted_graphics: [merge_from_feature],
                            featureLayer: edit_featurelayer,
                            preUpdatedGraphics: new esri.Graphic(original_feature),
                            postUpdatedGraphics: [merge_to_feature]
                        });

                    }
                    catch (err) {
                        alert(err.message);
                    };
                    undoManager.add(operation);
                    checkUI();
                });
            });
        }
        catch (err) {
            alert(err.message);
        };
    });


    return;
};

drawToolbar.deactivate();

});

4

1 回答 1

0

如果有人有兴趣,我必须更改以下代码:

                    var operation = new esri.dijit.editing.Union({
                        deleted_graphics: [merge_from_feature],
                        featureLayer: edit_featurelayer,
                        preUpdatedGraphics: new esri.Graphic(original_feature),
                        postUpdatedGraphics: [merge_to_feature]
                    });

至:

                    var operation = new esri.dijit.editing.Union({
                        deletedGraphics: [merge_from_feature],
                        featureLayer: edit_featurelayer,
                        postUpdatedGraphics: new esri.Graphic(original_feature),
                        preUpdatedGraphics: [merge_to_feature]
                    });
于 2013-09-13T11:29:05.903 回答