Skip To Content ArcGIS for Developers Sign In Dashboard

ArcGIS Runtime SDK for Qt

Add features (feature service)

Sample Viewer View Sample on GitHub

Add features to a feature layer.

Use case

An end-user performing a survey may want to add features to the map during the course of their work.

How to use the sample

Click on a location on the map to add a feature at that location.

How it works

A Feature is added to a ServiceFeatureTable which then pushes that new feature to the server.

  1. Create a ServiceFeatureTable from a URL.
  2. Create a FeatureLayer from the service feature table.
  3. Create a Feature with attributes and a location using createFeature().
  4. Add the feature to the table using addFeature.
  5. Update the table on the server using applyEdits().

Relevant API

  • Feature
  • FeatureEditResult
  • FeatureLayer
  • ServiceFeatureTable

Tags

edit, feature, online service

Sample Code

import QtQuick 2.6
import QtQuick.Controls 2.2
import QtGraphicalEffects 1.0
import Esri.ArcGISRuntime 100.9

Rectangle {
    width: 800
    height: 600

    // Create MapView that contains a Map
    MapView {
        id: mapView
        anchors.fill: parent
        wrapAroundMode: Enums.WrapAroundModeDisabled

        Map {
            // Set the initial basemap to Streets
            BasemapStreets { }

            // set initial viewpoint to The United States
            ViewpointCenter {
                Point {
                    x: -10800000
                    y: 4500000
                    spatialReference: SpatialReference {
                        wkid: 102100
                    }
                }
                targetScale: 3e7
            }

            FeatureLayer {
                id: featureLayer

                // declare as child of feature layer, as featureTable is the default property
                ServiceFeatureTable {
                    id: featureTable
                    url: "https://sampleserver6.arcgisonline.com/arcgis/rest/services/DamageAssessment/FeatureServer/0"

                    // make sure edits are successfully applied to the service
                    onApplyEditsStatusChanged: {
                        if (applyEditsStatus === Enums.TaskStatusCompleted) {
                            console.log("successfully added feature");
                        }
                    }

                    // signal handler for the asynchronous addFeature method
                    onAddFeatureStatusChanged: {
                        if (addFeatureStatus === Enums.TaskStatusCompleted) {
                            // apply the edits to the service
                            featureTable.applyEdits();
                        }
                    }
                }
            }
        }

        //! [AddFeaturesFeatureService new feature at mouse click]
        onMouseClicked: {  // mouseClicked came from the MapView
            // create attributes json for the new feature
            const featureAttributes = {"typdamage" : "Minor", "primcause" : "Earthquake"};

            // create a new feature using the mouse's map point
            const feature = featureTable.createFeatureWithAttributes(featureAttributes, mouse.mapPoint);

            // add the new feature to the feature table
            featureTable.addFeature(feature);
        }
        //! [AddFeaturesFeatureService new feature at mouse click]
    }
}