Editieren
Benötigtes Bundle: editing
Editier-Funktion zu einer App hinzufügen
Um das Bearbeiten von Kartenobjekten in einer App zu ermöglichen, müssen ein oder mehrere ArcGIS Feature Layer zur App hinzugefügt werden die das Bearbeiten von Objekten erlauben.
Im nächsten Schritt muss das Werkzeug zum Editieren einem Werkzeugset hinzugefügt werden, siehe Konfiguration von Werkzeugen. Anschließend steht ein Dialog zur Verfügung der das Bearbeiten bestehender und Hinzufügen neuer Geoobjekte erlaubt. Bestehende Geoobjekte können - wenn der Dienst dies erlaubt - über den Schritt Feature bearbeiten gelöscht werden.
Konfiguration
Für die Konfiguration stehen u.a. folgende Parameter zur Verfügung (eine vollständige Liste von Parametern finden Sie in der Bundle Dokumentation ):
allowFeatureTemplateFiltering
-
Legt fest, ob ein Text-Feld zum Filtern der Vorlagen angezeigt wird.
Erlaubte Werte:
true
,false
Standardwert:true
groupFeatureTemplatesBy
-
Gibt an, wie die Vorlagen gruppiert werden.
Erlaubte Werte:
layer
Vorlagen werden nach dem Layer gruppiert zu dem Sie gehören.
geometry
Vorlagen werden nach der Art ihrer Geometrie gruppiert (Punkte, Linien, Flächen)
none
Alle Vorlagen werden ohne Gruppierung aufgelistet.
initialGeometryEditMode
-
Legt fest, welcher Bearbeitungsmodus beim Bearbeiten von Geometrien aktiviert ist.
Erlaubte Werte:
transform
erlaubt das Verschieben, Ändern der Größe und Drehen einer Geometrie.
reshape
erlaubt das Verschieben einer Geometrie sowie das Verschieben oder Hinzufügen von Stützpunkten einer Geometrie.
move
erlaubt das Verschieben einer Geometrie, ohne deren Stützpunkte, Größe oder Rotation zu ändern.
toggleGeometryEditModeOnClick
-
Legt fest, ob durch Klick auf die Geometrie zwischen den Bearbeitungsmodi gewechselt wird.
tooltipOptions
-
Optionen für die Konfiguration des Tooltips:
enabled
true
, um einen Tooltip mit Länge und Fläche der aktuellen Skizzengeometrie anzuzeigen oderfalse
, um diesen nicht anzuzeigen. Der Standardwert isttrue
. snappingEnabled
-
Legt fest, ob beim Editieren das Snapping (Fangen) auf vorhandenen Geometrien aktiviert ist.
snappingOptions
-
Optionen, um das Snapping zu konfigurieren:
distance
Snapping-Distanz in Pixeln. Der Standardwert ist
5
.selfEnabled
true
, um Snapping auf der aktuellen Geometrie zu aktivieren,false
um es zu deaktvieren. Der Standardwert isttrue
.featureEnabled
true
, um das Snapping auf anderen Geometrien zu aktivieren,false
um es zu deaktvieren. Der Standardwert isttrue
. visibleElements
-
Legt fest, welche Elemente im Editieren-Fenster angezeigt werden.
Optionen:
createFeaturesSection
true
, wenn der AbschnittFeatures erstellen
sichtbar sein soll, andernfallsfalse
. Der Standardwert isttrue
.editFeaturesSection
true
, wenn der AbschnittFeatures bearbeiten
sichtbar sein soll, andernfallsfalse
. Der Standardwert isttrue
.snappingControls
true
, wenn die Einstellungen für das Snapping sichtbar sein sollen, andernfallsfalse
. Der Standardwert isttrue
.
{
"editing": {
"Config": {
"allowFeatureTemplateFiltering": true,
"groupFeatureTemplatesBy": "layer",
"initialGeometryEditMode": "reshape",
"toggleGeometryEditModeOnClick": true,
"tooltipOptions": {
"enabled": true
},
"snappingEnabled": true,
"snappingOptions": {
"distance": 5,
"selfEnabled": true,
"featureEnabled": true
},
"visibleElements": {
"createFeaturesSection": true,
"editFeaturesSection": true,
"snappingControls": true
// ...
}
}
}
}
Dialog zur Attribut-Editierung anpassen
Um die Eingabemasken zur Attribut-Editierung anzupassen, können sog. FormTemplates genutzt werden, die am jeweiligen Feature Layer definiert werden müssen. Dadurch kann eine Auswahl der angezeigten Attribute, deren Reihenfolge und Gruppierung festgelegt werden.
Das folgende Beispiel zeigt die Definition eines FormTemplates:
{
"map-init": {
"Config": {
"basemaps": [],
"map": {
"layers": [
{
"id": "status",
"url": "https://services.conterra.de/arcgis/rest/services/mapapps/stoerung/FeatureServer/1",
"type": "AGS_FEATURE",
"title": "Layer with custom formTemplate",
"formTemplate": {
"title": "Bürger melden Störungen",
"description": "Helfen Sie dabei, unsere Stadt schön zu halten!",
"elements": [
{
"type": "group",
"label": "Art der Störung",
"description": "Im ersten Schritt, geben Sie bitte die Art der Störung ein.",
"elements": [
{
"type": "field",
"fieldName": "art",
"label": "Was möchten Sie melden?",
"domain": {
"type": "coded-value",
"codedValues": [
{
"name": "Laterne/Beleuchtung",
"code": 1
},
{
"name": "Ampel",
"code": 2
}
]
},
"input": {
"type": "radio-buttons",
"showNoValueOption": false
}
}
]
},
{
"type": "group",
"label": "Details zur Erfassung",
"description": "Geben Sie in diesem Schritt optional weitere Informationen ein.",
"elements": [
{
"type": "field",
"fieldName": "details",
"label": "Details zur Meldung"
},
{
"type": "field",
"fieldName": "zeitpunkt",
"label": "Zeitpunkt der Meldung"
}
]
}
]
}
}
]
}
}
}
}
Weitere Informationen zur Konfiguration können der Bundle-Dokumentation entnommen werden. |
Bearbeiten von zugehörigen Datensätzen
Daten aus abhängigen Tabellen
Um die Bearbeitung von zugehörigen Datensätzen (Related Records) zu ermöglichen, die in einer Tabelle gespeichert sind, registrieren Sie zunächst den Layer und die damit verbundene Tabelle in der Karte. Dies ist in folgendem Beispiel dargestellt:
{
"map-init": {
"Config": {
"basemaps": [],
"map": {
"layers": [
{
"id": "featurelayer1",
"type": "AGS_FEATURE",
"url": "https://services.arcgis.com/ObdAEOfl1Z5LP2D0/ArcGIS/rest/services/Restaurant_Inspections/FeatureServer/0"
}
],
"tables": [
{
"id": "table1",
"type": "AGS_FEATURE",
"url": "https://services.arcgis.com/ObdAEOfl1Z5LP2D0/ArcGIS/rest/services/Restaurant_Inspections/FeatureServer/1"
}
]
}
}
}
}
Im nächsten Schritt definieren Sie sowohl für den Layer als auch die Tabelle ein Form Template und ergänzen hierin ein Element vom Typ relationship
, um die Beziehung herzustellen.
Dies ist in folgendem Beispiel dargestellt:
{
"map-init": {
"Config": {
"basemaps": [],
"map": {
"layers": [
{
"id": "restaurants",
"type": "AGS_FEATURE",
"url": "https://services.arcgis.com/ObdAEOfl1Z5LP2D0/ArcGIS/rest/services/Restaurant_Inspections/FeatureServer/0",
"formTemplate": {
"title": "{establishmentname}",
"elements": [
{
"label": "Name des Restaurants",
"type": "field",
"fieldName": "establishmentname",
"input": {
"type": "text-box"
}
},
{
"label": "Durchgeführte Prüfungen",
"type": "relationship",
"relationshipId": 0
}
]
}
}
],
"tables": [
{
"url": "https://services.arcgis.com/ObdAEOfl1Z5LP2D0/ArcGIS/rest/services/Restaurant_Inspections/FeatureServer/1",
"type": "AGS_FEATURE",
"formTemplate": {
"title": "{inspdate} - {inspdesc}",
"elements": [
{
"label": "Ergebnis",
"type": "field",
"fieldName": "score"
},
{
"label": "Zeitpunkt",
"type": "field",
"fieldName": "inspdate"
},
{
"label": "Durchgeführt im Restaurant",
"type": "relationship",
"relationshipId": 0
}
]
}
}
]
}
}
}
}
Bei der Bearbeitung eines Objekts werden nun die zugehörigen Datensätze aus der Tabelle angezeigt und können zur Bearbeitung geöffnet werden:
Daten aus abhängigen Layern
Um die Bearbeitung von zugehörigen Datensätzen zu ermöglichen, die in einem anderen Karten-Layer liegen, registrieren Sie beide Layer in der Karte und konfigurieren dann die Form Templates analog zur im vorherigen Abschnitt dargestellten Konfiguration.
Das folgende Beispiel zeigt eine Konfiguration von zwei abhängigen Layern:
{
"map-init": {
"Config": {
"basemaps": [],
"map": {
"layers": [
{
"id": "citizens",
"type": "AGS_FEATURE",
"url": "https://services.arcgis.com/ObdAEOfl1Z5LP2D0/arcgis/rest/services/SecurityWorldCities/FeatureServer/0",
"formTemplate": {
"title": "{name}",
"elements": [
{
"label": "This is the name of the citizen",
"type": "field",
"fieldName": "name",
"input": {
"type": "text-box"
}
},
{
"type": "relationship",
"label": "Hometown",
"relationshipId": 0
}
]
}
},
{
"id": "cities",
"type": "AGS_FEATURE",
"url": "https://services.arcgis.com/ObdAEOfl1Z5LP2D0/arcgis/rest/services/SecurityWorldCities/FeatureServer/1",
"formTemplate": {
"title": "{city_name}",
"elements": [
{
"label": "This is the name of the city",
"type": "field",
"fieldName": "city_name",
"input": {
"type": "text-box"
}
},
{
"type": "relationship",
"label": "Hometown of",
"relationshipId": 0
}
]
}
}
]
}
}
}
}