Conseils & Astuces ArcGIS Online - N°189
N° 189 - Utiliser Arcade pour afficher les entités adjacentes dans vos fenêtres contextuelles
Dans la majorité des cas, vous configurer des fenêtres contextuelles pour
afficher les informations de l'entité cliquée sur la carte. Cependant, avec le
langage d'expression Arcade, vous pouvez aller plus loin en interrogeant les
autres entités de votre couche (ou même d'autres couches de la carte). Cette
capacité permet par exemple de réaliser des recherches géographiques pour
obtenir des informations issues d'autres entités de la même couche ou d'une
autre couche de la carte. Par exemple, vous cliquez sur une commune et vous
souhaitez afficher la liste des communes limitrophes.
Dans cet article je vous propose de prendre cet exemple pour vous expliquer
comment afficher la liste des communes adjacentes (et les valeurs de
population associées) à l'aide d'une expression Arcade.
-
Après avoir ajouté la couche des communes dans la carte, nous allons
ajouter un bloc de contenu "Arcade" dans la fenêtre contextuelle de cette
dernière.
- Pour plus de clarté, nous donnons un titre explicite "Communes limitrophes et population" à cette nouvelle expression Arcade.
-
L'expression Arcade à saisir dans l'éditeur est alors la suivante :
Expects($feature,"*") // Nom du champ contenant le nom des entités var field_name = "NOM" // Nom du champ contenant la valeur supplémentaire souhaitée var field_value = "POPULATION" // Récupération de la géométrie surfacique de l'entité var my_polygon = Geometry($feature) // On recherche les entités qui intersectent cette géométrie var result_featureset = Intersects($layer,my_polygon) // On commence à construire la chaîne HTML pour le contenu // de la fenêtre contextuelle var str_HTML = "Les communes limitrophes de <b>" + Text($feature[field_name]) + " (" + Text($feature[field_value]) + " hab.)</b> sont les suivantes :<br/>" // On démarre une liste à puces HTML str_HTML += "<ul>" //On boucle sur chaque entité limitrophe for (var feat in result_featureset){ // On retire l'entité elle-même de la liste if(Text(feat[field_name]) != Text($feature[field_name])){ // On ajoute la ligne pour chaque entité limitrophe str_HTML += "<li>" + Text(feat[field_name]) + " (" + Text(feat[field_value]) + " hab.)</li><br/>" } } // On termine la liste à puces HTML str_HTML += "</ul>" // On renvoie la chaîne HTML return { type : 'text', text : str_HTML }
-
Notre couche de communes affiche désormais le nom et la population de la commune cliquée ainsi que le nom et la population des communes adjacentes.
- Il ne vous reste plus qu'à personnaliser cette expression pour l'adapter à vos données et à vos besoins.
Pour aller plus loin...
En bonus, vous pourrez modifier l'expression Arcade en intégrant un tableau et une fonction de tri afin de lister les communes par ordre croissant de population :
Expects($feature,"*")
// Fonction de tri de tableau par ordre croissant
function compareValeurs(a,b){
if (a[field_value]<b[field_value])
return -1;
if (a[field_value]>b[field_value])
return 1;
return 0;
}
// Nom du champ contenant le nom des entités
var field_name = "NOM"
// Nom du champ contenant la valeur supplémentaire souhaitée
var field_value = "POPULATION"
// Récupération de la géométrie surfacique de l'entité
var my_polygon = Geometry($feature)
// On recherche les entités qui intersectent cette géométrie
var result_featureset = Intersects($layer,my_polygon)
// On boucle sur chaque entité limitrophe pour construire un tableau
// afin de pouvoir ensuite faire un tri
var result_array = []
for (var feat in result_featureset){
// On retire l'entité elle-même de la liste
if(Text(feat[field_name]) != Text($feature[field_name])){
// On ajoute la ligne au tableau
var d = {}
d[field_name] = feat[field_name]
d[field_value] = feat[field_value]
Push(result_array,d)
}
}
// On trie le tableau par ordre croissant sur la population
result_array = Sort(result_array,compareValeurs)
// On commence à construire la chaîne HTML pour le contenu
// de la fenêtre contextuelle
var str_HTML = "Les communes limitrophes de <b>" +
Text($feature[field_name]) +
" (" + Text($feature[field_value]) +
" hab.)</b> sont les suivantes :<br/>"
// On démarre une liste à puces HTML
str_HTML += "<ul>"
//On boucle sur chaque entité limitrophe
for (var i in result_array){
// On ajoute la ligne pour chaque entité limitrophe
str_HTML += "<li>" + Text(result_array[i][field_name]) +
" (" + Text(result_array[i][field_value]) +
" hab.)</li><br/>"
}
// On termine la liste à puces HTML
str_HTML += "</ul>"
// On renvoie la chaîne HTML
return {
type : 'text',
text : str_HTML
}
La fenêtre contextuelle affiche maintenant la liste des communes adjacentes par ordre croissant de population :
Bonne route sur ArcGIS Online !
Pour retrouver l'ensemble des Conseils & Astuces ArcGIS Online,
cliquez sur ce lien.
0 comments :
Enregistrer un commentaire