Conseils & Astuces ArcGIS Online - N°180
N° 180 - Cartographier les jours d'ouverture avec
Arcade
Il est assez fréquent d'avoir à gérer, dans sa base de données SIG, des
informations liées aux jours et aux heures d'ouverture de points d'intérêt
(bibliothèques, mairies, musées, magasins, déchèteries, offices du
tourisme, parcs de loisirs, jardins, ...). Cartographier de manière
efficace ce type de données nécessite de pouvoir afficher directement
l'information utile à l'utilisateur, c'est à dire savoir si le lieu est
ouvert/fermé au moment où il consulte la carte. Grâce aux expressions Arcade,
vous pouvez proposer ce type de dynamisme dans vos cartes web.
Dans cet article, je vous propose de voir 2 cas d'usage d'expression Arcade
pour représenter les jours d'ouverture de vos points d'intérêt.
Prenons l'exemple d'une couche de points contenant les déchèteries sur la
région Ile-de-France. Cette dernière contient la liste des jours d'ouverture
stockés dans un champ de type "Chaîne de caractères" et séparés par une
virgule.
Voici comment vous pouvez représenter les déchèteries ouvertes ou fermées en
fonction du jour actuel
-
Après avoir ajouté la couche des déchèteries dans la carte, vous
afficherez l'interface de définition des styles. Vous cliquerez ensuite
sur le bouton "Expression" pour créer une nouvelle expression
Arcade.
-
Vous donnerez tout d'abord un nom à votre expression, par exemple ici :
"Ouvert/Fermé aujourd'hui"
Vous saisirez ensuite l'expression Arcade suivante :
L'expression récupère l'index du jour courant puis le convertit en un nom de jour (Lundi, Mardi, ...) pour pouvoir rechercher cette chaîne dans la liste des jours d'ouverture stockés en tant qu'attribut pour chaque déchèterie. Si on retrouve le nom du jour courant dans les jours d'ouverture de l'entité alors on renvoie une information "Ouvert" sinon on renvoie une information "Fermé".// Récupération de l'index du jour courant // (Lundi = 1 et Dimanche = 7) var IndexJourCourant = ISOWeekday(Now()) // On crée une liste des noms des jours var JoursSemaine=["Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi","Dimanche"] // On récupère le nom du jour courant // Dans une liste l'index démarre à 0, on retire donc 1 à l'index du jour courant var NomJourCourant = JoursSemaine[IndexJourCourant-1] // Si on retrouve le nom jour courant dans la valeur du champ "Jours_Ouverture" alors // on renvoie la valeur "Ouvert Aujourd'hui", sinon on renvoie "Fermé aujourd'hui". // Il est préférable de mettre les chaînes en minuscule lors des comparaisons if (Find(Lower(NomJourCourant),Lower($feature.Jours_Ouverture)) > -1){ return "Ouvert aujourd'hui" } else { return "Fermé aujourd'hui" }
-
Il ne reste plus qu'à définir la symbologie que vous souhaitez appliquer
aux déchèteries pour indiquer qu'elles sont ouvertes et fermées.
-
Votre carte affiche désormais les déchèteries en fonction de leur
ouverture/fermeture pour le jour courant.
Voici la carte lorsque le jour courant est un mercredi :
Voici la carte lorsque le jour courant est un dimanche :
Exemple 2:
Dans ce second exemple, nous disposons d'une couche des stations de ski en
France contenant cette fois-ci des dates d'ouverture et la dates de
fermeture de leur domaine skiable. L'objectif est d'afficher une carte qui
indique les stations ouvertes ou fermées à la date courante ainsi que
celles-qui vont prochainement ouvrir (dans 15 jours ou moins).
-
Vous commencerez par ajouter la couche des stations de ski dans votre
carte. Dans notre cas, deux champs de type "Date uniquement"
(DateOnly) permettent de stocker les dates d'ouverture et de fermeture
de chaque station.
-
De la même manière que dans le premier exemple, vous allez créer une expression spécifique pour définir la source du style de la couche. Vous saisirez ensuite l'expression Arcade suivante :
// Variables contenant les dates d'ouverture et de fermeture // de la station de ski var DateOuverture = $feature.DateOuverture var DateFermeture = $feature.DateFermeture // Variable contenant la date du jour au format DateOnly var DateDuJour = DateOnly() DateDuJour = DateOnly(Date("01/12/2023","DD/MM/YYYY")) // Calcul du nombre de jours entre la date d'ouverture et la date du jour var DiffJours = DateDiff(DateOuverture, DateDuJour, 'days') // On renvoie le statut en fonction de ce nombre de jours // A plus de 15 jours de l'ouverture, le staut est "Fermé" // A moins de 15 jours de l'ouverture, le statut est "Bientôt ouvert" // Sinon, le nombre de jours est négatif et le statut est donc "Ouvert" When( DiffJours >= 15 || DateDuJour > DateFermeture, 'Fermé', DiffJours < 15 && DiffJours > 0,'Bientôt ouvert', 'Ouvert' );
-
Après avoir défini les symboles correspondant aux 3 valeurs, voici la
carte qui s'affiche au 01/12/2023 :
-
Voici la même carte affichée le 15/12/2023 :
Dans le prochain article, je reprendrai et compléterai ces deux exemples
en vous montrant comment utiliser Arcade pour représenter ces informations
de jours ou de dates d'ouverture dans la fenêtre contextuelle de la
couche.
Bonne route sur ArcGIS Online !
Pour retrouver l'ensemble des Conseils & Astuces ArcGIS Online,
cliquez sur ce lien.
0 comments :
Enregistrer un commentaire