ArcGIS Arcade ist eine portierbare, leichte und sichere Ausdruckssprache, die für die Verwendung in ArcGIS-Software geschrieben wurde, über die mathematische Berechnungen durchgeführt, Texte bearbeitet und logische Anweisungen ausgewertet werden können. Die Sprache unterstützt auch Ausdrücke mit mehreren Anweisungen, Variablen sowie Flusssteuerungsanweisungen. Was Arcade gegenüber anderen Ausdrucks- und Skriptsprachen auszeichnet, ist die Einbindung der Datentypen "feature" und "geometry". Arcade wird häufig zum Durchführen von Berechnungen mit Layer-Feldern und Geometrie verwendet.
Verwendungshinweise
- Arcade-Ausdrücke werden in den Werkzeugen Ereignisse ermitteln, Feld berechnen, Nach Ausdruck filtern, Felder zuordnen, Features verbinden, Puffer erstellen und Tracks rekonstruieren unterstützt.
- Ausdrücke können Attribute aus Eingabe-Feeds und Quellen sowie Werte enthalten, die die Analyse beschreiben, in der der Ausdruck konfiguriert wird.
- Im Ausdruck-Generator werden Felder in Kategorien gruppiert, die als "Globals" bezeichnet werden. "Globals" können erweitert werden, sodass eine Liste der enthaltenen Felder zu sehen ist. In ArcGIS Velocity-Ausdrücken werden folgende "Globals" verwendet:
- $feature: In allen Werkzeugen außer "Features verbinden" enthält dieser "Global" die Attributfelder der eingehenden Features aus Feeds und Quellen. Ausdrücke können mit Feature-Attributwerten erstellt werden, indem Felder aus dieser Gruppe ausgewählt werden.
- $analytic: Dieser "Global" enthält für die Analyse spezifische Werte wie $analytic.AnalyticStartTime oder $analytic.AnalyticLastEndTime.
- Um diese "Global"-Werte der Analyse von einem Epochen-Integer (1646409900000) in ein Datum zu konvertieren, verwenden Sie die Funktion Date() von Arcade. Weitere Informationen finden Sie unter Date Functions in der ArcGIS Arcade-Dokumentation.
- $target: Beim Ausdruck Verbindungsbedingung im Werkzeug Features verbinden enthält dieser "Global" die Attributfelder aus dem Ziel-Feed oder der Zielquelle.
- $join: Beim Ausdruck Verbindungsbedingung im Werkzeug Features verbinden enthält dieser "Global" die Attributfelder aus der Verbindungsquelle.
- Greifen Sie auf Felder und Schemakomponenten im Arcade-Ausdruck-Generator zu.
- Greifen Sie auf der Registerkarte Variablen auf Felder, Variablen und Komponenten des Schemas zu dieser Kategorie zu, z. B. auf die $feature-, $analytic-, $target- oder $join-Kategorien.
- Danach werden die Felder oder Variablen zu dieser Kategorie angezeigt.
- Greifen Sie auf der Registerkarte Variablen auf Felder, Variablen und Komponenten des Schemas zu dieser Kategorie zu, z. B. auf die $feature-, $analytic-, $target- oder $join-Kategorien.
- Geben Sie eigene Beispielwerte für den Test eines Arcade-Ausdrucks an.
- Arcade stellt je nach Feldtyp Standard-Beispielwerte bereit. Zum Beispiel wird für jedes Zeichenfolgefeld der Beispielwert Pacific verwendet. Um einen gültigen Ausdruck für unterschiedliche Datasets zu erstellen und zu testen, müssen jedoch die für ein Feld bereitgestellten Beispielwerte geändert werden, damit der Arcade-Ausdruck den Ausdruck auswerten und den durch den Ausdruck zurückgegebenen Datentyp zurückgeben kann.
- Gehen Sie wie folgt vor, um die Beispielwerte für den Test eines Arcade-Ausdrucks anzupassen:
- Klicken Sie auf den Pfeil, um auf die Felder oder Variablen für eine Gruppierung zuzugreifen ($join, $analytic, $target, $join).
- Klicken Sie auf die Bearbeitungsschaltfläche, um das gewünschte Feld zu bearbeiten.
- Passen Sie die Beispielwerte, die bei Test und Auswertung eines Arcade-Ausdrucks verwendet werden, an.
- Nun wird nach dem Klicken auf Testen der Arcade-Ausdruck basierend auf den aktualisierten Beispieldaten ausgewertet.
- Erstellen Sie Arcade-Ausdrücke, um NULL- und 0-Werte zu verarbeiten.
- In mathematischen Operationen verarbeitet die Arcade-Ausdruckssprache NULL-Werte bei der Auswertung als 0-Werte. Daher sollten für die Verarbeitung von NULL-Werten in Ihren Daten mathematische Arcade-Ausdrücke in ArcGIS Velocity erstellt werden.
- Integrieren Sie hierzu die Verarbeitung von NULL-Werten. Betrachten Sie den folgenden Ausdruck: $feature.DistanceToFeature <= 5. Dieser Ausdruck sollte in der Arcade-Sprache erstellt werden, damit NULL-Werte wie $feature.DistanceToFeature != null && $feature.DistanceToFeature <= 5 verarbeitet werden. In diesen Ausdrücken ist das <= 5 eine mathematische Operation, und wenn das Feld DistanceToFeature den Wert NULL aufweist, wird dieser als 0 ausgewertet, womit der Ausdruck zulässig wäre.
Beispiele für mathematische Operatoren und Funktionen
Mit Ausdrücken können Zahlen mathematisch verarbeitet werden. In der folgenden Tabelle werden verschiedene verfügbare Operationen beschrieben. Weitere Informationen zu mathematischen Operationen in Arcade finden Sie unter Mathematische Funktionen.
Operator | Erläuterung | Beispiel | Ergebnis |
a + b | a plus b. | "fieldname" enthält den Wert 1,5 $target["fieldname"] + 2.5 | 4,0 |
a - b | a minus b. | "fieldname" enthält den Wert 3,3 $target["fieldname"]- 2.2 | 1,1 |
a * b | a mal b. | "fieldname" enthält den Wert 2,0 $join["fieldname"] * 2.2 | 4,4 |
a / b | a dividiert durch b. | "fieldname" enthält den Wert 4,0 $join["fieldname"] / 1.25 | 3,2 |
abs( a ) | Gibt den absoluten (positiven) Wert von a zurück. | "fieldname" enthält den Wert -1,5 abs($target["fieldname"]) | 1,5 |
log( a ) | Gibt den natürlichen Logarithmus (Basis e) von a zurück. | "fieldname" enthält den Wert 1 log($join["fieldname"]) | 0 |
sin( a ) | Gibt den trigonometrischen Sinus von a zurück. Von der Eingabe wird angenommen, dass es sich um einen Winkel in Radiant handelt. | "fieldname" enthält den Wert 1,5707 sin($target["fieldname"]) | 1 |
cos( a ) | Gibt den trigonometrischen Cosinus von a zurück. Von der Eingabe wird angenommen, dass es sich um einen Winkel in Radiant handelt. | "fieldname" enthält den Wert 0 cos($join["fieldname"]) | 1 |
tan( a ) | Gibt den Tangens von a zurück. Von der Eingabe wird angenommen, dass es sich um einen Winkel in Radiant handelt. | "fieldname" enthält den Wert 0 tan($target["fieldname"]) | 0 |
sqrt( a ) | Gibt die Quadratwurzel von a zurück. | "fieldname" enthält den Wert 9 sqrt($join["fieldname"]) | 3 |
min( a, b ) | Gibt von a und b die Zahl mit dem niedrigsten Wert zurück. | "fieldname" enthält den Wert 1,5 und den Wert -3 min($join["fieldname"], -3) | -3 |
max( a, b ) | Gibt von a oder b die Zahl mit dem höchsten Wert zurück. | "fieldname1" enthält den Wert 1,5 und "fieldname2" enthält den Wert -3 max($target["fieldname1"], $join["fieldname2"]) | 1,5 |
constrain(<value>,<low>,<high>) | Gibt den Eingabewert zurück, sofern dieser innerhalb der Grenzwerte liegt. Wenn der Eingabewert kleiner als der niedrige Wert ist, wird der niedrige Wert zurückgegeben. Wenn der Eingabewert größer als der hohe Wert ist, wird der hohe Wert zurückgegeben. | constrain($target["distance"], 0, 10) constrain($join['Store dist'], 6, distance) | Gibt 0 zurück, wenn "distance" kleiner als 0 ist, 10, wenn "distance" größer als 10 ist, und ansonsten "distance". Gibt 6 zurück, wenn "Store dist" kleiner als 6 ist, "distance", wenn "Store dist" größer als "distance" ist, und ansonsten "Store dist". |
In dem folgenden Multiplikationsbeispiel für einen Verbindungsbedingungsausdruck wird ein Feld im Ziel-Dataset verwendet:
$target["Distance"] * 2 > $join["DistField"]
Beispiele für Textfunktion
Mit Arcade-Ausdrücken kann Text verarbeitet werden. In der folgenden Tabelle werden verschiedene verfügbare Operationen beschrieben. Weitere Informationen zu den Textfunktionen in Arcade finden Sie unter Textfunktionen.
Operator | Erläuterung | Beispiel | Ergebnis |
concatenate( <Werte>, <Trennzeichen>) | Verbindet Werte und gibt eine Zeichenfolge zurück.
| "fieldname" enthält den Wert von ArcGIS Velocity concatenate([$target["fieldname"], "is", "great!"], ' ') | ArcGIS Velocity is great! |
find(<searchText>, <text>, <startPos>) | Sucht eine Zeichenfolge in einer Zeichenfolge. Platzhalter werden nicht unterstützt.
| "fieldname1" enthält den Wert "14NorthStreet" und "fieldname2" enthält den Wert "North" find($target["fieldname2"], $join["fieldname1"]) | 2 |
lower(<Wert>) | Ändert eine Zeichenfolge in Kleinbuchstaben.
| "fieldname" enthält den Wert ANALYTICS lower($join["fieldname"]) | Analysen |
Im folgenden Textbeispiel werden "find" und "lower" verwendet.
find(("north"), lower("146NorthStreet")) == False
Beispiele für Datumsfunktionen
Mit Arcade können Datumswerte verarbeitet werden. In der folgenden Tabelle werden verschiedene verfügbare Operationen beschrieben. Weitere Informationen zu Datumsfunktionen in Arcade finden Sie unter Datumsfunktionen.
In Arcade ist der Wertebereich für Monate 0 (Januar) bis 11 (Dezember), für Tage 1 bis 31, für Stunden 0 (00:00 Uhr) bis 23 (23:00 Uhr), für Minuten und Sekunden 0 bis 59 und für Millisekunden 0 bis 999.
Operator | Erläuterung | Beispiel | Ergebnis |
date( <Wert>, <Monat>, <Tag>, <Stunde>, <Minute>) | Gibt einen Wert oder einen Satz von Werten als Datumszeichenfolge aus.
| "fieldname" enthält den Wert 1476987783555 Beispiel 1: Date($target["fieldname"]) Beispiel 2: Date(2017,0,14,0) Beispiel 3: Date() | Beispiel 1: 20 Oct 2016 11:23:03 am Beispiel 2: 14 Jan 2017 12:00:00 am Beispiel 3: Gibt die aktuelle Uhrzeit zurück. |
DateDiff(<Datum1>, <Datum2>, <Einheiten>) | Subtrahiert zwei Datumsangaben und gibt die Differenz in den angegebenen Einheiten zurück.
| Beispiel 1: DateDiff(Date(2017,1,14,0), Date()) Beispiel 2: DateDiff(Date(2017,1,14,0), Date(), "Years") | Das Ergebnis variiert abhängig vom Zeitpunkt, an dem Sie diesen Befehl ausführen. Beispiel 1: -20532129137 Beispiel 2: -0,6546783768647119 |
Year(<Datumswert>) | Gibt das Jahr des angegebenen Datums zurück.
| Beispiel 1: "fieldname" ist ein Feld vom Typ "Date" mit dem Wert "09 Oct 2017 04:30:43 pm" Year($join["fieldname"]) Beispiel 2: "fieldname" ist ein als ISO 8601-Zeichenfolge formatiertes Zeichenfolgenfeld mit dem Wert 2012-09-27. Beispiel 2: "fieldname" ist ein als ISO 8601-Zeichenfolge formatiertes Zeichenfolgenfeld mit dem Wert "Year(Date($target["fieldname"]))" | Beispiel 1: 2017 Beispiel 2: 2012 |
Konditionale Operatoren
Konditionale Anweisungen können für die folgenden Operatoren verwendet werden:
Operator | Erläuterung | Beispiel | Ergebnisse |
a > b a < b | a ist größer als b. a ist kleiner als b. | 10 > 2 | False |
a >= b a <= b | a ist größer als oder gleich b. a ist kleiner als oder gleich b. | abs(-10) >= 10 | True |
a != b | a ist ungleich b. | abs(-3) != -3 | True |
a == b | a ist gleich b. | abs(-5) == 5 | True |
<Bedingung1> || <Bedingung2> | Bedingung 1 oder Bedingung 2 ist erfüllt. | (abs(-5) == 5) || (10 < 2) | True |
<Bedingung1> && <Bedingung2> | Bedingung 1 und Bedingung 2 sind erfüllt. | (abs(-5) == 5) && (10 < 2) | False |
Im folgenden Beispiel für einen Pufferausdruck werden erweiterte Funktionen und Bedingungen verwendet:
iff(field1 > field2, iff(field2 = 0, field3, field4), 0)
Das folgende Beispiel ist ein Multiplikationsbeispiel für eine Verbindungsbedingung:
iff(field1 > field2, iff(field2 = 0, field3, field4), 0) > $join["Distance"] * 2
Beispiele für logische Operatoren
Zusätzlich zu konditionalen Operatoren können zum Erstellen von Ausdrücken auch erweiterte logische Operatoren verwendet werden, wie in der Tabelle unten angegeben. Weitere Informationen zu logischen Funktionen in Arcade finden Sie unter Logische Funktionen.
Funktion | Erläuterung | Beispiel | Ergebnis |
iff(<Bedingung>,<Wert für "true">,<Wert für "false">) | Gibt einen Wert zurück, wenn eine Bedingungsauswertung "true" ergibt, und einen anderen Wert, wenn die Bedingungsauswertung "false" ergibt. Bei <Wert für "true"> und <Wert für "false"> kann es sich um Folgendes handeln:
| iff($feature["field1"] > $feature["field2"], $feature["field1"], 0) iff($feature["field1"] > $feature["field2"], iff($feature["field2"] = 0, $feature["field3"], $feature["field4"]), 0) | Gibt "field1" zurück, wenn "field1" größer als "field2" ist, andernfalls 0. Gibt das Ergebnis der zweiten iff-Funktion zurück, wenn "field1" größer als "field2" ist, andernfalls 0. |
when(<expression1> , <result1> , <expression2> , <result2> , ... , <expressionN> , <resultN>, <default>) | Wertet nacheinander eine Reihe von Ausdrücken aus, bis eine Auswertung "true" ergibt.
| when(($feature["field1"] + 10) > 1, 1,($feature["field2"] + 10) > 2 , 2, $feature["field3"]) | Wenn "field1 + 10" größer als 1 ist, wird 1 zurückgegeben. Falls nicht, wird überprüft, ob "field2 + 10" größer als 2 ist. Falls ja, wird 2 zurückgegeben. Wenn nicht, wird "field3" zurückgegeben. |
decode(<conditional val>, <case1> , <result1>, <case2>, <result2>,... <caseN>, <resultN>, <defaultValue>) | Wertet einen Ausdruck aus und vergleicht dessen Wert mit nachfolgenden Parametern. Wenn der Ausdruck übereinstimmt, wird der nächste Parameterwert zurückgegeben. Gibt es keine Übereinstimmung, kann der letzte Parameter als Standardrückgabewert verwendet werden.
| decode($feature["field1"] + 3 , $feature["field1"], 1, $feature["field2"], 2, 0) | Überprüft den konditionalen Wert "field1 + 3" und case1 "field1" auf Gleichheit. Bei "true " wird 1 zurückgegeben. Bei "false" werden "field1 + 3" und "field2" auf Gleichheit überprüft. Bei "true" wird 2 zurückgegeben; andernfalls 0. |