Exercices Hydro (Tuiles Vectorielles)
Exercice - Hydro Tuiles vectorielles#
Objectif identique aux précédents, mais avec un flux tuilé TMS en tuiles vectorielles.
- (basez-vous sur l’exemple précédent)
- ajoutez une nouvelle couche de tuiles vectorielles (
ol.layer.VectorTile
/ol.source.VectorTile
)- URL de la source :
https://api.ensg.eu/geoserver/gwc/service/tms/1.0.0/ensg:hydro@EPSG%3A900913@pbf/{z}/{x}/{-y}.pbf
- format de la source :
ol.format.MVT()
- styles à votre convenance
- URL de la source :
Nous allons maintenant réaliser la partie interaction (survol/click). Mais il se pose 2 contraintes :
- une interaction
ol.interaction.Select
ne peut pas s’appliquer sur une couche de tuiles vectorielles, il faut donc utiliser les méthodes d’interactions génériques de la carte (map.getFeaturesAtPixel
), récupérer/conserver l’élément cliqué, et lui appliquer un style spécifique - les features graphiques étant découpées en tuiles, il nous faut dupliquer notre couche de features complètes pour créer deux styles différents
Pour le survol, ajoutez un événement pointermove
sur la carte
- récupérez les features pour le pixel donné
- vous pouvez filtrer avec
layerFilter
- modifiez le curseur de la souris (
map.getTargetElement().style.cursor = features.length ? 'pointer' : ''
)
Pour le click :
- tout d’abord, dupliquez la couche en réutilisant la source du premier calque, et placez cette couche en dessous
new ol.layer.VectorTile({ source: layer.getSource(), }
- ajoutez un événement click sur la carte
- récupérez les features pour le pixel donné
- si vous avez une feature, conserver son identifiant (
feature.getId()
) dans une variable globale - si pas de feature, vider la variable globale
- si vous avez une feature, conserver son identifiant (
- créez un style dynamique pour la couche de sélection, basé sur cet identifiant
// couche de sélection new ol.layer.VectorTile({ source: layer.getSource(), style: function (feature) { if (feature.getId() == selection) { return new ol.style.Style({ stroke: new ol.style.Stroke({ color: 'mediumblue', width: 7 }), }); } }, });
- enfin, forcez la mise à jour du rendu graphique quand nécessaire (
selectionLayer.changed()
)- quand on change la feature sélectionnée
- récupérez les features pour le pixel donné