Skip to main content

Utilisation d’expressions Arcade dans vos fenêtres contextuelles ArcGIS Online

Vous pouvez personnaliser les attributs présentés dans les fenêtres contextuelles de votre carte ArcGIS Online. Cet article vous montrera comment utiliser les expressions Arcade pour réaliser les tâches suivantes :

1. Vérifier la valeur d’attribut d’une entité et renvoyer une nouvelle valeur d’attribut en fonction de ce qui est trouvé.
2. Construire un nouvel attribut dynamique comme une URL en utilisant les valeurs d’attribut existantes.
3. Analyser des valeurs dans de longues chaînes d’attributs.

Dans les exemples ci-dessous, j’utiliserai la couche d’entités disponible ici, que vous pouvez également utiliser pour suivre la démonstration. Pour commencer, créez une nouvelle carte web et ajoutez la couche d’entités. Cliquez sur « More Options » (plus d’options) et activez les fenêtres contextuelles si elles ne le sont pas déjà (elles devraient l’être par défaut). Ouvrez le tableau pour vous familiariser avec les données. Enfin, cliquez sur « Configure Pop-up » (configurer une fenêtre contextuelle) pour commencer avec les exemples ci-dessous. Pour tous ces exemples, faites passer l’attribut « Display » (affichage) à « A Custom Attribute Display » (affichage personnalisé de l’attribut).

1. Utiliser la valeur « When » (quand) pour renvoyer une nouvelle valeur d’attribut (exercice simple)

Le premier cas que nous allons examiner est le renvoi d’une nouvelle valeur en fonction d’une valeur existante. Une application courante de ce cas se produit lorsqu’il y a une valeur nulle.

La première fermeture de route dans l’ensemble de données de démonstration se trouve sur la rue Montrose à Winnipeg, au Manitoba. Le champ « Incident Name » (nom de l’incident) est vide, mais j’aimerais que la fenêtre contextuelle indique plutôt « Unknown » (inconnu).

1. Sous « Attribute Expressions » (expressions d’attributs), cliquez sur « Add » (ajouter) pour commencer une nouvelle expression.
2. Une boîte de dialogue apparaît avec la mention « Custom » (personnalisé) en haut et une zone de texte en dessous. Cliquez sur l’icône d’édition à côté de la mention « Custom » (personnalisé) et changez cette mention pour un nom significatif comme « Updated Incident Name » (nom de l’incident mis à jour).
3. Entrez le code suivant dans la case. Une explication détaillée suit.

var incidentName = $feature.INCIDENTNM;
var newName = When(
    incidentName == Null, 'Unknown',
    incidentName);
return newName;

Ligne 1 : Cela permet de récupérer la valeur existante du nom de l’incident.

Ligne 2 : Cela lance le test « When » (quand). Le script vérifiera chaque énoncé jusqu’à ce qu’il y obtienne une correspondance.

Ligne 3 : Si la valeur du nom de l’incident est nulle, cela attribue la valeur « Unknown » (inconnu) à la variable new_name (nouveau_nom).

Ligne 4 : Cela attribue une valeur si l’énoncé précédent n’est pas satisfait. Donc, si la valeur n’est pas nulle, le nom d’origine de l’incident est conservé.

Ligne 5 : C’est la dernière ligne du script. Elle rapporte la valeur pour le nouveau champ que vous avez créé.

4. Cliquez sur « OK ». Vous devriez voir une nouvelle valeur dans la boîte sous « Attribute Expressions » (Expressions d’attributs). Remarquez qu’on y voit le nom que vous avez entré pour remplacer « Custom » (personnalisé), suivi de quelque chose comme « {expression/expr0} ». Vous aurez besoin de cette deuxième valeur.
5. Pour afficher la nouvelle valeur dans votre fenêtre contextuelle, cliquez sur « CONFIGURE » (configurer) sous « Pop-up Contents » (contenu de la fenêtre contextuelle).
6. Dans la boîte, ajoutez « Incident Name: {expression/expr0} », cliquez sur « OK » dans la fenêtre contextuelle, puis cliquez sur « OK » dans la barre latérale. Votre fenêtre contextuelle devrait ressembler à ce qui suit :

Remplacer une valeur nulle par « Unknown » (inconnu) à l’aide d’Arcade

Vous pouvez ajouter d’autres cas après la ligne 3 pour obtenir des valeurs différentes. Par exemple, si un seul espace a été entré au lieu d’une valeur nulle, ajoutez :

incidentName == ' ', 'Unknown',

2. Construire un attribut dynamique en utilisant les valeurs d’attribut existantes

Un cas courant pour cet exemple est l’utilisation d’un identificateur existant pour créer une URL. Il arrive souvent qu’une parcelle, une désignation d’utilisation du sol, un parc ou un sentier soit associé à une URL qui n’est pas disponible dans les données. Dans cet exemple, nous utiliserons l’identificateur de fermeture de route pour construire une URL.

1. Sous « Attribute Expressions » (expressions d’attributs), cliquez sur « Add » (ajouter) pour commencer une nouvelle expression.
2. Cliquez sur l’icône d’édition à côté de la mention « Custom » (personnalisé) et changez cette mention pour un nom significatif comme « Incident URL » (URL de l’incident).
3. Entrez le code suivant dans la case. Une explication détaillée suit.

var id = $feature.INCIDENTID; var url = 'https://winnipeg.ca/roadclousures/'+id+'.pdf'; return url;

Ligne 1 : Cela permet de récupérer la valeur existante de l’ID de l’incident.

Ligne 2 : Cela insère l’ID dans une chaîne URL. L’URL que nous créons ici n’existe pas. Vous devez vous assurer que l’URL que vous essayez de créer existe.

Ligne 3 : Cela renvoie l’URL que nous avons créée à la valeur d’attribut.

4. Cliquez sur « OK ». Vous devriez voir une nouvelle valeur dans la boîte sous « Attribute Expressions » (expressions d’attributs). Notez le texte entre les accolades.
5. Pour afficher la nouvelle valeur dans votre fenêtre contextuelle, cliquez sur « CONFIGURE » (configurer) sous « Pop-up Contents » (contenu de la fenêtre contextuelle).
6. Dans la boîte, ajoutez « Incident URL: {expression/expr1} », cliquez sur « OK » dans la fenêtre contextuelle, puis cliquez sur « OK » dans la barre latérale. Votre fenêtre contextuelle devrait ressembler à ce qui suit :

Mettre en forme une URL à l’aide d’Arcade

Ne serait-ce pas mieux si c’était un lien cliquable? C’est tout simple.

1. Cliquez de nouveau sur « CONFIGURE » (configurer), et nous arrangerons le tout. Surlignez le texte {expression/expr1} et cliquez sur l’icône d’insertion d’un lien
2. Déplacez le texte {expression/expr1} dans le champ URL et tapez « Click Here » (cliquer ici) sous « Link Text » (texte du lien).
3. Cliquez sur « OK » pour quitter la fenêtre contextuelle et la barre latérale. Maintenant, vous avez un lien cliquable qui s’ouvre dans un nouvel onglet.

3. Analyser des valeurs dans de longues chaînes d’attributs (exercice difficile)

Parfois, un attribut contient une chaîne de données, et vous voulez en affecter une partie à un nouvel attribut. Regardez la fermeture de la route sur Academy Road. Dans les commentaires, vous verrez ce qui suit :

Intermittent closures all week: Mon: 1-4pm; Tues: 2-5pm; Wed: 8-11am and 2-5pm; Thurs: 8am-12pm; Fri: All Day

Quel désordre. Nous pouvons utiliser Arcade et des expressions d’attributs pour transformer cela en cinq nouvelles valeurs, soit une pour chaque jour.

1. Sous « Attribute Expressions » (expressions d’attributs), cliquez sur « Add » (ajouter) pour commencer une nouvelle expression.
2. Cliquez sur l’icône d’édition à côté de la mention « Custom » (personnalisé) et changez cette mention pour un nom significatif comme « Monday Closure » (fermeture le lundi).
3. Entrez le code suivant dans la case. Une explication détaillée suit.

var search_text = 'Mon: ';
var comment = $feature.COMMENT;
var comment_length = Count(comment);
var start = Find(search_text,comment)
if (start == -1) return NULL;
var string_end = Right(comment,comment_length-start-Count(search_text));
return Left(string_end,Find(';',string_end));

Ligne 1 : Il s’agit de l’identificateur du texte que vous voulez extraire. Pour utiliser cette méthode, vous devez compter sur un identificateur fiable suivi d’une valeur comme celle dans cet exemple.

Ligne 2 : Cela indique l’attribut dans lequel nous allons chercher, soit « comment » (commentaire) dans ce cas-ci.

Ligne 3 : Ceci permet d’obtenir la longueur totale du texte dans le commentaire. Dans notre exemple, c’est 109.

Ligne 4 : Cela trouve l’emplacement du texte de recherche dans le commentaire. Dans notre exemple, il se trouve à la position 32.

Ligne 5 : Si le texte de recherche ne peut pas être trouvé, la ligne 4 renvoie -1. Dans ce cas, on peut s’arrêter et renvoyer la valeur nulle.

Ligne 6 : Cela extrait tout le texte présent après le texte de recherche. Je veux regarder l’expression entre parenthèses après la virgule : comment_length-start-Count(search_text). Count(search_text) renverra le nombre de caractères dans search_text. Dans notre exemple, c’est 5.

Si j’échange les valeurs de notre exemple dans l’expression, j’obtiens 109-32-5, ce qui équivaut à 72. Ainsi, la ligne 6 renverra 72 caractères à partir de la droite de notre variable de commentaire :

Intermittent closures all week: Mon: 1-4pm; Tues: 2-5pm; Wed: 8-11am and 2-5pm; Thurs: 8am-12pm; Fri: All Day

Ligne 7 : Cela prendra le texte surligné ci-dessus et renverra tout jusqu’au premier point-virgule.

1-4pm; Tues: 2-5pm; Wed: 8-11am and 2-5pm; Thurs: 8am-12pm; Fri: All Day

4. Cliquez sur « OK ». Vous devriez voir une nouvelle valeur dans la boîte sous « Attribute Expressions » (expressions d’attributs). Notez le texte entre les accolades.
5. Pour afficher la nouvelle valeur dans votre fenêtre contextuelle, cliquez sur « CONFIGURE » (configurer) sous « Pop-up Contents » (contenu de la fenêtre contextuelle).
6. Dans la boîte, ajoutez « Monday Closure: {expression/expr2} », cliquez sur « OK » dans la fenêtre contextuelle, puis cliquez sur « OK » dans la barre latérale.
7. Ajoutez quatre expressions supplémentaires, en utilisant le même code que ci-dessus, mais en utilisant « ‘Tues: ‘ » (mardi), « ‘Wed: ‘ » (mercredi), etc. comme texte de recherche.
8. Votre fenêtre contextuelle devrait ressembler à ce qui suit :

Analyser des données dans de longues chaînes avec Arcade

Prenez note que pour l’expression Friday (vendredi), vous devrez changer une chose parce qu’il n’y a pas de point-virgule après le texte « Fri: ». Changez la dernière ligne comme suit :

return Left(string_end,Count(string_end));

Le texte renvoyé se rendra directement à la fin de la variable plutôt que de chercher un point-virgule.

Pour les autres entités qui n’ont pas ce commentaire, vous avez maintenant cinq attributs vides. Il est possible de les enlever, mais ce n’est pas facile. Je ne recommande cette approche que si la plupart de vos données ont un champ mis en forme de manière uniforme.

Ce billet a été écrit en anglais par Justin Pierre et peut être consulté ici.