Le blog francophone consacré
aux technologies Esri

Conseils & Astuces ArcGIS Online - N°185

N° 185 - Représenter des données ordinales dans des fenêtres contextuelles avec Arcade 

Lorsque vous disposez de données ordinales (qui ont un ordre sans obligatoirement être numériques), il peut s'avérer efficace de les représenter dans vos fenêtres contextuelles de manière graphique, en utilisant par exemple une barre de valeurs colorisée. Pour effectuer ce type de représentation, il est possible d'utiliser une expression Arcade renvoyant la chaîne HTML qui assurera ce rendu.


Prenons l'exemple d'une couche d'entités contenant un champ décrivant l'indice de qualité écologique de chaque tronçon hydrographique de mon territoire. Cet indice est stocké selon les 5 valeurs ordinales suivantes : très faible, faible, moyen, bon, très bon.

Voici comment vous pouvez utiliser Arcade pour afficher l'indice écologique de l'entité, dans la fenêtre contextuelle, à travers une barre de valeurs colorisée. 

  1. Après avoir ajouté la couche des tronçons hydrographiques dans la carte, vous afficherez l'interface de définition des fenêtres contextuelles. Vous supprimerez la liste des champs proposée par défaut et vous ajouterez une expression Arcade.


  2. Vous donnerez tout d'abord un nom à votre expression, par exemple ici : "Qualité Ecologique".


  3. Vous saisirez ensuite l'expression Arcade suivante :
    // Tableau contenant les différentes valeurs possibles (ordonnées)
    var valeurs_possibles=['Très faible','Faible','Moyen','Bon','Très bon']
    // Tableau contenant les couleurs correspondantes en hexadecimal
    var couleurs=['CC3717','F38C62','E6AC54','B5E654','70B23D']
    // Attribut contenant les valeurs
    var valeur = $feature.indice_qualite_ecologique
    // 'Vertical' ou 'Horizontal'
    var affichage = 'Horizontal' 
    // Largeur/Hauteur en pixels
    var taille = 600 
    // couleur du texte en hexadecimal
    var couleur_texte = "000000" 
    // Titre de l'indicateur à afficher
    var strHTML = 'Qualité écologique :'
    
    // Fonction permettant la conversion de couleurs Hexadecimal (avec opacité) 
    // en chaîne HTML rgba()
    function HexaToRGBA(hexa,opacity){
      var r = '0x' + Mid(hexa,0,2);
      var g = '0x' + Mid(hexa,2,2);
      var b = '0x' + Mid(hexa,4,2);
      return "rgba(" + Text(Number(r)) + "," + 
      Text(Number(g)) + "," + 
      Text(Number(b)) + "," + 
      Text(opacity) + ")"
      }
    
    // On commence à générer l'expression HTML
    strHTML += '<br/><br/>'
    strHTML += "<table style='border-collapse: collapse;'>"
    
    // Cas d'une barre de valeurs colorisée horizontale
    if (affichage=='Horizontal'){
      strHTML += '<tr>'
      for (var index in valeurs_possibles){
        // Si la cellule du tableau est celle de la valeur courante alors l'opacité est 
        // de 100% sinon elle est de 20%
        var opacite = IIF(Lower(valeurs_possibles[index])==Lower(valeur), 1, 0.2);
        // Affichage de la cellule du tableau avec la valeur correspondante
        strHTML += "<td  width='" + Text(taille/Count(valeurs_possibles)) + 
                    "px' style='background-color: " + HexaToRGBA(couleurs[index],opacite)+
                    ";font-family: arial;font-size: 9pt; font-weight: " + 
                    Text(opacite*700) + "; color: "+ HexaToRGBA(couleur_texte,opacite) + 
                    "; text-align: center; border: 1px solid #DDDDDD;padding: 3px 3px;'>"
        strHTML += valeurs_possibles[index]
        strHTML += '</td>'
      }
      strHTML += '</tr>'
    }
    // Cas d'une barre de valeurs colorisée verticale
    else {
      for (var index in valeurs_possibles){
        strHTML += '<tr>'
        // Si la cellule du tableau est celle de la valeur courante alors l'opacité est 
        // de 100% sinon elle est de 20%
        var opacite = IIF(Lower(valeurs_possibles[index])==Lower(valeur), 1, 0.2);
        // Affichage de la cellule du tableau avec la valeur correspondante
        strHTML += "<td  height='" + Text(taille/Count(valeurs_possibles)) + 
                    "px' style='background-color: " + HexaToRGBA(couleurs[index],opacite)+
                    ";font-family: arial;font-size: 9pt; font-weight: " + 
                    Text(opacite*700) + "; color: "+ HexaToRGBA(couleur_texte,opacite) + 
                    "; text-align: center; border: 1px solid #DDDDDD;padding: 3px 3px;'>"
        strHTML += valeurs_possibles[index]
        strHTML += '</td>'
        strHTML += '</tr>'
      }
    }
    
    strHTML += '</table>'
    
    // On revoit l'expression HTML pour remplir la fenêtre contextuelle
    return { 
    	type : 'text', 
    	text : strHTML 
    }
    
    
  4. Votre carte affiche désormais les tronçons hydrographiques avec des fenêtres contextuelles présentant la barre de valeurs colorisée. 


  5. Vous pouvez maintenant modifier la taille l'orientation de la barre de valeurs à votre convenance. Par exemple, vous pourrez afficher la barre de valeurs de manière verticale en modifiant l'expression avec les valeurs suivantes :


    Vous aurez alors un résultat de ce type :



  6. Si vous disposez de plusieurs champs contenant des valeurs ordinales, il sera intéressant de dupliquer l'expression Arcade et de l'adapter à ces différents champs.



  7. Il ne vous reste plus qu'à adapter cette expression au nombre de valeurs distincts que vous avez dans votre champ et aux couleurs que souhaitez leur associer.

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:

2 comments :

Anonyme a dit…

Astuce très intéressante, je tenterai de reproduire pour un de mes projets.

Attention coquille pour le point 4 "Votre carte affiche désormais les déchèteries avec des fenêtres contextuelles présentant le tableau des horaires d'ouverture pour le matin et l'après-midi. "

J'ai d'ailleurs repris le code des horaires d'ouverture, merci pour le partage.

Gaëtan Lavenu a dit…

Bonjour,

Merci pour vos retours. Un copier/coller d'un article précédent un peu trop rapide, la coquille a été corrigée.