Dans cette série de 3 épisodes, je vous montre comment utiliser le SDK
JavaScript d'ArcGIS pour ajouter des comportements personnalisés dans vos
webmaps, pour créer l'application suivante :
Dans le premier épisode, nous avons vu comment ajouter un bouton relié à une fenêtre conçue pour
donner davantage d'informations sur l'application. Aujourd'hui, nous verrons
comment ajouter un deuxième type de bouton qui, grâce à une connexion aux
couches présentes sur la carte, pourra basculer d'une couche visible à une
autre, ainsi qu'étendre ou réduire la légende.
Pour rappel, la webmap est composée de deux couches : la première représente
les parcs nationaux avec une symbologie selon leur fréquentation totale, et la
seconde sans symbologie particulière, donnant uniquement l'emplacement des
parcs. Le bouton permettra à l'utilisateur de choisir l'affichage qu'il
préfère.
Comme d'habitude, vous pouvez suivre ce tutoriel pour comprendre les étapes
pas à pas, mais vous pouvez également retrouver le code complet
sur mon Github
ou en mode bac à sable
dans CodePen.
Ajout du bouton à l'interface
Comme tout à l'heure, nous commençons par ajouter le bouton à l'interface de
l'application. Nous utiliserons un bouton à bascule, traduisant bien cette
idée de "basculer" d'une couche à une autre. Au lieu de recréer le
bouton par nous-même, nous allons utiliser
le composant Switch
de Calcite, le design system mis à disposition par Esri.
Dans le HTML, nous ajoutons donc le composant (toujours au sein du composant
</arcgis-map>) :
<div id="switch-container">
<h4>
Afficher la fréquentation
<calcite-switch id="switchbutton" checked></calcite-switch>
</h4>
</div>
Grâce au paramètre "checked", le bouton sera activé par défaut. Vous
remarquez également l'ajout du texte "Afficher la fréquentation", qui
indique à l'utilisateur la fonction du bouton.
Pour l'instant, le bouton s'intègre très mal dans le reste de l'app. Un peu
de css va nous permettre d'améliorer cela.
Cette première règle nous permet d'afficher le texte et le bouton dans un
rectangle blanc légèrement transparent qui va se superposer à la carte :
#switch-container {
position: absolute;
bottom: 4%;
left: 10px;
background: rgba(255, 255, 255, 0.8);
padding: 8px 12px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
z-index: 100;
}
Nous allons ensuite modifier le style du texte pour qu'il corresponde mieux
au reste de l'app:
h4 {
font-weight: normal;
font-size: 100%;
font-family: "Avenir Next", "Avenir", "Helvetica Neue", sans-serif;
color: #473b40;
margin: 0;
display: flex;
align-items: center;
gap: 8px;
}
Enfin, le bleu du bouton ne se marie pas très bien au style de
l'application. Il s'agit de la couleur d'accentuation par défaut utilisée
par les composants Calcite. Nous allons modifier cela, en choisissant une
couleur vert foncée à la place. Pour que les composants que nous ajouterons
dans le futur prennent aussi cette couleur par défaut, encapsulez tous les
composants dans cette balise (que vous ouvrez donc juste après l'ouverture
du body et que vous refermez après la fermeture de l'arcgis-map) :
<calcite-shell>...</calcite-shell>
Vous pouvez ensuite ajouter cette règle au css, qui modifiera la couleur
d'accentuation de tous les composants qui seront ajoutés au sein du Shell :
calcite-shell {
--calcite-color-brand: #57a59d;
}
Nous allons maintenant faire en sorte que la couche visible change lorsque
l'utilisateur actionne le bouton. Côté JS, nous allons récupérer le bouton
switch dans le DOM et accéder aux couches de la webmap grâce au SDK :
const infoContent = document.getElementById("description");
const creditContent = document.getElementById("credit");
const {
portalItem
} = event.target.map;
infoContent.innerHTML = portalItem.snippet;
creditContent.innerHTML = portalItem.accessInformation;
Nous allons ensuite créer une fonction qui teste la visibilité d'un des deux
calques, puis qui l'inverse : si
layer_frequentation
est visible,
elle la cache et affiche
layer_location
, et inversement :
const changeVisibility = () => {
const isShowingFrequentation = layer_frequentation.visible;
layer_location.visible = isShowingFrequentation;
layer_frequentation.visible = !isShowingFrequentation;
};
Il ne reste plus qu'à écouter l'activation du bouton pour enclencher la
fonction :
switchbutton.addEventListener("calciteSwitchChange", changeVisibility);
Lorsque nous n'affichons pas la fréquentation des parcs, la légende n'a pas
grand intérêt. Nous allons donc faire en sorte qu'elle se réduise au moment du
clic sur le bouton switch. Comme d'habitude, nous récupérons la légende dans
le DOM (notez ici qu'elle est encapsulée dans un composant
Expand
pour permettre le développement et la réduction) :
const legendExpand = document.querySelector("arcgis-expand arcgis-legend")?.closest("arcgis-expand");
Et il nous suffit ensuite de rajouter cette ligne à la fonction
changeVisibility
qui va venir
inverser le paramètre expanded
,
pour ouvrir ou fermer la fenêtre :
legendExpand.expanded = !isShowingFrequentation;
Un dernier truc qui me dérange particulièrement, c'est cet élément de la
légende :
Il n'apporte pas grand chose et est plutôt disgracieux... On va le faire
disparaître avec un petit coup de css :
.esri-legend__layer-body {
display: none;
}
Aucun commentaire:
Enregistrer un commentaire