Le blog francophone consacré
aux technologies Esri

Conseils & Astuces ArcGIS Online - N°182

N° 182 - Cartographier des horaires d'ouverture avec Arcade 

Dans les deux précédents articles (Conseils & Astuces ArcGIS Online n°180 et n°181), je vous ai montré comment représenter, via la symbologie de la couche ou les fenêtres contextuelles, les informations sur les jours et les dates d'ouverture associés à vos points d'intérêts. Tout cela, grâce à des expressions Arcade. Lorsque vous disposez d'informations relatives aux heures d'ouverture et de fermeture, il est également possible de réaliser des cartes plus dynamiques en utilisant des expressions Arcade.


Dans cet article, je vous propose de voir un exemple d'expression Arcade pour représenter les heures d'ouvertures de vos points d'intérêt. 

Reprenons l'exemple d'une couche de points contenant les déchèteries sur la région Ile-de-France. Cette dernière contient les horaires d'ouverture et de fermeture, pour chaque jour de la semaine, stockés dans 14 champs de type "Heure uniquement" (Time only). Par exemple, pour la journée du lundi, les horaires se trouveront dans les champs Ouverture_Lundi et Fermeture_Lundi. Dans mon cas, l'absence de valeur indique une fermeture durant toute la journée.


Voici comment vous pouvez représenter les déchèteries ouvertes ou fermées en fonction du jour et de l'heure actuels.
  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é en ce moment"



    Vous saisirez ensuite l'expression Arcade suivante :
    Expects($feature, "*")
    
    // Récupération de l'index du jour courant 
    // (Lundi = 1 et Dimanche = 7)
    var IndexJourCourant = ISOWeekday(Now()) 
    // Récupération de l'heure courante 
    var HeureCourante = Time() 
    
    // On crée une liste des noms des jours 
    var ListeJourSemaine=["Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi","Dimanche"]
    // On récupère le nom du jour courant
    // Note: Dans une liste l'index démarre à 0, on retire donc 1 à l'index du jour courant
    var NomJourCourant = ListeJourSemaine[IndexJourCourant-1]
    
    // Si les heures d'ouverture ou de fermeture ne sont pas renseignées dans la table
    // alors la déchèterie est fermée toute la journée
    if (!IsEmpty($feature["Ouverture_"+NomJourCourant]) || 
        !IsEmpty($feature["Fermeture_"+NomJourCourant])){
      var HeureOuverture = $feature["Ouverture_"+NomJourCourant]
      var HeureFermeture = $feature["Fermeture_"+NomJourCourant]
      // Si l'heure courante est entre l'heure d'ouverture et de fermeture
      if (HeureCourante>=HeureOuverture && HeureCourante<=HeureFermeture){
        return "Actuellement ouvert"
      }
      else
      {
        return "Actuellement fermé"
      }
    }
    else
    {
      return  "Fermé toute la journée"
    }

  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 vendredi à 8:15 :


    Voici la carte lorsque le jour courant est un vendredi à 17:05 :


Aller plus loin...

  • Vous pouvez améliorer encore l'exploitation des heures en proposant une légende plus évoluée pour votre carte. En effet, celle-ci pourra par exemple informer l'utilisateur des déchèterie qui vont ouvrir ou fermer dans un certains délais (15 prochaines minutes dans mon exemple).

    L'expression Arcade ressemblera alors à ceci :
    Expects($feature, "*")
    
    // Récupération de l'index du jour courant 
    // (Lundi = 1 et Dimanche = 7)
    var IndexJourCourant = ISOWeekday(Now()) 
    // Récupération de l'heure courante 
    var HeureCourante = Time("8:15") 
    
    // On crée une liste des noms des jours 
    var ListeJourSemaine=["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 = ListeJourSemaine[IndexJourCourant-1]
    
    // Si les heures d'ouverture ou de fermeture ne sont pas renseignées dans la table
    // alors le POI est fermé toute la journée
    if (!IsEmpty($feature["Ouverture_"+NomJourCourant]) 
        || !IsEmpty($feature["Fermeture_"+NomJourCourant])){
      var HeureOuverture = $feature["Ouverture_"+NomJourCourant]
      var HeureFermeture = $feature["Fermeture_"+NomJourCourant]
      // Si l'heure courante est entre l'heure d'ouverture et de fermeture
      if (HeureCourante>=HeureOuverture && HeureCourante<=HeureFermeture){
        return "Actuellement ouvert"
      }
      else
      {
        if(DateDiff(HeureOuverture,HeureCourante,"minutes")<=15){
          return "Bientôt ouvert (moins de 15 min)"
        }else if(DateDiff(HeureFermeture,HeureCourante,"minutes")<=15){
          return "Bientôt fermé (moins de 15 min)"
        }else{
          return "Actuellement fermé"
        }
      }
    }else{
      return  "Fermé toute la journée"
    }
    Voici un exemple de rendu de la carte un mercredi à 8:20 :



Dans le prochain article, nous verrons comment présenter ces informations sur les horaires d'ouverture dans les fenêtres contextuelles 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: