Conseils & Astuces ArcGIS Online - N°165
N° 165 - Utiliser Arcade et une API tiers pour ajouter des diagrammes
circulaires avancés dans vos fenêtres contextuelles
Bien qu'il soit possible d'ajouter des diagrammes circulaires (camemberts)
en standard dans les fenêtres contextuelles des cartes ArcGIS, vous avez
peut-être déjà souhaité aller plus en termes de personnalisation. Dans cet
article, je vous propose de voir comment utiliser une expression Arcade et
une API tiers pour générer des diagrammes circulaires offrant plus d'options
de personnalisation que les diagrammes standards des fenêtres contextuelles
d'ArcGIS.
Dans cet exemple, nous disposons d'une couche d'entités des EPCI avec les
informations de consommation d'énergie en 2020 selon différentes
catégories d'activité (Agriculture, Industrie, Tertiaire, Résidentiel,
...). L'objectif est tout simplement de présenter la consommation totale
en MWh de l'EPCI et la ventilation de cette consommation par type
d'activité à l'aide d'un diagramme circulaire. Voici donc comment nous
allons procéder :
-
Connectez-vous tout d'abord sur votre portail ArcGIS puis ouvrez la
carte web contenant la couche d'entités. Par défaut, la fenêtre
contextuelle présente la liste des différents attributs.
-
Dans la zone de configuration des fenêtres contextuelles la couche,
vous pouvez supprimer l'élément "Liste de champs" proposé par
défaut puis ajouter un élément de contenu Arcade. Ce dernier nous
permettra de réaliser les calculs statistiques nécessaires et
configurer un rendu personnalisé (en HTML) de nos informations.
-
Dans l'éditeur Arcade, vous effacerez les instructions déjà présentes
par l'expression Arcade ci-dessous :
On notera l'usage de l'API QuickChart qui permet de générer différents types de diagrammes à partir d'une url et une série de paramètres. Celle-ci est basée sur des librairies Open Source que vous pouvez installer sur votre propre serveur ou utiliser en ligne de manière gratuite (avec une limite sur le nombre de requêtes). Une version payante permet un accès illimité.//On indique les attributs nécessaires à notre expression Arcade Expects($feature,"*") // On définit un tableau avec les intitulés des catégories var array_labels=["Industrie", "Résidentiel", "Agriculture", "Tertiaire", "Autre"] // On définit un tableau avec les noms de attributs de chaque catégorie var array_fields=["consoi", "consor", "consoa", "consot", "consona"] // On définit les couleurs de représentation des catégories var array_colors=["#b9485d", "#9463dd", "#608f4e", "#f1bb3a", "#6699cd"] // On instancie un tableau pour stocker les valeurs de consommation // puis on boucle sur les différents attributs pour récupérer les valeurs var array_data=[] for (var i in array_fields){ Push(array_data,Round($feature[array_fields[i]])) } // On définit les paramètres du diagramme circulaire qui sera généré par l'API QuickChart // On s'est basé sur le modèle de diagramme suivant : https://tinyurl.com/4ny7ce82 var param_chart = { "type": "pie", "data": { "labels": array_labels, "datasets": [{ "backgroundColor":array_colors , "data": array_data }] }, "options": { "plugins": { "datalabels": { "display": 'auto', "anchor": 'center', "align": 'top', "backgroundColor": '#FFF', "borderRadius": 3, "formatter": 'FORMATTER', "font": { "resizable": true, "minSize": 11, "maxSize": 15 }, } }, "legend": { "display": true, "position": 'right', "align": 'start', "font": { "resizable": true, "minSize": 12, "maxSize": 16 }, }, } } // On encode la partie paramètres pour en faire une URL correctement formatée var param_url = UrlEncode(Text(param_chart)) // Cas particulier de la propriété "FORMATTER" qui doit être insérée manuellement dans // la chaîne param_url car elle fait appel à une fonction qui entre en conflit avec les instructions Arcade param_url = Replace(param_url,"%22FORMATTER%22","%28value%29%20%3D%3E%20%7Breturn%20value%20%2B%20%27%20KWh%27%3B%7D") // On construit l'URL complète permettant de générer l'image du diagramme circulaire var url_chart = "https://quickchart.io/chart?width=400&c=" + param_url // On construit la chaîne HTML avec tout d'abord une phrase donnant la consommation totale de l'EPCI var HTML = `<p>La consommation totale pour l'année 2020 est de <b>${Text($feature.consototale,'###,###,###')} MWh</b> et se répartit de la manière suivante :</p>` // Puis on y ajoute l'image du diagramme circulaire HTML += `<img src=${url_chart} />` // Enfin, on renvoie la chaîne HTML complète return { type : 'text', text : HTML }
On notera également l'usage du caractère backtick ( ` et non ') pour utiliser des littéraux et construire la chaîne HTML souhaitée.
-
Vous pouvez maintenant cliquer sur le bouton "Terminé" pour
valider l'expression.
-
La fenêtre contextuelle s'affiche désormais avec les informations de
consommation par catégories d'activité dans un camembert, avec la
légende et les étiquettes correspondantes.
En parcourant la documentation de l'API QuickChart vous découvrirez
toutes les personnalisations possibles pour changer l'aspect de votre
camembert. Je vous propose une variante qui utilise le type de diagramme
"outlabeledPie" (et non plus "pie") dans laquelle nous
n'afficherons pas la légende mais directement des étiquettes de rappel
sur le camembert.
L'expression Arcade correspondant à cette variante est la suivante :
/On indique les attributs nécessaires à notre expression Arcade
Expects($feature,"*")
// On définit un tableau avec les intitulés des catégories
var array_labels=["Industrie", "Résidentiel", "Agriculture", "Tertiaire", "Autre"]
// On définit un tableau avec les noms de attributs de chaque catégorie
var array_fields=["consoi", "consor", "consoa", "consot", "consona"]
// On définit les couleurs de représentation des catégories
var array_colors=["#b9485d", "#9463dd", "#608f4e", "#f1bb3a", "#6699cd"]
// On instancie un tableau pour stocker les valeurs de consommation
// puis on boucle sur les différents attributs pour récupérer les valeurs
var array_data=[]
for (var i in array_fields){
Push(array_data,Round($feature[array_fields[i]]))
}
// On définit les paramètres du diagramme circulaire qui sera généré par l'API QuickChart
// On s'est basé sur le modèle de diagramme suivant : https://tinyurl.com/ync8x35j
var param_chart = {
"type": "outlabeledPie",
"data": {
"labels": array_labels,
"datasets": [{
"backgroundColor":array_colors ,
"data": array_data
}]
},
"options": {
"plugins": {
"legend": false,
"outlabels": {
"text": "%l %p",
"color": "white",
"stretch": 20,
"font": {
"resizable": true,
"minSize": 12,
"maxSize": 16
}
}
}
}
}
// On encode la partie paramètres pour en faire une URL correctement formatée
var param_url = UrlEncode(Text(param_chart))
// On construit l'URL complète permettant de générer l'image du diagramme circulaire
var url_chart = "https://quickchart.io/chart?width=400&c=" + param_url
// On construit la chaîne HTML avec tout d'abord une phrase donnant la consommation totale de l'EPCI
var HTML = `<p>La consommation totale pour l'année 2020 est de
<b>${Text($feature.consototale,'###,###,###')} MWh</b>
et se répartit de la manière suivante :</p>`
// Puis on y ajoute l'image du diagramme circulaire
HTML += `<img src=${url_chart} />`
// Enfin, on renvoie la chaîne HTML complète
return {
type : 'text',
text : HTML
}
J'espère que cet exemple vous inspirera et que vous pourrez l'adapter à
vos cas d'usage.
Bonne route sur ArcGIS Online !
Pour retrouver l'ensemble des Conseils & Astuces ArcGIS
Online, cliquez sur ce lien
0 comments :
Enregistrer un commentaire