Le blog francophone consacré
aux technologies Esri

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.

  1. 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.


  2. Pour plus de clarté, nous donnons un titre explicite "Communes limitrophes et population" à cette nouvelle expression Arcade.



  3. 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 
    }
    

  4. 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.


  5. 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.

  

Partager cet article:

Rejoindre la discussion

    Les commentaires à propos de cet article: