Le blog francophone consacré
aux technologies Esri

Introduction à Arcade (3/3)

Je termine aujourd'hui mon introduction au langage Arcade avec une troisième partie dans laquelle je vous propose d'évoquer les principales caractéristiques de ce nouveau langage d'expressions, sans toutefois aller trop dans les détails, la documentation en ligne étant faite pour cela. Pour terminer cette introduction, j'évoquerai l'importance d'Arcade et son future dans la plateforme ArcGIS.



Les caractéristiques du langage Arcade

Sans rentrer trop dans le détails, Arcade est un langage simple qui permet par exemple de retourner implicitement une valeur à partir d'une seule line de code. Proche de JavaScript et de Python en terme de syntaxe, Arcade est en revanche insensible à la casse ce qui simplifie la manipulation des noms de champs et la mémorisation des instructions du langage.

La ligne suivante:


est équivalente à celle-ci:



Arcade repose sur le principe de retour implicite des valeurs. En l'absence d'instruction return, la dernière instruction renvoyant une valeur est considérée comme étant la valeur à renvoyer.

La ligne suivante:


est équivalente à celle-ci:




Arcade est également un langage riche qui propose plus de 70 fonctions pour le traitements des données, des dates, des textes, des géométries, et la réalisation d'opérations logiques ou mathématiques.


Comme beaucoup de langages, Arcade propose des types d'objets simples (Number, Boolean, Date, String) et des types d'objets plus avancés (Dictionary, Feature, Array, Point, Line, Polygon, Multipoint). Les constructeurs des objets ont  des constructeurs surchargés ce qui permet des instanciations simplifiées. Arcade propose un "casting" implicite des types pour les paramètres des fonctions et pour les expressions (calcul mathématique, concaténation de chaînes, ...). Des fonctions de "casting" sont également disponibles pour modifier explicitement le type d'un objet.

Exemple de "casting" implicite:

Exemple de "casting" explicite:


Comme tous les langages structurés, Arcade propose des instructions de tests conditionnels et de boucles. 

Pour réaliser un test conditionnel, vous utiliserez l'instruction classique  If...else... (avec la syntaxe de JavaScript) ou éventuellement les instructions IIF, Decode ou When pour des expressions rédigées sur une seule ligne.

Le test conditionnel suivant:


est équivalent à celui-ci:
  

Pour réaliser une boucle, vous utiliserez l'instruction classique For... (avec la syntaxe de JavaScript) pour itérer sur une série de valeur. 


Vous pourrez également utiliser le For...In pour itérer sur les éléments d'un tableau ou les noms de champs d'un dictionnaire ou d'une entité.


On notera que des instructions comme Break, Continue et Return sont supportées dans les boucles.

Le langage Arcade permet également l'écriture d'expressions plus évoluées et structurées en utilisant des fonctions. Ces dernières doivent être déclarées avec l'instruction Function... et doivent être déclarées avant d'être utilisées (plus en amont dans le code de votre expression).


Enfin, quelques mots sur l'utilisation des variables. Dans Arcade, les variables sont globales, sauf lorsqu'elles sont déclarées dans les fonctions où elles ont alors un scope local. Les variables se déclarent à l'aide de l'instruction var mais cette dernière est optionnelleL'assignement de valeur à une variable se fait comme dans la plupart des langages de scripting. Ci-dessous, quelques exemples de syntaxes courantes:


Le futur d'Arcade

Même si l'utilisateur n'y avait pas accès avant la version 10.5, Arcade est en réalité utilisé depuis plus d'un an dans le portail ArcGIS (Online et Enterprise) pour l'implémentation de certains rendus de SmartMapping introduit récemment dans les cartes web ArcGIS. Depuis la version 10.5 d'ArcGIS, vous pouvez utiliser ce nouveau langage pour créer des expressions d'étiquetage ou pour définir les valeurs associées aux symboles (taille, couleur, orientation ou transparence) de vos couches.


Dans les prochains mois, les nouvelles versions des applications ArcGIS supporteront les expressions Arcade dans les cartes web puis rapidement aussi dans les scènes web. On notera notamment l'implémentation complète d'Arcade (lecture, création et modification) des expressions Arcade. 

Mais au-delà des usages actuels, Esri envisage déjà l'utilisation d'Arcade dans d'autres contextes. 


Par exemple, à court terme, vous retrouverez la possibilité d'utiliser Arcade pour le calcul de valeurs de champs (dans la calculatrice d'ArcGIS Pro ou dans la visionneuse du portail par exemple). Bientôt, vous pourrez aussi utiliser Arcade dans la définition des contenus des fenêtres contextuelles (pop-ups) de vos cartes et scène web. 

Enfin, à moyen terme, Esri va introduire un nouveau système de règles attributaires au niveau de la Géodatabase pour permettre la définition de comportements dynamiques sur les valeurs des champs dans les tables (comme on le fait aujourd'hui avec l'outil "Attribute Assistant"). L'implémentation de ces règles attributaires reposera en grande partie sur le langage Arcade.
  
  
Conclusion

Arcade est une langage d'expression qui est complémentaire à Python qui, pour sa part, adresse les problématiques d'automatisation de tâches dans ArcGIS. Ce nouveau langage est déjà mature et va s'étendre sur le plan des contextes d'usage et sur le plan fonctionnel. C'est donc le moment de regarder Arcade d'un peu plus près et de commencer à découvrir la puissance et la simplification de workflow qu'il va vous apporter.
  

Partager cet article:

Rejoindre la discussion

    Les commentaires à propos de cet article:

3 commentaires :

Jean-Marc Roy a dit…

Bonjour M. Lavenu,

J'ai une question sur le langage Arcade et son rendu dynamique.
J'ai actuellement une problématique sur la mise à jour de la symbologie d'une couche après avoir effectué un filtre.

En effet, j'ai une couche cadastrale qui rassemble plusieurs sites de production, et nous faisons des cartes avec les différents propriétaires. Le problème est qu'il y a tellement de propriétaire qu'une symbologie "Autre" apparaît.

Cette symbologie n'est pas mise à jour, si je filtre ma couche sur une commune particulière.

Cela est également vrai en utilisant une expression Arcade.

Est-il possible d'obtenir ce rendu dynamique avec une expression Arcade (peut-être avec une fonction qui boucle sur les noms de propriétaire et qui réagirait au filtre?).

Je vous remercie par avance de toutes suggestions pour obtenir ce comportement.

Bonne journée.

Gaëtan Lavenu a dit…

Bonjour,

Je ne suis pas certains de bien comprendre votre contexte. Arcade peut effectivement permettre le filtrage sur une commune en ne retournant des valeurs que pour la commune souhaitée. Cependant, cela oblige Arcade à évaluer l'expression pour l'ensemble des entités de la couche ce qui n'est pas utile. Il se peut que la solution la plus efficace consiste à créer des vues qui vous permettront de travailler sur le jeu de données correctement filtré notamment au niveau de la légende.

N'hésitez pas à m'envoyer des éléments plus détaillés si je n'ai pas bien compris votre problématique. Mon adresse email est la suivante: glavenu-at-esrifrance.fr

Jean-Marc Roy a dit…

Bonjour,

Je pense que vous avez bien compris. Je voulais justement éviter de créer des vues car j'ai plus de 50 sites de production. Mon but final est de créer une application avec des filtres, que l'utilisateur peut choisir, et j'aurais souhaité que la symbologie soit mise à jour lorsque le filtre est appliqué, ce qui n'est pas le cas aujourd'hui.

La création de vue est très intéressante mais cela, m'obligerai soit à créer une application par site ou bien d'avoir une application avec toutes les vues consultatives possible, ce qui est assez lourd.

Je me demandais donc si il était possible qu'une expression Arcade évalue en continue toutes les valeurs présentent, pour que la symbologie soit dynamiquement mise à jour, à chaque fois qu'un filtre est supprimé ou appliqué.

Mais j'ai bien l'impression que cela soit impossible, pour le moment, en utilisant les outils Arcgis Online, sans coder avec l'API JS.

Je vous remercie pour votre réponse.

Et merci pour vos articles, qui sont toujours très interessant.

Bonne journée.