You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向FeatureLayer添加多边形报错,请求修正含applyEdit的代码

问题解析与代码修正

错误原因

控制台报错:

Object { name: "feature-layer:missing-parameters", details: undefined, message: "'addFeatures', 'updateFeatures', 'deleteFeatures', 'addAttachments', 'updateAttachments' or 'deleteAttachments' parameter is required" }

该错误源于调用applyEdits时参数格式错误,同时创建Graphic的方式也存在问题。

修正后的完整代码

require(["esri/config",
        "esri/Map",
        "esri/views/MapView",
        "esri/layers/FeatureLayer",
        "esri/layers/TileLayer",
        "esri/layers/VectorTileLayer",
        "esri/layers/GraphicsLayer",
        "esri/widgets/Search",
        "esri/widgets/Sketch/SketchViewModel",
        "esri/geometry/geometryEngineAsync",
        "esri/Graphic",
    ],
    function (esriConfig, Map, MapView, FeatureLayer, TileLayer, VectorTileLayer, GraphicsLayer, Search, SketchViewModel, geometryEngineAsync, Graphic) {
        esriConfig.apiKey = "AAPK3f43082c24ae493196786c8b424e9f43HJcMvP1NYaqIN4p63qJnCswIPsyHq8TQHlNtMRLWokqJIWYIJjga9wIEzpy49c9v";

        const graphicsLayer = new GraphicsLayer();

        const streetmapTMLayer = new TileLayer({
            url: streetmapURL
        });

        const streetmapLTMLayer = new VectorTileLayer({
            url: streetmapLebelsURL
        });

        const lyrwholeMeters = new FeatureLayer({
            url: MetersWholeURL,
            outFields: ["*"],
        });

        const lyrMeters = new FeatureLayer({
            url: MetersURL,
            outFields: ["*"],
        });

        const lyrpermitAreaUrl = new FeatureLayer({
            url: PermitAreaURL,
            outFields: ["*"],
        });

        console.log(lyrMeters);

        const map = new Map({
            basemap: "arcgis-topographic", // Basemap layer service
            layers: [streetmapTMLayer, streetmapLTMLayer, lyrpermitAreaUrl, lyrMeters, lyrwholeMeters, graphicsLayer]
        });

        const view = new MapView({
            map: map,
            center: [-95.9406, 41.26],
            zoom: 16,
            maxZoom: 21,
            minZoom: 13,
            container: "viewDiv" // Div element
        });

        view.when(() => {
            const polygonSymbol = {
                type: "simple-fill", // autocasts as new SimpleFillSymbol()
                color: [207, 34, 171, 0.5],
                outline: {
                    // autocasts as new SimpleLineSymbol()
                    color: [247, 34, 101, 0.9],
                }
            };

            const sketchViewModel = new SketchViewModel({
                view: view,
                layer: graphicsLayer,
                polygonSymbol: polygonSymbol,
            });

            sketchViewModel.create("polygon", { mode: "hybrid" });

            // 用户完成绘制多边形后执行
            sketchViewModel.on("create", async (event) => {
                if (event.state === "complete") {
                    // 合并绘制的所有多边形几何
                    const geometries = graphicsLayer.graphics.map(graphic => graphic.geometry);
                    const queryGeometry = await geometryEngineAsync.union(geometries.toArray());

                    // 正确创建Graphic:geometry直接传入union后的几何,attributes按需设置
                    const newGraphic = new Graphic({
                        geometry: queryGeometry, // 直接使用合并后的多边形几何
                        attributes: {
                            // 这里添加FeatureLayer所需的属性字段,比如PERMIT_AREA对应的属性,根据你的图层定义调整
                            // 例如: NAME: "自定义区域"
                        }
                    });

                    const addEdits = {
                        addFeatures: [newGraphic] // addFeatures要求是数组类型
                    };

                    selectFeatures(addEdits);
                }
            });
        });

        // 执行编辑操作的函数
        function selectFeatures(editParams) {
            console.log(editParams);
            // 直接传入editParams,不需要额外包裹对象
            lyrpermitAreaUrl.applyEdits(editParams).then((editsResult) => {
                console.log(editsResult);
                if (editsResult.addFeatureResults.length > 0) {
                    console.log(editsResult.addFeatureResults.length);
                    console.log(editsResult.addFeatureResults[0].objectId);
                }
            }).catch(error => {
                console.error("编辑失败:", error);
            });
        }
    });

关键修正点

  • Graphic创建错误:原代码中geometry属性错误设置PERMIT_AREA: queryGeometry,应直接将合并后的几何赋值给geometry字段。
  • addFeatures格式错误:applyEdits的addFeatures参数要求是Graphic数组,原代码传入单个Graphic,需用数组包裹。
  • applyEdits参数传递错误:原代码调用applyEdits({ geometryabc })错误,应直接传入编辑参数对象,无需额外嵌套。
  • 添加错误捕获:新增catch块处理编辑失败情况,便于排查问题。
  • 属性字段补充:创建Graphic时需根据FeatureLayer的字段定义添加对应的attributes,否则可能导致添加失败(需根据图层实际字段调整)。

内容的提问来源于stack exchange,提问作者Adam-KER

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 01:15:38