Verwenden von Arcade-Ausdrücken

ArcGIS Arcade ist eine portierbare, leichte und sichere Ausdruckssprache, mit der 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

Beim Verwenden von Arcade-Ausdrücken sind die folgenden Hinweise zu beachten:

  • 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-Feed-Typen und Quellentypen sowie Werte enthalten, die die Analyse beschreiben, in der der Ausdruck konfiguriert wird.
  • Im Ausdruck-Generator können die Profilvariablen erweitert werden, um eine Liste von Feldern, Zeitwerten, Zielfeldern und Join-Feldern anzuzeigen. In ArcGIS Velocity-Ausdrücken werden folgende Profilvariablen verwendet:
    • $feature: In allen Werkzeugen außer Features verbinden enthält diese Variable die Attributfelder der eingehenden Features aus Feeds und Quellen. Ausdrücke mit Feature-Attributwerten können erstellt werden, indem Felder aus dieser Variable ausgewählt werden.
    • $analytic: Diese Variable enthält für die Analyse spezifische Werte wie $analytic.AnalyticStartTime und $analytic.AnalyticLastEndTime.
      • Um diese analytischen Variablenwerte von einem Epochen-Integer (1646409900000) in ein Datum zu konvertieren, verwenden Sie die Funktion Date() von Arcade. Weitere Informationen finden Sie in der Arcade-Dokumentation unter Datumsfunktionen.
    • $target: Beim Ausdruck Verbindungsbedingung im Werkzeug Features verbinden enthält diese Profilvariable die Attributfelder aus dem Ziel-Feed oder der Zielquelle.
    • $join: Beim Ausdruck Verbindungsbedingung im Werkzeug Features verbinden enthält diese Profilvariable die Attributfelder aus der Verbindungsquelle.
  • Greifen Sie auf Felder und Schemakomponenten im Arcade-Ausdruck-Generator zu.
    • Greifen Sie im Bereich Profilvariablen auf Felder, Variablen und Komponenten des Schemas zu dieser Kategorie zu, z. B. auf $feature, $analytic, $target oder $join.
      Auf Felder und Variablen zugreifen
    • Danach werden die Felder oder Variablen zu dieser Kategorie angezeigt.
      Feld und Variablen zu einer Kategorie auflisten
  • Geben Sie eigene Beispielwerte für den Test eines Arcade-Ausdrucks an.
    • Arcade stellt je nach eingehendem Schema Beispielwerte für jedes Werkzeug bereit. Sie können die Beispielwerte aktualisieren, während Sie die Ausdrücke für jedes Werkzeug erstellen.
    • Gehen Sie wie folgt vor, um die Beispielwerte für den Test eines Arcade-Ausdrucks anzupassen:
      • Wenn Sie zum Bearbeiten eines Arcade-Ausdrucks klicken, wird je nach eingehendem Schema das Dialogfeld Arcade-Ausdruck konfigurieren geöffnet.
      • Beachten Sie, dass auf der Registerkarte $feature für jedes eingehende Feld ein Beispielwert auf Grundlage seines Datentyps angezeigt wird. 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 Sie die für ein Feld bereitgestellten Beispielwerte ändern, damit der Arcade-Ausdruck den Ausdruck auswerten und den durch den Ausdruck zurückgegebenen Datentyp zurückgeben kann.
        Zum Ändern der Beispielwerte auf die Registerkarte "$feature" zugreifen
      • Passen Sie den Beispielwert an, wenn dieser bei Test und Auswertung eines Arcade-Ausdrucks verwendet wird.
        In Arcade-Ausdruckslogik verwendete Beispielwerte bearbeiten
      • Klicken Sie im Dialogfeld Arcade-Ausdruck konfigurieren auf Ausführen, um den Arcade-Ausdruck auszuführen. Der Ausdruck wird basierend auf den bereitgestellten 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 Velocity erstellt werden.
    • Berücksichtigen Sie NULL-Werte in Ihren Daten durch die Verarbeitung von NULL-Werten. Betrachten Sie den 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 <= 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 den mathematischen Operationen in Arcade

OperatorSyntaxErläuterungBeispielErgebnis

Addition

a + b

a plus b.

"fieldname" enthält den Wert 1,5

$target["fieldname"] + 2.5

4.0

Subtraktion

a - b

a minus b.

"fieldname" enthält den Wert 3,3

$target["fieldname"]- 2.2

1.1

Multiplikation

a * b

a mal b.

"fieldname" enthält den Wert 2,0

$join["fieldname"] * 2.2

4.4

Division

a / b

a dividiert durch b.

"fieldname" enthält den Wert 4,0

$join["fieldname"] / 1.25

3.2

Absoluter Wert

abs( a )

Gibt den absoluten (positiven) Wert von a zurück.

"fieldname" enthält den Wert -1,5

abs($target["fieldname"])

1.5

Logarithmus

log( a )

Gibt den natürlichen Logarithmus (Basis e) von a zurück.

"fieldname" enthält den Wert 1

log($join["fieldname"])

0

Sinus

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

Kosinus

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

Tangente

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

Square Root

sqrt( a )

Gibt die Quadratwurzel von a zurück.

"fieldname" enthält den Wert 9

sqrt($join["fieldname"])

3

Minimum

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

Maximum

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

Einschränkung

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 Textfunktionen in Arcade

FunktionSyntaxErläuterungBeispielErgebnis

Verbinden

concatenate(<values>, <separator>)

Verbindet Werte und gibt eine Zeichenfolge zurück.

  • values: Eine Reihe zu verkettender Zeichenfolgenwerte.
  • separator (optional): Für die Verbindung zu verwendendes Trennzeichen, wenn der Parameter "values" ein Array ist. Oder eine zu verbindende Zeichenfolge, wenn ein Einzelwert für den ersten Parameter angegeben wird. Wird kein Wert angegeben, bleibt der Parameter leer.

"fieldname" enthält den Wert von Velocity

concatenate([$target["fieldname"], "is", "great!"], ' ')

Velocity is great!

Suchen

find(<searchText>, <text>, <startPos>)

Sucht eine Zeichenfolge in einer Zeichenfolge. Platzhalter werden nicht unterstützt.

  • searchText: Die zu suchende Unterzeichenfolge.
  • text: Der zu durchsuchende Text.
  • startPos (optional): Der nullbasierte Index der Position in der Zeichenfolge, von der aus gesucht werden soll.

"fieldname1" enthält den Wert "14NorthStreet" und "fieldname2" enthält den Wert "North"

find($target["fieldname2"], $join["fieldname1"])

2

Kleinbuchstaben

lower(<value>)

Ändert eine Zeichenfolge in Kleinbuchstaben.

  • value: Die Zeichenfolge, die in Kleinbuchstaben erstellt werden soll.

"fieldname" enthält den Wert ANALYTICS

lower($join["fieldname"])

Analysen

Textfunktionen können kombiniert werden, um komplexe Vorgänge durchzuführen. Im folgenden Beispiel für eine Textfunktion werden die Funktionen find und lower verwendet.

find(("north"), lower("146NorthStreet")) == False

Beispiele für Datumsfunktionen

Mit Arcade können Datumswerte verarbeitet werden. 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.

In der folgenden Tabelle wird ein Beispiel für verfügbare Operationen gezeigt.

Weitere Informationen zu Datumsfunktionen in Arcade

FunktionSyntaxErläuterungBeispielErgebnis

Datumserstellung

date( <value>, <month>, <day>, <hour>, <minute>)

Gibt einen Wert oder einen Satz von Werten als Datumszeichenfolge aus.

  • value (optional): Entweder die Anzahl von Millisekunden seit dem 1. Januar 1970 UTC oder eine Zahl, die ein Jahr darstellt. Wenn ein Jahr angegeben wird, müssen in nachfolgenden Parametern auch der Monat und der Tag angegeben werden. Dieser Wert kann auch eine Datumszeichenfolge oder ISO 8601-Zeichenfolge sein, die in ein Datum konvertiert werden soll.
  • month (optional): Der Monat (0-11), wobei 0 Januar und 11 Dezember ist.
  • day (optional): Der Tag des Monats (1-31).
  • hour (optional): Die Stunde des Tages (0-23).
  • minute (optional): Die Minute der Stunde (0-59).
  • second (optional): Die Sekunde der Minute (0-59).
  • millisecond (optional): Die Millisekunde der Sekunde (0-999).

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.

Datumsdifferenz

DateDiff(<date1>, <date2>, <units>)

Subtrahiert zwei Datumsangaben und gibt die Differenz in den angegebenen Einheiten zurück.

  • date1: Der Datumswert, von dem ein zweites Datum subtrahiert werden soll.
  • date2: Der Datumswert, der vom ersten angegebenen Datum subtrahiert werden soll.
  • startpos (optional): Die Einheiten, in denen die Differenz der beiden angegebenen Datumsangaben zurückgegeben werden soll. Unterstützt werden die Einheitentypen umfassen Millisekunden, Sekunden, Minuten, Stunden, Tage, Monate und Jahre. Die Standardeinstellung ist Millisekunden.

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

Jahr

Year(<dateValue>)

Gibt das Jahr des angegebenen Datums zurück.

  • value: Ein Datumswert, aus dem das Jahr abgerufen werden soll.

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 3: 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:

OperatorSyntaxErläuterungBeispielErgebnisse

Relational oder Vergleich

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

Logisches ODER

<condition1> || <condition2>

Bedingung 1 oder Bedingung 2 ist erfüllt.

(abs(-5) == 5) || (10 < 2)

True

Logisches ODER

<condition1> && <condition2>

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:

iif(field1 > field2, iif(field2 = 0, field3, field4), 0)

Das folgende Beispiel ist ein Multiplikationsbeispiel für eine Verbindungsbedingung:

iif(field1 > field2, iif(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. Die folgende Tabelle enthält Beispiele:

Weitere Informationen zu den logischen Funktionen in Arcade

FunktionSyntaxErläuterungBeispielErgebnis

IIf

iif(<condition>,<true value>,<false value>)

Gibt einen Wert zurück, wenn eine Bedingungsauswertung "true" ergibt, und einen anderen Wert, wenn die Bedingungsauswertung "false" ergibt.

<true value> und <false value> können Folgendes sein:

  • Ein numerisches Feld. Verwenden Sie eckige Klammern, wenn der Feldname ein Leerzeichen enthält.
  • Eine Zahl.
  • Eine Funktion.

iif($feature["field1"] > $feature["field2"], $feature["field1"], 0)

iif($feature["field1"] > $feature["field2"], iif($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.

Wann

when(<expression1> , <result1> , <expression2> , <result2> , ... , <expressionN> , <resultN>, <default>)

Wertet nacheinander eine Reihe von Ausdrücken aus, bis eine Auswertung "true" ergibt.

  • expression: Ein Ausdruck.
  • result: Das Ergebnis des Ausdrucks. Dabei kann es sich um eine Zahl oder ein Feld handeln.
  • default: Ein optionaler Wert, wenn keiner der Ausdrücke übereinstimmt.

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.

Decodieren

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.

  • conditional val: Der konditionale Wert. Dabei kann es sich um ein Feld oder einen Ausdruck handeln.
  • case: Ein Wert, der mit dem konditionalen Wert verglichen werden soll.
  • result: Das Ergebnis, wenn der entsprechende Fall mit dem konditionalen Wert übereinstimmt.
  • defaultValue: Ein optionaler Wert, wenn kein anderer Wert "true" ist.

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.