Le blog francophone consacré
aux technologies Esri

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. 

Exemple 1:

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



  2. Vous donnerez tout d'abord un nom à votre expression, par exemple ici : "Ouvert/Fermé aujourd'hui"



    Vous saisirez ensuite l'expression Arcade suivante :
    // 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"
    }
    
    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é".

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



  4. 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).

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


  2. 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' 
      );
    

  3. Après avoir défini les symboles correspondant aux 3 valeurs, voici la carte qui s'affiche au 01/12/2023 :



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

 

Partager cet article:

Rejoindre la discussion

    Les commentaires à propos de cet article: