Le blog francophone consacré
aux technologies Esri

Conseils & Astuces ArcGIS Online - N°186

N° 186 - Afficher des informations statistiques sur l'ensemble des entités de la couche dans des fenêtres contextuelles avec Arcade

Les fenêtres contextuelles permettent le plus souvent d'afficher les valeurs des attributs de votre entités. Cependant, dans certains cas, il est également pertinent de comparer certaines de ces valeurs aux valeurs des autres entités de la couche. Vous pouvez avoir besoin, par exemple,  de comparer le nombre d'élèves d'une école avec le total (ou la moyenne) des autres écoles du département. Autre exemple, vous disposez d'une couche contenant le nombre de pharmacies pour chaque quartier et vous souhaitez comparer ce nombre au nombre total de pharmacie sur votre territoire. Pour calculer et afficher ce type de statistique, il est possible d'utiliser une expression Arcade calculant ces indicateurs (minimum, maximum, moyenne, ...) sur l'ensemble de la couche et de générer la chaîne HTML qui présentera ces statistiques.


Prenons l'exemple d'une couche d'enseignes de jardinage sur le département de la Manche qui contient des champs avec les chiffres d'affaire 2022 pour chaque magasin. Nous souhaitons pouvoir consulter le chiffre d'affaire de chaque magasin mais également pouvoir le comparer avec le chiffres d'affaire total de l'ensemble des magasins.

Voici comment vous pouvez utiliser Arcade pour afficher les statistiques souhaitées (min, max, moyenne, total, ...), dans la fenêtre contextuelle, en utilisant un tableau. 

  1. Après avoir ajouté la couche des jardineries 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 : "Comparaison du chiffre d'affaire 2022".


  3. Vous saisirez ensuite l'expression Arcade suivante :
    Expects($feature, "*")
    
    // Nom du champ à représenter
    var nom_champ = "CA2022"
    // Récupération de la valeur de l'entité courante
    var valeur = $feature[nom_champ]
    
    // Paramètre de représentation du tableau
    var titre = "Chiffre d'affaire 2022"
    var couleur_fond_titre = "#0B680C"
    var couleur_texte_titre = "#ffffff"
    var couleur_fond_valeur = "#9DC59D"
    var couleur_texte_valeur = "#000000"
    var unite = "€"
    var largeur_tableau=250
    
    // Récupération des statistiques sur l'ensemble de la couche
    var valeur_min = Min($layer,nom_champ)
    var valeur_max = Max($layer,nom_champ)
    var valeur_moy = Mean($layer,nom_champ)
    var valeur_count = Count($layer)
    var valeur_sum = Sum($layer,nom_champ)
    
    // Construction de la chaîne HTML
    var strHTML = ""
    strHTML += "<table style='width: "+Text(largeur_tableau) +
               "px;border-collapse: collapse;font-family: arial;font-size: 10pt;'>"
    strHTML += "<tr style='border: 1px solid #333;background-color: " +
               couleur_fond_titre+"'><td colspan='2' style='color: " +
               couleur_texte_titre+"'><b>"+titre+"</b></td></tr>"
    strHTML += "<tr style='border: 1px solid #333;background-color: " +
               couleur_fond_valeur+";color: " +
               couleur_texte_valeur+"'><td><b>Valeur : </b></td><td><b>" + 
               Text(valeur) + " " + unite + "</b></td></tr>"
    strHTML += "<tr style='border: 1px solid #333'><td>Minimum : </td><td>" + 
               Text(valeur_min) + " " + unite + "</td></tr>"
    strHTML += "<tr style='border: 1px solid #333'><td>Maximum : </td><td>" + 
               Text(valeur_max) + " " + unite + "</td></tr>"
    strHTML += "<tr style='border: 1px solid #333'><td>Nombre d'entités : </td><td>" + 
               Text(valeur_count) + "</td></tr>"
    strHTML += "<tr style='border: 1px solid #333'><td>Moyenne : </td><td>" + 
               Text(valeur_moy,"#.##") + " " + unite + "</td></tr>"
    strHTML += "<tr style='border: 1px solid #333'><td>Total : </td><td>" + 
               Text(valeur_sum) + " " + unite + "</td></tr>"
    strHTML += "<tr style='border: 1px solid #333'><td>Part du total : </td><td>" +
               Text(100*valeur/valeur_sum,"#.##") + "%</td></tr>"
    strHTML +="</table>"
    
    
    // On renvoie la chaîne HTML pour remplir la fenêtre contextuelle
    return { 
    type : 'text', text : strHTML }
  4. Votre carte affiche désormais un tableau avec l'information sur la valeur du chiffre d'affaire du magasin mais également le chiffre d'affaire minimum, maximum, moyen et total de l'ensemble du jeu de données. Le tableau intègre aussi le nombre total d'entités et la part du chiffre d'affaire par rapport au total. On notera que si la couche possède un ensemble de définition, les statistiques ne seront calculées que sur les entités filtrées.


  5. Vous pouvez maintenant modifier le nom du champ, le titre, les couleurs, ... et même le code HTML pour personnaliser l'aspect de ce tableau de statistiques. 

En bonus:

Dans certains cas, peut-être aurez-vous besoin de comparer la valeur de votre entité à un nombre restreint d'entités recherchées dans un rayon donné. Imaginez que vous gérez une couche des établissements hoteliers et que vous souhaitez connaitre ce que représente la capacité de chaque hotel par rapport à tous ceux se trouvant dans un rayon de 5 km, l'expression Arcade évoluera alors comme ceci :

Expects($feature, "*")

// Nom du champ à représenter
var nom_champ = "Capacite_Chambres"
// Rayon de recherche en kilomètres
var rayon_recherche = 5
// Récupération de la valeur de l'entité courante
var valeur = $feature[nom_champ]

// Paramètre de représentation du tableau
var titre = "Capacité hotelière 2021"
var couleur_fond_titre = "#521d80"
var couleur_texte_titre = "#ffffff"
var couleur_fond_valeur = "#bf8deb"
var couleur_texte_valeur = "#000000"
var unite = "chambres"
var largeur_tableau=300

// Calcul de la géométrie de la zone tampon pour réaliser la recherche 
var zone_tampon = Buffer($feature, rayon_recherche, 'kilometer')
// Sélection des entités qui intersectent la zone tampon
var selection = Intersects($layer, zone_tampon)

// Récupération des statistiques sur la sélection
var valeur_min = Min(selection,nom_champ)
var valeur_max = Max(selection,nom_champ)
var valeur_moy = Mean(selection,nom_champ)
var valeur_count = Count(selection)
var valeur_sum = Sum(selection,nom_champ)

// Construction de la chaîne HTML
var strHTML = ""
strHTML += "<table style='width: "+Text(largeur_tableau) +
           "px;border-collapse: collapse;font-family: arial;font-size: 10pt;'>"
strHTML += "<tr style='border: 1px solid #333;background-color: " +
           couleur_fond_titre+"'><td colspan='2' style='color: " +
           couleur_texte_titre+"'><b>"+titre+"</b></td></tr>"
strHTML += "<tr style='border: 1px solid #333;background-color: " +
           couleur_fond_valeur+";color: " +
           couleur_texte_valeur+"'><td><b>Valeur : </b></td><td><b>" + 
           Text(valeur) + " " + unite + "</b></td></tr>"
strHTML += "<tr style='border: 1px solid #333'><td>Minimum : </td><td>" + 
           Text(valeur_min) + " " + unite + "</td></tr>"
strHTML += "<tr style='border: 1px solid #333'><td>Maximum : </td><td>" + 
           Text(valeur_max) + " " + unite + "</td></tr>"
strHTML += "<tr style='border: 1px solid #333'><td>Nombre d'entités dans" +
           "<br/>un rayon de " +Text(rayon_recherche)+" km. : </td><td>" + 
           Text(valeur_count) + "</td></tr>"
strHTML += "<tr style='border: 1px solid #333'><td>Moyenne : </td><td>" + 
           Text(valeur_moy,"#.##") + " " + unite + "</td></tr>"
strHTML += "<tr style='border: 1px solid #333'><td>Total : </td><td>" + 
           Text(valeur_sum) + " " + unite + "</td></tr>"
strHTML += "<tr style='border: 1px solid #333'><td>Part du total : </td><td>" +
           Text(100*valeur/valeur_sum,"#.##") + "%</td></tr>"
strHTML +="</table>"

// On renvoie la chaîne HTML pour remplir la fenêtre contextuelle
return { 
	type : 'text', 
	text : strHTML
}
La fenêtre contextuelle de la couche de mes hotels ressemblera alors à ceci :




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: