Skip to main content

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:

Einzelsymbolsymbolisierung 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 , 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 .

  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 , 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 , 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.

      Achtung:

      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 , um den Ausdruck zu überprüfen.

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

  • 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"].

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 {#4B6}

Sie können einen benutzerdefinierten Ausdruck schreiben, um eine [Einzelwertsymbolisierung](unique-value.md) 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 logische Funktion `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.

```other
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 nicht die Variable $view.scale.

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.