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 ligne 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:

11 comments :

Unknown 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

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

Anonyme a dit…

Bonjour,

Série d'articles super intéressante, merci beaucoup ! Y a-t-il une fonction permettant un retour chariot (un saut de ligne) ?

Bonne journée :)

Anonyme a dit…

Oui, très interessant ce nouvel arcade.
J'espère qu'on pourra l'utiliser prochainement dans les fenêtres contextuelles :)

Gaëtan Lavenu a dit…

Selon les informations dont je dispose actuellement, cela pourrait arriver dès la prochaine mise à jour d'ArcGIS Online (dernière semaine de juin 2017) :-)

Anonyme a dit…

Bonjour,
Je n'ai pas trouvé la fonction retour chariot, est ce qu'on peut désormais le faire ?

pduc a dit…

Bonjour,

J'ai pu voir que l'utilisation d'Arcade dans les fenêtres contextuelles est maintenant présent dans ArcGIS Online, qu'en est-il de l'accès aux champs des tables reliées ? D'un manière générale est-il prévu un moyen de créer une symbologie relative aux éléments d'une table reliée (via une expression Arcade ou directement par l'accès aux valeurs des champs des tables reliées) ?
Et également est-il toujours prévu la possibilité de créer des champs calculés dynamiques dans ArcGIS Pro en utilisant Arcade ?
Merci pour votre blog très intéressant.

fab a dit…

Bonjour, j'aimerai savoir s'il était possible de faire un calcul dynamique de reprojection avec Arcade.
Par exemple, à partir de champs long / lat en WGS84, calculer dynamiquement les coordonnées en UTM 22N par ex.
Auriez vous une idée du code que je dois saisir pour cela?
Merci beaucoup

Jean-Bernard Boschung a dit…

Monsieur Lavenu bonjour,

J'aimerais pouvoir en cliquant sur le périmètre d'une commune, filtrer des valeurs (coordonnées des autorités : Maire, conseiller, resp. technique) contenue dans une table et afficher ceci dans la boite d'informations.

Outre le filtrage par commune, le nombre de personne va varier d'une entité à l'autre.

Arcade permettrait-il de faire ceci ? Si oui, une petite piste...

Merci d'avance et bonne journée

Gaëtan Lavenu a dit…

Bonjour,

Les expressions Arcade permettent de faire ce genre de chose en effet. Il faudra pour cela que la table soit en relation avec votre couche d'entités (relation préparée dans la Géodatabase avant sa publication sur ArcGIs Online). Dans ce cas, Arcade permet de récupérer un attribut de l'entité cliquée et de rechercher les enregistrements liés se trouvant dans la table. L'expression peut alors construire un chaîne de texte présentant les informations de cette table (Maire, conseiller(s), ...).