Adam-KER
Adam-KER

Reputation: 67

Add polygon to teh featureLayer

I tried go add a polygon to the feature layer. In getting an error in the console, Object { name: "feature-layer:missing-parameters", details: undefined, message: "'addFeatures', 'updateFeatures', 'deleteFeatures', 'addAttachments', 'updateAttachments' or 'deleteAttachments' parameter is required" }. Please correct me. i have added a piece of code which cover creating polygon and applyEdit function on the layer.

 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" });
    
                // Once user is done drawing a rectangle on the map
                // use the rectangle to select features on the map and table
                sketchViewModel.on("create", async (event) => {
                    if (event.state === "complete") {
                        // this polygon will be used to query features that intersect it
                        const geometries = graphicsLayer.graphics.map(function (graphic) {
                            return graphic.geometry
                        });
                        const queryGeometry = await geometryEngineAsync.union(geometries.toArray());
    
                        var graphics;
                        graphics = new Graphic({
                            geometry: {
                                type: "polygon",
                                PERMIT_AREA: queryGeometry,
                            },
                            // attributes:'',
                        });
    
                        const addEdits = {
                            addFeatures: graphics
                        };
    
                        selectFeatures(addEdits);
                    }
                });
            });
    
            // This function is called when user completes drawing a rectangle
            // on the map. Use the rectangle to select features in the layer and table
            function selectFeatures(geometryabc) {
    
                console.log(geometryabc);
                // create a query and set its geometry parameter to the
                // rectangle that was drawn on the view
                lyrpermitAreaUrl.applyEdits({ geometryabc }).then((editsResult) => {
                    console.log(editsResult);
                    console.log(editsResult.addFeatureResults.length);
                    console.log(editsResult.addFeatureResults[0].objectId);
                });
    
                // console.log(geometry);
            }

Upvotes: 0

Views: 243

Answers (1)

cabesuon
cabesuon

Reputation: 5270

the function applyEdits(edits, options?) takes as mandatory parameter an object of the form,

{
    addFeatures: Graphic[]|Collection<Graphic>
    updateFeatures: Graphic[]|Collection<Graphic>
    deleteFeatures: Graphic[]|Collection<Graphic>|Object[]
    addAttachments: AttachmentEdit[]
    updateAttachments: AttachmentEdit[]
    deleteAttachments: String[]
    
}

So in your code it should be,

function selectFeatures(geometryabc) {
    lyrpermitAreaUrl.applyEdits({ addFeatures: [geometryabc] }).then((editsResult) => {
        console.log(editsResult);
    });
}

assuming that geometryabc is actually a Graphic.

ArcGIS JS API - FeatureLayer applyEdits

Upvotes: 3

Related Questions