Festlegen benutzerdefinierter Ausdrücke für die Symbolisierung

Mit der Arcade-Skriptsprache können Sie Ausdrücke unter Verwendung von einem oder mehreren Feldern in den Daten schreiben, um das Aussehen der Feature-Symbolisierung zu ändern oder anzugeben.

Ein Ausdruck kann ein einzeiliger oder mehrzeiliger Code sein. Ausdrücke können im Dialogfeld Ausdruck-Generator erstellt oder importiert und geändert werden. Wenn sich die Attribute eines Features ändern, aktualisieren Sie die Symbolisierungswerte, indem Sie im Bereich Symbolisierung im Dropdown-Menü Weitere die Option Werte aktualisieren auswählen.

Hinweis:

Einzelsymbol- und Diagrammsymbolisierung unterstützen die Verwendung von Arcade-Ausdrücken nicht.

Anwenden eines Ausdrucks auf das Symbolisierungsfeld eines Feature-Layers

Gehen Sie wie folgt vor, um einen Ausdruck auf das Symbolisierungsfeld eines Feature-Layers anzuwenden:

  1. Wählen Sie bei Bedarf einen Feature-Layer im Bereich Inhalt aus.
  2. Klicken Sie auf der Registerkarte Feature-Layer in der Gruppe Darstellung auf Symbolisierung Symbolisierung, um den Bereich Symbolisierung zu öffnen, falls er noch nicht geöffnet ist.
  3. Wählen Sie eine primäre Symbolisierung aus.
  4. Klicken Sie neben dem Dropdown-Menü Feld auf die Schaltfläche Einen Ausdruck festlegen Einen Ausdruck festlegen.
  5. Gehen Sie im Dialogfeld Ausdruck-Generator wie folgt vor:
    1. Fügen Sie für den benutzerdefinierten Ausdruck einen Text als Titel hinzu.
    2. Doppelklicken Sie unter Felder auf den Namen eines Feldes, um es dem Ausdruck hinzuzufügen. Wenn die Daten eine große Anzahl von Feldern enthalten, klicken Sie auf die Schaltfläche Erweitert Advanced, um die Liste zu filtern und das gewünschte Feld zu finden.
    3. Zeigen Sie unter Funktionen die Bibliothek der mathematischen, Text- und datumsbasierten Funktionen an. Klicken Sie auf die Schaltfläche Hilfsmethodentyp Helper Type, um die Liste der Funktionen zu filtern, und doppelklicken Sie auf eine Funktion, um sie zum Ausdruck hinzuzufügen.
    4. Wenn ein Feld ausgewählt ist, klicken Sie auf das Dropdown-Menü Werte einfügen, um nach bestimmten Werten zu suchen und sie dem Ausdruck hinzuzufügen.
    5. Schreiben Sie unter Ausdruck einen benutzerdefinierten Ausdruck in der Syntax der Arcade-Sprache.
      Vorsicht:

      Bei der Symbolisierung eines Feldes, dessen Name Sonderzeichen enthält oder mit einer Ziffer beginnt, verwendet Arcade das gleiche Format als verbundene Feldsyntax, z. B. $feature['33field'], $feature['acres²'] und $feature['st_area(SHAPE)'].

    6. Klicken Sie auf Überprüfen Überprüfen, um den Ausdruck zu überprüfen.

      Validierungsfehlermeldungen geben an, wenn der Ausdruck ungültig ist. Sie können auch zum Importieren auf Importieren Import klicken, oder klicken Sie auf Exportieren Exportieren, um Ausdrücke außerhalb von ArcGIS Pro zu exportieren.

  6. Klicken Sie auf OK, um den Ausdruck für das Feld festzulegen.

    Die Symbolisierung wird aktualisiert, um die Änderungen zu übernehmen.

Wenn ein benutzerdefinierter Ausdruck für die Symbolisierung verwendet wird, wird der Titel des Ausdrucks im Bereich Inhalt und im Dropdown-Menü Feld angezeigt. Ausdrücke werden gespeichert, solange die primäre Symbolisierung des Layers gleich bleibt.

Grundlagen von Symbolisierungsausdrücken

Zum Definieren der Symbolisierung mit einem Ausdruck sollten Sie mit Arcade vertraut sein. Arcade bietet eine einheitliche Funktionalität in der gesamten ArcGIS-Software. Dazu zählen ArcGIS Pro, ArcGIS API for JavaScript und ähnliche Anwendungen.

In Arcade-Symbolisierungsausdrücken wird das Visualisierungsprofil verwendet. Für jedes Profil ist ein Satz von globalen Variablen (Profilvariablen) definiert. Damit werden die Variablen und Rückgabewerte des Ausdrucks eingeordnet. Für Extrusionsausdrücke wird darüber hinaus das Visualisierungsprofil verwendet. Weitere Informationen finden Sie unter Visualisierung.

Einfache Ausdrücke enthalten eine Definition des Feldwertes und eine mathematische Operation. Sie können beispielsweise die globale Variable $feature verwenden, um ein Feld in der Attributtabelle des Feature-Layers zu referenzieren, z. B. die Bevölkerung einer Region im Jahr 2020, und die Gesamtbevölkerung des Jahres 2010 davon abziehen, um die Differenz zu ermitteln. Der resultierende Wert des Ausdrucks wird zurückgegeben und zum Bestimmen des Feature-Symbols verwendet.

$feature.2020POP - $feature.2010POP

Komplexere Ausdrücke können Variablen nutzen und mehrzeilig sein. Sie können z. B. eine Variable festlegen, um die Differenz zwischen der aktuellen Zeit und dem in einem Feld dargestellten Datum darzustellen.

var days_from_today = DateDiff(Now(), date_field, “days”);

Variablen von Visualisierungsprofilen

Das Dialogfeld Ausdruck-Generator, auf das über den Bereich Symbolisierung zugegriffen wird, verwendet ausschließlich Arcade, um Konsistenz zwischen Karten, Projekten und anderen Anwendungen zu ermöglichen. Zusätzliche Informationen sind in der Arcade-Dokumentation verfügbar.

  • Die globale Arcade-Variable $view.scale referenziert den aktuellen Maßstab der Ansicht (Karte, Szene oder Layout). Wenn Sie die Variable in einem Symbolisierungsausdruck auf $view.scale festlegen, kann sich die Symbolisierung abhängig vom aktuellen Maßstab der Ansicht ändern. Ein einführendes Beispiel ist unten dargestellt.

    var mapscale = $view.scale;
    var weight = $feature.STROKEWGHT;
    var size;
    var normal = 1000000;
    
    size = normal/mapscale*weight
    return size

    In diesem Ausdruck wird die Variable mapscale verwendet, um den Maßstabswert zu speichern. Der Ausdruck multipliziert den Maßstab mit dem Wert weight des Strichs, der von einem Wert im Feld STROKEWGHT abgeleitet wird, und teilt dieses Produkt durch den benutzerdefinierten Wert normal. Das Ergebnis ändert die Strichgewichtung von Symbolen, wenn Sie die Ansicht vergrößern und verkleinern. Dies ist eine nützliche Alternative zur Symbolklassenskalierung.

  • Die globale Variable $view.timeProperties gewährt Zugriff auf die Einstellungen des Zeitschiebereglers, sofern er in der Karte aktiviert ist. Ausdrücke mit dieser Variable müssen auch für Situationen geeignet sein, in denen der Zeitschieberegler nicht aktiviert ist. Die nachstehende Beispielausgabe beginnt mit der Anweisung HasKey, um das Vorhandensein des Zeitschiebereglers in $view zu überprüfen. Wird "true" zurückgegeben, wird die Anweisung else gelesen.
    if (HasKey($view, 'timeProperties') == false || $view.timeProperties.currentEnd == null)
      return -1
    else
      return (
        DateDiff($view.timeProperties.currentEnd, $view.timeProperties.currentStart, 'days') 
        -
        DateDiff($view.timeProperties.currentEnd, $feature.Date_time, 'days') 
      )
  • Die globale Variable $feature bezieht sich auf das Feld für die Symbolisierung eines Feature-Layers.

    Tipp:

    Wenn der Feldname ein Zeichen enthält, auf das mit der Punktnotation nicht zugegriffen werden kann, setzen Sie den Namen in Klammern, z. B. $feature.["joinKey.fieldName"].

Beispiele für Visualisierungsprofile

Die folgenden Profilbeispiele zeigen, wie bestimmte Typen von Symbolisierung mit den verfügbaren Variablen erreicht werden können.

Erstellen von Symbolisierungsklassen

In den meisten Fällen können Sie für den Layer manuell festlegen, dass die Symbolisierung Abgestufte Symbole oder Abgestufte Farben verwendet wird. Wenn Sie jedoch Informationen aus einer anderen Quelle referenzieren, die sich häufig ändert (beispielsweise der landesweite Durchschnittspreis einer Ware), müssen Sie die Symbolisierungseinstellungen jedes Mal aktualisieren oder zurücksetzen. Um dies zu vermeiden, können Sie einen Ausdruck festlegen, um die Berechnungen durchzuführen, und die Ergebnisse mit einer vorhandenen Klassifizierungsmethode verwenden.

	var stationID = $feature.stationID; //ID number for gas station
var stationPrice = $feature.stationPrice; //Price at gas station
var avgPrice = '4.164' //National average price of gas

var priceDiffUL = Round(avgPrice - stationPrice, 2); //Calculate the difference

return priceDiffUL;

In diesem Beispiel wird der Ergebniswert der beiden Felder stationID und stationPrice ermittelt.

Klassifizieren von Einzelwerten

Sie können einen benutzerdefinierten Ausdruck schreiben, um eine Einzelwertsymbolisierung zu erstellen. Dies gilt insbesondere, wenn die Werte gut definiert sind und die Symbolisierung für mehrere Projekte verwendet wird. Die meisten für die Einzelwertsymbolisierung geschriebenen Ausdrücke weisen Variablen zu Klassen zu und wenden die logischen Funktionen if-else oder when an, um Beschriftungen von Symbolklassen zu definieren. Im folgenden Beispiel hängt der zurückgegebene Einzelwert davon ab, ob er zum Beispiel-Array gehört.

var example_array = [1, 2, 3, 4];
if (IndexOf(example_array, $feature.VALUE) > -1) {
return “Value is 1, 2, 3 or 4”;
} else {
return “Other value”;
}

In einem anderen Beispiel sind Werte basierend auf der erweiterten Fujita-Skala für Tornados gruppiert. Dieses Beispiel ähnelt dem obigen Beispiel zur maßstabsbasierten Symbolisierung, aber dieser Ausdruck verwendet die Variable $view.scale nicht.

var WindSpeed = $feature.WINDSPEED
when (
WindSpeed > 261, “F5”,
WindSpeed > 207, “F4”,
WindSpeed > 158, “F3”,
WindSpeed > 113, “F2”,
WindSpeed > 73, “F1”, 
“F0”
)

Maßstabsbasierte Symbolisierung

Im ersten Beispiel speichert die Variable vs den aktuellen Maßstabswert. Die Variable wind speichert den Wert der Windgeschwindigkeit des Features. Damit wird die genaue Größe des Symbols bestimmt. Der Wert wird als windSize gespeichert, und die Größe wird abhängig vom Kartenmaßstab angepasst.

var vs = $view.scale
var wind = $feature.WINDSPEED

var windSize = When(
    wind > 136, 24, //Category 5
    wind > 112, 23, //Category 4
    wind > 95, 22, //Category 3
    wind > 82, 21, //Category 2
    wind > 63, 20, //Category 1
    wind > 33, 18, //Tropical Storm
    16) //Tropical Depression

when(
    vs >=37000000, windSize,
    vs >=18500000, 1 + windSize,
    vs >=9300000, 2 + windSize,
    vs >=4700000, 4 + windSize,
    vs >=2000000, 6 + windSize, 8 + windSize)

Im zweiten Beispiel wird das Feature aus dem Feld EXAMPLE nur symbolisiert, wenn der aktuelle Maßstab größer als 1:30000 ist.

Var scale = $view.scale
var feature = $feature.EXAMPLE
if(scale > 30000 && feature == 10){
return 'Feature equals 10'
}
return 'Feature is not equal to 10'

Benutzerdefinierte Ausdrücke bieten eine flexible Möglichkeit, die Symbolisierungsskalierung zu messen und dynamisch anzupassen, insbesondere wenn die Symbole nicht auf einer Vorlage basieren. Weitere Informationen finden Sie unter Maßstabsbasierte Größenanpassung von Symbolen.

Verwandte Themen