Le blog francophone consacré
aux technologies Esri

Introduction à Arcade (2/3)

Je poursuis aujourd'hui la seconde partie de mon article consacré au langage Arcade (voir la première partie ici). Je vous propose de voir plus concrètement des exemples d'utilisation d'expressions Arcade. Les exemples et les copies d'écrans sont issus de la visionneuse de cartes d'un portail ArcGIS mais les expressions peuvent également être définies à l'identique dans ArcGIS Pro, dans du code JavaScript ArcGIS ou dans du code ArcGIS Runtime.



Les contextes d'utilisation d'Arcade

Comme évoqué en introduction, dans sa version 1.0, Arcade est utilisable essentiellement dans les 3 contextes suivants:
  • Construire des expressions pour fournir les valeurs d'étiquetage des entités d'une couche
  • Construire des expressions pour fournir les valeurs de rendu d'une couche ou de variation d'un symbole (couleur, taille, orientation, ...)
  • Construire des expressions pour fournir les alias du curseur de plages de valeurs pour le filtrage des cartes dans ArcGIS Pro

Ces différents contextes sont appelés des "profils". Chaque profil supporte différents type de valeurs en entrée, variables globales et valeurs en sortie.
  
Utiliser Arcade pour l'étiquetage

Exemple 1:

Un premier usage intéressant d'Arcade consiste à créer des expressions pour calculer les valeurs de vos étiquettes. Plutôt que de pré-calculer dans un champ la valeur que vous souhaitez utiliser dans vos étiquettes, Arcade va vous permettre de spécifier une expression qui sera exécuter à la volée à partir des valeurs d'un ou plusieurs champs de la table attributaire de votre couche. 

Ci-dessous un premier exemple très simple pour mettre en majuscule chaque mot de l'étiquette. Prenons par exemple cette carte représentant des IRIS de l'INSEE avec, pour chacun, un nom d'IRIS stocké en majuscule dans la table attributaire.


En choisissant d'utiliser une expression Arcade, vous disposez d'une fonction Proper() directement exploitable pour transformer chaque mot de la chaine de caractères de telle sorte qu'il soit écrit en minuscule avec uniquement la première lettre en majuscule.


Vous noterez l'utilisation de la variable globale $Feature qui représente chaque entité de la couche. Ainsi $Feature.NAME permet d'accéder à la valeur du champ NAME de chaque entité. 


Une fois l'expression appliquée, elle peut à tout moment être modifiée. Par exemple, vous pouvez modifier le paramètre de la fonction Proper() pour n'afficher une majuscule que sur le premier mot de la chaine. On remplace le mot-clé everyword par firstword pour obtenir ce comportement.


Une fois l'expression validée, les étiquettes sont actualisées.


Les expressions Arcade étant évaluées dynamiquement, toute modification de valeur dans la table sera immédiatement répercutée dans la carte. 

Une fois la couche ou la carte enregistrée, les informations d'étiquetage sont accessibles dans toutes les applications supportant Arcade.

Exemple 2:

Un des avantages d'Arcade est d'offrir des fonctions simples et pratiques pour traiter des chaînes de caractères (extraction, substitution, conversion en listes d'éléments, ...). Dans l'exemple ci-dessous, chaque zone de forêt possède un code décrivant le type d'essence dominante. A l'aide de la fonction Decode(), vous pouvez rapidement associer chaque code à une description plus compréhensible que vous pouvez par exemple afficher sous forme d'étiquette.


On notera également l'utilisation de l'instruction return qui permet de préciser la variable contenant la valeur à retourner.



Exemple 3:

Arcade possède également de nombreuses autres fonctions pour manipuler les nombres, les chaines de caractères, les dates ou encore les géométries. Ci-dessous, un exemple permettant de calculer la part de personnes divorcées par rapport à la population de plus de 15 ans.


Vous noterez l'utilisation de variables, l'utilisation d'opérateur de calcul mathématique et la concaténation du résultat sur la dernière ligne. A tout moment, la liste des variables globales et la liste des fonctions sont disponibles à droite de l'interface. A noter également, en l'absence de l'instruction return, c'est la dernière chaîne de caractères créée qui est retournée par l'expression.



Utiliser Arcade pour le rendu de vos couches

Un autre usage important d'Arcade consiste à utiliser des expressions dynamiques, plutôt qu'un champ existant de la table attributaire, pour construire le rendu de votre couche. Par exemple, lorsque la valeur à représenter est le résultat d'un calcul entre plusieurs champs de la table, il sera beaucoup plus simple d'écrire une expression Arcade que de créer un nouveau champ pour stocker le résultat de ce calcul. De plus, les valeurs calculées par l'expression Arcade seront toujours à jour sans aucune intervention de votre part ce qui ne sera pas le cas pour un champ calculé.

Exemple 1:

Dans ce premier exemple, la problématique consiste à représenter la couche de mon réseau de magasins franchisés en affichant le chiffre d'affaire moyen sur les 3 années 2014, 2015 et 2016. Pour calculer ce chiffre d'affaire moyen à partir de mes 3 champs CA2014, CA2015 et CA2016, nous allons utiliser une expression Arcade pour faire ce calcul à la volée. Dans la fenêtre de définition du rendu de la couche, nous choisirons l'option "Nouvelle expression" afin de spécifier cette expression Arcade.

 
L'expression Arcade est très simple puisqu'il suffira d'utiliser la fonction Average().

  
En appliquant ensuite à votre couche un rendu par symboles proportionnels, vous obtenez la carte souhaitée. 

 
Exemple 2:

Dans ce second exemple, nous disposons des résultats du 1er tour des élections régionales 2015 pour la région Nord-Picardie. Pour chaque candidat, un champ contient le nombre de voix obtenues par ce candidat. L'objectif de la carte est de représenter, pour chaque commune, le parti du candidat majoritaire. 

L'expression Arcade va consister tout d'abord à récupérer le score majoritaire à partir des champs des scores des différents candidats en utilisant la fonction Max(). Ensuite, à partir de ce score majoritaire, on va retrouver l'index de ce score dans liste des scores des candidats à l'aide de la fonction IndexOf(). Cet index nous permet ensuite, à l'aide de la liste des différents partis, de retrouver à quel parti le score majoritaire correspond. Une fois le nom du parti retrouvé, il est renvoyé par l'expression Arcade.


Un rendu par symboles uniques est alors appliqué sur le nom du parti.


Exemple 3:
  
Dans ce troisième exemple, nous disposons d'un fichier météorologique avec une grille de points contenant des prévisions de vents. Fourni au format Grib, il ne contient pas directement les intensités et les directions des vents mais des composantes U et V (dx et dy du vecteur de vent). Il faut donc exploiter ces informations pour reconstruire le vecteur de vent (magnitude + orientation). Pour cela, nous pouvons utiliser des expressions Arcade.

 
Tout d'abord, commençons par construire un rendu par dégradé de couleur sur l'intensité du vent (magnitude du vecteur). Pour cela, dans la fenêtre de définition du rendu, nous choisirons l'option "Nouvelle expression" pour construire l'expression de calcul des intensités.


Après avoir choisi le symbole de base et les couleurs du dégradé, votre carte ressemblera à ceci:


Ensuite, il reste à orienter correctement les vecteurs de vent en utilisant l'option d'orientation des symboles. De nouveau, les valeurs d'orientation seront issues d'une expression Arcade. Dans les options de rendu, vous disposez d'une option permettant de faire pivoter les symboles. En activant cette option vous pourrez choisir un champ de la table ou une expression Arcade.


L'expression mathématique permettant de calculer l'orientation du vecteur de vent est la suivante.


En appliquant l'expression, les symboles de la couche des vents s'orientent correctement.



Exemple 4:

Dans ce dernier exemple, nous réalisons une cartographie des principales ville du monde avec des points proportionnels à leur population. Aux plus petites échelles, le nombre de villes à afficher est trop important.  On souhaite donc restreindre le nombre de villes visibles selon le niveau d'échelle. Une première approche serait de dupliquer la couche dans la carte et d'appliquer différents filtres pour différentes plages d'échelles. Avec Arcade, il y a un moyen plus simple pour restreindre l'affichage en utilisant une seule couche.


A l'aide de la variable globale $view.scale, votre expression Arcade peut connaître l'échelle courante et vous pouvez donc introduire des textes conditionnels et renvoyer les valeurs souhaitées selon l'échelle de la carte. Ainsi, dans l'expression suivante, lorsque l'échelle est inférieure à 1:1 500 000 (le dénominateur est supérieur à 1 500 000), nous renvoyons la valeur de population uniquement pour les villes dont la population est supérieure à 1 000 000 d'habitants, sinon nous renvoyons la valeur null. Si l'échelle est supérieure à 1:1 500 000, l'expression renvoie la valeur de la population pour toutes les entités, elles seront donc toutes visibles.


Après avoir appliqué l'expression Arcade, aux plus petites échelles, seules les villes de plus d'1 million d'habitants sont représentées.


Aux plus grandes échelles, toutes les villes sont représentées.




Dans la dernière partie de cet article d'introduction à Arcade, je reviendrai sur les caractéristiques du nouveau langage d'expressions d'ArcGIS ainsi que sur ses évolutions futures.
  

Partager cet article:

Rejoindre la discussion

    Les commentaires à propos de cet article: