|
| 1 | +# Informations utiles sur le gestionnaire de couches (Copilot) |
| 2 | + |
| 3 | +> Questions / Réponses realisées avec Copilot |
| 4 | +
|
| 5 | +## Voici un résumé de l’utilisation de la classe `LayerSwitcher` |
| 6 | + |
| 7 | +### Résumé d’utilisation de la classe LayerSwitcher |
| 8 | + |
| 9 | +La classe `LayerSwitcher` est un contrôle OpenLayers permettant à l’utilisateur de gérer dynamiquement les couches d’une carte : |
| 10 | +- **Afficher/Masquer** les couches, |
| 11 | +- **Changer l’ordre** des couches (drag & drop), |
| 12 | +- **Modifier l’opacité**, |
| 13 | +- **Basculer en niveaux de gris** (pour les couches compatibles), |
| 14 | +- **Afficher les informations** (titre, description, légende, métadonnées, aperçu), |
| 15 | +- **Zoomer sur l’étendue** d’une couche, |
| 16 | +- **Supprimer** une couche, |
| 17 | +- **Déclencher des actions avancées** via des outils personnalisés. |
| 18 | + |
| 19 | +### Principales fonctionnalités |
| 20 | + |
| 21 | +- Prend en charge tous types de couches OpenLayers (WMS, WMTS, vecteur, etc.). |
| 22 | +- Permet de configurer chaque couche (titre, description, légendes, métadonnées, etc.). |
| 23 | +- Gère les événements liés aux couches (ajout, suppression, modification de visibilité, opacité, etc.). |
| 24 | +- S’intègre facilement à la carte via `map.addControl(new LayerSwitcher(...))`. |
| 25 | +- Offre une API d’événements pour réagir aux actions utilisateur. |
| 26 | + |
| 27 | +### Exemple d’utilisation |
| 28 | + |
| 29 | +```javascript |
| 30 | +import LayerSwitcher from "gpf-ext-ol/controls/LayerSwitcher"; |
| 31 | + |
| 32 | +const layerSwitcher = new LayerSwitcher({ |
| 33 | + layers: [ |
| 34 | + { |
| 35 | + layer: myLayer, |
| 36 | + config: { |
| 37 | + title: "Ma couche", |
| 38 | + description: "Description de la couche" |
| 39 | + } |
| 40 | + } |
| 41 | + ], |
| 42 | + options: { |
| 43 | + collapsed: false, |
| 44 | + panel: true, |
| 45 | + counter: true, |
| 46 | + allowEdit: true, |
| 47 | + allowGrayScale: true |
| 48 | + } |
| 49 | +}); |
| 50 | + |
| 51 | +map.addControl(layerSwitcher); |
| 52 | +``` |
| 53 | + |
| 54 | +### Événements disponibles |
| 55 | + |
| 56 | +Vous pouvez écouter les événements pour réagir aux actions : |
| 57 | + |
| 58 | +```javascript |
| 59 | +layerSwitcher.on("layerswitcher:add", e => console.log("Ajout couche", e.layer)); |
| 60 | +layerSwitcher.on("layerswitcher:remove", e => console.log("Suppression couche", e.layer)); |
| 61 | +layerSwitcher.on("layerswitcher:change:opacity", e => console.log("Opacité", e.opacity)); |
| 62 | +layerSwitcher.on("layerswitcher:change:visibility", e => console.log("Visibilité", e.visibility)); |
| 63 | +``` |
| 64 | + |
| 65 | +--- |
| 66 | + |
| 67 | +**En résumé :** |
| 68 | +`LayerSwitcher` facilite la gestion interactive des couches sur une carte OpenLayers, |
| 69 | +tout en offrant de nombreuses options de personnalisation et une API d’événements riche pour les développeurs. |
| 70 | + |
| 71 | +## Voici une explication sur la notion de couches « grisées » (hors plage de visibilité, via `isInRange`) dans la classe `LayerSwitcher` |
| 72 | + |
| 73 | +### Couches grisées (isInRange) |
| 74 | + |
| 75 | +Dans le widget **LayerSwitcher**, une couche peut apparaître « grisée » dans la liste des couches. Cela signifie que la couche n’est **pas visible** dans la vue courante de la carte, pour l’une des raisons suivantes : |
| 76 | + |
| 77 | +- **Niveau de zoom inadapté** : |
| 78 | + La résolution actuelle de la carte (zoom) ne correspond pas à la plage de zoom définie pour la couche (`minResolution`/`maxResolution`). |
| 79 | + Exemple : une couche n’est visible qu’à grande échelle, mais l’utilisateur est trop dézoomé. |
| 80 | + |
| 81 | +- **Étendue géographique non couverte** : |
| 82 | + L’emprise actuelle de la carte (la zone affichée) ne recoupe pas l’étendue spatiale définie pour la couche (`extent`). |
| 83 | + Exemple : la couche ne couvre que la France, mais l’utilisateur regarde l’Afrique. |
| 84 | + |
| 85 | +### Fonctionnement dans le code |
| 86 | + |
| 87 | +La méthode `isInRange(layer, map)` vérifie ces deux critères : |
| 88 | +- Si la résolution de la carte est hors de la plage de la couche, ou |
| 89 | +- Si l’étendue de la carte n’intersecte pas celle de la couche. |
| 90 | + |
| 91 | +Si l’un de ces cas est vrai, la couche est considérée comme « hors plage » et la classe CSS `outOfRange` est ajoutée à son élément DOM dans la liste. |
| 92 | +Visuellement, cela la grise et affiche un message d’information au survol. |
| 93 | + |
| 94 | +### Utilité |
| 95 | + |
| 96 | +- **Informer l’utilisateur** que la couche n’est pas visible dans la vue courante, sans la masquer de la liste. |
| 97 | +- **Éviter la confusion** : l’utilisateur comprend pourquoi une couche n’apparaît pas sur la carte. |
| 98 | +- **Accessibilité** : un message d’info est ajouté au survol du nom de la couche. |
| 99 | + |
| 100 | +--- |
| 101 | + |
| 102 | +**Résumé :** |
| 103 | +Une couche « grisée » dans le LayerSwitcher indique qu’elle n’est pas visible à cause du zoom ou de l’emprise courante. Cela améliore l’expérience utilisateur en rendant explicite la raison de l’absence de la couche sur la carte. |
| 104 | + |
| 105 | +## Voici une explication concernant les couches verrouillées dans le LayerSwitcher |
| 106 | + |
| 107 | +### Couches verrouillées (locked) |
| 108 | + |
| 109 | +Dans le widget **LayerSwitcher**, une couche peut être affichée comme « verrouillée ». |
| 110 | +Cela signifie que certaines actions sur cette couche sont désactivées pour l’utilisateur, généralement pour éviter sa suppression ou la modification de ses propriétés essentielles. |
| 111 | + |
| 112 | +### Fonctionnement |
| 113 | + |
| 114 | +- Une couche verrouillée affiche une icône de cadenas ou un indicateur visuel spécifique dans la liste des couches. |
| 115 | +- Les boutons d’action associés à la couche (suppression, édition, modification de visibilité, etc.) peuvent être désactivés ou masqués. |
| 116 | +- Le verrouillage peut être défini lors de la configuration de la couche, par exemple via une propriété `locked: true` dans la configuration passée au LayerSwitcher. |
| 117 | + |
| 118 | +### Utilité |
| 119 | + |
| 120 | +- **Protéger les couches critiques** : Empêcher la suppression ou la modification accidentelle de couches de fond, de référence ou indispensables à l’application. |
| 121 | +- **Clarifier l’interface** : L’utilisateur comprend immédiatement qu’il ne peut pas agir sur cette couche, ce qui évite les erreurs et la confusion. |
| 122 | + |
| 123 | +### Exemple de configuration |
| 124 | + |
| 125 | +```javascript |
| 126 | +const layerSwitcher = new LayerSwitcher({ |
| 127 | + layers: [ |
| 128 | + { |
| 129 | + layer: baseLayer, |
| 130 | + config: { |
| 131 | + title: "Fond de carte", |
| 132 | + locked: true // Cette couche sera verrouillée |
| 133 | + } |
| 134 | + } |
| 135 | + ] |
| 136 | +}); |
| 137 | +``` |
| 138 | + |
| 139 | +--- |
| 140 | + |
| 141 | +**Résumé :** |
| 142 | +Une couche verrouillée dans le LayerSwitcher est protégée contre certaines actions utilisateur (suppression, édition, etc.), ce qui garantit la stabilité et la cohérence de la carte affichée. |
| 143 | + |
| 144 | +## Voici une explication concernant les couches dites **éditables** dans le LayerSwitcher |
| 145 | + |
| 146 | +### Couches éditables (editable) |
| 147 | + |
| 148 | +Dans le widget **LayerSwitcher**, une couche peut être marquée comme « éditable ». |
| 149 | +Cela signifie que l’utilisateur a la possibilité de modifier le contenu ou le style de cette couche directement depuis l’interface du LayerSwitcher. |
| 150 | + |
| 151 | +### Fonctionnement |
| 152 | + |
| 153 | +- Une couche éditable affiche un bouton ou une icône d’édition dans la liste des couches. |
| 154 | +- En cliquant sur ce bouton, l’utilisateur peut accéder à des outils permettant : |
| 155 | + - d’ajouter, modifier ou supprimer des objets géographiques (pour les couches vecteur), |
| 156 | + - de changer le style ou les propriétés de la couche, |
| 157 | + - ou d’ouvrir un panneau d’édition dédié selon la configuration. |
| 158 | +- L’éditabilité est généralement activée pour les couches de type vecteur, via une propriété `allowEdit: true` dans la configuration du LayerSwitcher ou de la couche. |
| 159 | + |
| 160 | +### Utilité |
| 161 | + |
| 162 | +- **Permettre la saisie ou la correction de données** directement sur la carte. |
| 163 | +- **Personnaliser l’apparence** ou le contenu d’une couche sans quitter l’application. |
| 164 | +- **Faciliter la gestion collaborative** des données cartographiques. |
| 165 | + |
| 166 | +### Exemple de configuration |
| 167 | + |
| 168 | +```javascript |
| 169 | +const layerSwitcher = new LayerSwitcher({ |
| 170 | + layers: [ |
| 171 | + { |
| 172 | + layer: vectorLayer, |
| 173 | + config: { |
| 174 | + title: "Annotations", |
| 175 | + // L’option allowEdit peut aussi être définie globalement dans options |
| 176 | + } |
| 177 | + } |
| 178 | + ], |
| 179 | + options: { |
| 180 | + allowEdit: true // Active l’édition pour les couches compatibles |
| 181 | + } |
| 182 | +}); |
| 183 | +``` |
| 184 | + |
| 185 | +--- |
| 186 | + |
| 187 | +**Résumé :** |
| 188 | +Une couche éditable dans le LayerSwitcher permet à l’utilisateur de modifier son contenu ou son style via l’interface, principalement pour les couches vecteur, ce qui enrichit l’interactivité et la personnalisation de la carte. |
| 189 | + |
| 190 | +## Voici une explication concernant les couches en mode **N&B** (niveaux de gris) dans le LayerSwitcher |
| 191 | + |
| 192 | +### Couches en mode N&B (niveaux de gris) |
| 193 | + |
| 194 | +Dans le widget **LayerSwitcher**, certaines couches peuvent être affichées en mode « noir et blanc » (N&B), aussi appelé mode **niveaux de gris**. |
| 195 | +Cette fonctionnalité permet de désaturer l’affichage d’une couche pour la rendre visuellement moins dominante ou pour mettre en valeur d’autres informations cartographiques superposées. |
| 196 | + |
| 197 | +### Fonctionnement |
| 198 | + |
| 199 | +- Un bouton ou une option « N&B » (grayscale) est disponible pour chaque couche compatible (principalement les couches raster, comme WMS ou WMTS). |
| 200 | +- Lorsque l’utilisateur active ce mode, la couche est affichée en niveaux de gris sur la carte. |
| 201 | +- Techniquement, cela peut être réalisé via un filtre CSS appliqué au rendu de la couche, ou via une modification du style côté serveur ou client. |
| 202 | +- L’état N&B est conservé tant que l’utilisateur ne le désactive pas. |
| 203 | + |
| 204 | +### Utilité |
| 205 | + |
| 206 | +- **Améliorer la lisibilité** : Le mode N&B permet de faire ressortir des couches thématiques ou des annotations colorées en atténuant le fond cartographique. |
| 207 | +- **Personnalisation** : L’utilisateur peut adapter l’apparence des couches selon ses besoins d’analyse ou de présentation. |
| 208 | +- **Accessibilité** : Peut aider certains utilisateurs à mieux distinguer les informations importantes. |
| 209 | + |
| 210 | +### Exemple de configuration |
| 211 | + |
| 212 | +```javascript |
| 213 | +const layerSwitcher = new LayerSwitcher({ |
| 214 | + layers: [ |
| 215 | + { |
| 216 | + layer: rasterLayer, |
| 217 | + config: { |
| 218 | + title: "Ortho N&B" |
| 219 | + } |
| 220 | + } |
| 221 | + ], |
| 222 | + options: { |
| 223 | + allowGrayScale: true // Active le bouton N&B pour les couches compatibles |
| 224 | + } |
| 225 | +}); |
| 226 | +``` |
| 227 | + |
| 228 | +--- |
| 229 | + |
| 230 | +**Résumé :** |
| 231 | +Le mode N&B dans le LayerSwitcher permet d’afficher certaines couches en niveaux de gris, offrant ainsi une meilleure lisibilité et une personnalisation avancée de la carte pour l’utilisateur. |
| 232 | + |
| 233 | +## Voici une explication à ajouter à votre documentation concernant les **actions utilisateurs via l’option `advancedTools`** dans le LayerSwitcher |
| 234 | + |
| 235 | +### Actions utilisateurs via l’option `advancedTools` |
| 236 | + |
| 237 | +L’option **`advancedTools`** du LayerSwitcher permet d’ajouter des boutons ou outils personnalisés pour chaque couche dans la liste des couches. |
| 238 | +Ces outils offrent à l’utilisateur des actions avancées ou spécifiques, adaptées à vos besoins métier. |
| 239 | + |
| 240 | +### Fonctionnement |
| 241 | + |
| 242 | +- L’option `advancedTools` est un tableau d’objets, chaque objet représentant un outil personnalisé. |
| 243 | +- Pour chaque outil, vous pouvez définir : |
| 244 | + - `label` : le texte affiché sur le bouton, |
| 245 | + - `icon` : une icône SVG ou une URL d’image, |
| 246 | + - `cb` : une fonction callback exécutée lors du clic sur l’outil (reçoit en paramètres l’événement, le LayerSwitcher, la couche concernée, et les options de l’outil), |
| 247 | + - `styles` : des styles CSS personnalisés pour le bouton. |
| 248 | +- Les outils apparaissent dans l’interface du LayerSwitcher, à côté de chaque couche. |
| 249 | + |
| 250 | +### Utilité |
| 251 | + |
| 252 | +- **Ajouter des fonctionnalités spécifiques** à vos couches (export, analyse, affichage de popups, etc.). |
| 253 | +- **Personnaliser l’expérience utilisateur** en proposant des actions adaptées à chaque couche. |
| 254 | +- **Centraliser les outils** liés à la gestion des couches dans une interface unique. |
| 255 | + |
| 256 | +### Exemple de configuration |
| 257 | + |
| 258 | +```javascript |
| 259 | +const layerSwitcher = new LayerSwitcher({ |
| 260 | + layers: [ |
| 261 | + { |
| 262 | + layer: myLayer, |
| 263 | + config: { |
| 264 | + title: "Ma couche" |
| 265 | + } |
| 266 | + } |
| 267 | + ], |
| 268 | + options: { |
| 269 | + advancedTools: [ |
| 270 | + { |
| 271 | + label: "Exporter", |
| 272 | + icon: "📤", |
| 273 | + cb: (e, layerSwitcher, layer, options) => { |
| 274 | + // Action personnalisée à exécuter |
| 275 | + alert("Export de la couche : " + layer.get("title")); |
| 276 | + }, |
| 277 | + styles: { |
| 278 | + color: "blue" |
| 279 | + } |
| 280 | + } |
| 281 | + ] |
| 282 | + } |
| 283 | +}); |
| 284 | +``` |
| 285 | + |
| 286 | +### Exemples de possibilités des actions utilisateurs (`advancedTools`) |
| 287 | + |
| 288 | +L’option `advancedTools` permet d’ajouter une grande variété de boutons d’action personnalisés pour chaque couche dans le LayerSwitcher. |
| 289 | +Voici quelques exemples concrets : |
| 290 | + |
| 291 | +- **Bouton avec icône SVG inline** |
| 292 | + Permet d’ajouter un bouton avec une icône vectorielle personnalisée et une action JavaScript : |
| 293 | + ```javascript |
| 294 | + { |
| 295 | + label: 'One', |
| 296 | + icon: '<svg ...></svg>', |
| 297 | + cb: (e, instance, layer, options) => { |
| 298 | + console.log("Action One", e, instance, layer, options); |
| 299 | + } |
| 300 | + } |
| 301 | + ``` |
| 302 | + |
| 303 | +- **Bouton sans icône (icône par défaut)** |
| 304 | + Un simple bouton texte qui déclenche une action : |
| 305 | + ```javascript |
| 306 | + { |
| 307 | + label: 'Two', |
| 308 | + cb: (e, instance, layer, options) => { |
| 309 | + console.log("Action Two", e, instance, layer, options); |
| 310 | + } |
| 311 | + } |
| 312 | + ``` |
| 313 | + |
| 314 | +- **Bouton avec icône depuis une URL** |
| 315 | + Pratique pour réutiliser des pictogrammes existants : |
| 316 | + ```javascript |
| 317 | + { |
| 318 | + label: 'Three', |
| 319 | + icon: 'url/vers/mon-icone.svg', |
| 320 | + cb: () => window.history.back() |
| 321 | + } |
| 322 | + ``` |
| 323 | + |
| 324 | +- **Bouton de notification ou d’intégration avec d’autres systèmes** |
| 325 | + Par exemple, pour publier un événement ou notifier l’application : |
| 326 | + ```javascript |
| 327 | + { |
| 328 | + label: 'Four', |
| 329 | + icon: '<svg ...></svg>', |
| 330 | + cb: (e, instance, layer, options) => { |
| 331 | + // Publier une notification, ouvrir un panneau, etc. |
| 332 | + } |
| 333 | + } |
| 334 | + ``` |
| 335 | + |
| 336 | +- **Bouton stylisé** |
| 337 | + Vous pouvez personnaliser le style du bouton via la propriété `styles` : |
| 338 | + ```javascript |
| 339 | + { |
| 340 | + label: 'Exporter', |
| 341 | + icon: '📤', |
| 342 | + cb: (e, instance, layer, options) => { |
| 343 | + alert("Export de la couche : " + layer.get("title")); |
| 344 | + }, |
| 345 | + styles: { |
| 346 | + color: "blue" |
| 347 | + } |
| 348 | + } |
| 349 | + ``` |
| 350 | + |
| 351 | +Si l’option `cb` n’est pas renseignée dans un objet `advancedTools`, le bouton est tout de même affiché et, lors du clic, **un événement personnalisé est déclenché** par le LayerSwitcher (généralement `layerswitcher:custom`). |
| 352 | +Cet événement contient les informations sur le bouton cliqué, la couche concernée, etc. |
| 353 | + |
| 354 | +**Exemple d’utilisation :** |
| 355 | + |
| 356 | +```javascript |
| 357 | +layerSwitcher.on("layerswitcher:custom", (e) => { |
| 358 | + // e contient : event, layerSwitcher, layer, options (du bouton) |
| 359 | + console.log("Action custom déclenchée :", e); |
| 360 | +}); |
| 361 | +``` |
| 362 | + |
| 363 | +Cela permet de centraliser la gestion des actions non définies directement par une fonction `cb`, et d’ajouter des comportements dynamiques ou contextuels selon le bouton cliqué. |
| 364 | + |
| 365 | +--- |
| 366 | + |
| 367 | +**Résumé :** |
| 368 | +L’option `advancedTools` du LayerSwitcher permet d’ajouter facilement des boutons d’action personnalisés pour chaque couche, afin d’enrichir l’interface et de proposer des fonctionnalités avancées adaptées à vos besoins. |
0 commit comments