Le langage de script Arcade vous permet de rédiger des expressions en utilisant un ou plusieurs champs des données, pour modifier ou définir l’apparence de la symbologie des entités.
Une expression se présente sur une ou plusieurs lignes de code. Il est possible de créer ou d’importer et de modifier des expressions dans la boîte de dialogue Expression Builder (Générateur d’expressions). Si les attributs d’une entité changent, actualisez les valeurs de symbologie ; pour cela, sélectionnez Refresh values (Actualiser les valeurs) dans le menu déroulant More (Plus) de la fenêtre Symbology (Symbologie).
Remarque :
La symbologie à un seul symbole et la symbologie de diagramme ne prennent pas en charge l’utilisation des expressions Arcade.
Appliquer une expression au champ de symbologie d’une couche d’entités
Pour appliquer une expression au champ de symbologie d’une couche d’entités, procédez comme suit :
- Sélectionnez une couche d’entités dans la fenêtre Contents (Contenu), s’il y a lieu.
- Sous l’onglet Feature Layer (Couche d’entités), dans le groupe Drawing (Dessin), cliquez sur Symbology (Symbologie) pour ouvrir la fenêtre Symbology (Symbologie) s’il y a lieu.
- Sélectionnez une symbologie principale.
- En regard du menu déroulant Field (Champ), cliquez sur le bouton Set an expression (Définir une expression) .
- Dans la boîte de dialogue Expression Builder (Générateur d’expressions), procédez comme suit :
- Si vous le souhaitez, saisissez un texte dans le champ Title (Titre) de l’expression personnalisée.
- Sous Fields (Champs), double-cliquez sur le nom d’un champ pour l’ajouter à l’expression. Si les champs des données sont nombreux, cliquez sur le bouton Advanced (Avancé) pour filtrer la liste et trouver le champ recherché.
- Sous Functions (Fonctions), affichez la bibliothèque des fonctions mathématiques, de texte et de date. Cliquez sur le bouton Helper Type (Type d’assistance) pour filtrer la liste des fonctions, puis double-cliquez sur une fonction pour l’ajouter à l’expression.
- Si un champ est sélectionné, cliquez sur le menu déroulant Insert Values (Insérer des valeurs) pour accéder à des valeurs spécifiques et en ajouter à l’expression.
- Sous Expression, rédigez une expression personnalisée dans la syntaxe du langage Arcade.
Attention :
Si vous symbolisez un champ dont le nom contient des caractères spéciaux ou commence par un nombre, Arcade utilise le même format que pour la syntaxe de champ joint, par exemple $feature['33field'], $feature['acres²'] et $feature['st_area(SHAPE)'].
- Cliquez sur Verify (Confirmer) pour valider l’expression.
Vous recevez des indications dans des messages d’erreur de validation si l’expression n’est pas valide. Vous pouvez également cliquer sur Import (Importer) pour importer ou sur Export (Exporter) pour exporter des expressions en dehors de ArcGIS Pro.
- Cliquez sur OK pour définir l’expression pour le champ.
La symbologie est mise à jour conformément aux changements.
Si une expression personnalisée est utilisée pour la symbologie, le titre de l’expression est affiché dans la fenêtre Contents (Contenu) et dans le menu déroulant Field (Champ). Les expressions sont enregistrées tant que la symbologie principale de la couche reste inchangée.
Notions de base de l’expression de symbologie
Pour définir une symbologie avec une expression, vous devez être familier avec Arcade. Arcade assure une uniformité fonctionnelle dans les logiciels ArcGIS. Cela concerne notamment ArcGIS Pro, ArcGIS API for JavaScript et d’autres applications associées.
Les expressions Arcade de symbologie utilisent le profil de visualisation. Chaque profil comporte un ensemble défini de variables (de profil) globales. Il permet de contextualiser les variables et les valeurs renvoyées de l’expression. Les expressions d’extrusion utilisent également le profil de visualisation. Pour plus d’informations, reportez-vous à la rubrique Visualisation.
Les expressions simples contiennent une définition de la valeur de champ et une opération mathématique. Par exemple, vous pouvez utiliser la variable globale $feature pour référencer un champ de la table attributaire de la couche d’entités, comme la population d’une région en 2020, et en soustraire la population de 2010 pour obtenir la différence. La valeur résultante de l’expression est renvoyée et utilisée pour déterminer le symbole de l’entité.
$feature.2020POP - $feature.2010POP
Les expressions plus complexes peuvent utiliser des variables et occuper plusieurs lignes de code. Par exemple, vous pouvez définir une variable qui représente la différence entre l’heure actuelle et une date représentée dans un champ.
var days_from_today = DateDiff(Now(), date_field, “days”);
Variables de profil de visualisation
La boîte de dialogue Expression Builder (Générateur d’expressions) accessible par la fenêtre Symbology (Symbologie) fait appel exclusivement à Arcade pour homogénéiser les cartes, les projets et les autres applications. Vous trouverez des informations complémentaires dans la documentation Arcade.
La variable globale $view.scale du langage ArcadeArcade renvoie à l’échelle actuelle de la vue (carte, scène ou mise en page). Si vous définissez une variable $view.scale dans une expression de symbologie, la symbologie peut changer en fonction de l’échelle actuelle de la vue. Un exemple d’introduction est donné ci-après.
var mapscale = $view.scale; var weight = $feature.STROKEWGHT; var size; var normal = 1000000; size = normal/mapscale*weight return size
Dans cette expression, la variable mapscale est créée pour stocker la valeur d’échelle. L’expression multiplie l’échelle par le trait weight, qui est déterminé par une valeur du champ STROKEWGHT, et divise ce produit par une valeur personnalisée normal. Le résultat change l’épaisseur du trait des symboles en fonction des zooms avant et arrière sur la vue. Cette possibilité se substitue utilement à la mise à l’échelle de la classe de symbole.
- La variable globale $view.timeProperties permet de rendre accessibles les paramètres du curseur temporel lorsqu’un curseur temporel est activé sur la carte. Les expressions qui utilisent la variable doivent s’adapter aux situations dans lesquelles le curseur temporel n’est pas activé. L’exemple de sortie ci-dessous, qui commence par une instruction HasKey, vérifie la présence du curseur temporel dans la $view. Si le résultat est true (vrai), l’instruction else est lue.
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') )
La variable globale $feature renvoie au champ d’une couche d’entités pour la symbologie.
Conseil :
Si le nom de champ contient un caractère qui n’est pas accessible avec la notation par points, mettez le nom entre crochets, par exemple $feature.["joinKey.fieldName"].
Exemples de profil de visualisation
Les exemples de profil ci-après illustrent notamment comment atteindre certains types de symbologie en utilisant les variables disponibles.
Créer des classes de symbologie
Dans la plupart des cas, vous pouvez configurer manuellement la couche pour qu’elle utilise une symbologie par symboles gradués ou couleurs graduées. Cependant, si vous référencez des informations provenant d’une autre source sujette à de fréquents changements (par exemple, le prix moyen national d’un produit), vous devez actualiser ou réinitialiser les paramètres de symbologie à chaque fois. Pour parer à cette éventualité, vous pouvez définir une expression pour faire des calculs et en utiliser les résultats avec une méthode de classification existante. 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;
Cet exemple détermine la valeur de résultat à partir de deux champs, stationID et stationPrice.
Classer les valeurs uniques
Vous pouvez rédiger une expression personnalisée pour créer une symbologie par valeurs uniques, en particulier si les valeurs sont bien définies et si la symbologie est utilisée pour plusieurs projets. Pour la plupart, les expressions rédigées pour une symbologie par valeurs uniques attribuent des variables à des classes et appliquent les fonctions logiques if-else ou when pour définir les étiquettes de la classe de symbole. Dans l’exemple ci-après, la valeur unique renvoyée varie selon qu’elle appartient ou non au tableau en exemple.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”;
}
Dans un autre exemple, les valeurs sont regroupées selon l’échelle de Fujita améliorée d’intensité des tornades. Cet exemple se rapproche de l’exemple ci-dessus de symbologie basée sur l’échelle, à ceci près que cette expression n’utilise pas la variable $view.scale.var WindSpeed = $feature.WINDSPEED
when (
WindSpeed > 261, “F5”,
WindSpeed > 207, “F4”,
WindSpeed > 158, “F3”,
WindSpeed > 113, “F2”,
WindSpeed > 73, “F1”,
“F0”
)
Symbologie basée sur l’échelle
Dans le premier exemple, la variable vs stocke la valeur de l’échelle actuelle. La variable wind stocke la valeur de la vitesse du vent de l’entité, qui permet de déterminer la taille exacte du symbole. Cette valeur est stockée sous la forme windSize, qui est ensuite redimensionnée par rapport à l’échelle de la carte.
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)
Le second exemple symbolise l’entité provenant du champ EXAMPLE uniquement lorsque l’échelle actuelle est supérieure à 1:30000.
Var scale = $view.scale
var feature = $feature.EXAMPLE
if(scale > 30000 && feature == 10){
return 'Feature equals 10'
}
return 'Feature is not equal to 10'
Les expressions personnalisées vous donnent toute latitude pour mesurer et pour ajuster de manière dynamique la mise à l’échelle de la symbologie, ce d’autant plus si les symboles ne reposent pas sur un modèle. Pour plus d’informations, reportez-vous à la rubrique Dimensionnement de symboles basé sur l’échelle.
Rubriques connexes
Vous avez un commentaire à formuler concernant cette rubrique ?