Comment obtenir l'interactivité de Leaflet à partir de Geoserver WMS?

12

J'ai un géoserveur servant des fichiers de formes en tant que WMS dans Leaflet.

Je voudrais ajouter une interactivité qui affiche une fenêtre contextuelle avec des attributs WMS dans la carte Leaflet lorsque l'utilisateur survole ou clique sur une fonctionnalité WMS.

J'ai vu l'interactivité cire / dépliant, mais est-ce possible avec WMS et Leaflet?

zarbo
la source

Réponses:

14

Vous devez essayer d'utiliser WMS GetFeatureInfo. Voici un exemple avec la brochure mise à disposition par Bryan McBride. L'événement utilisé pour déclencher la demande GetFeatureInfo est onclick.

Pedro Mendes
la source
Maintenant, je travaille sur le formatage des données GetFeatureInfo avec les modèles Geoserver Freemarker. Avez-vous des réflexions sur une interaction survol / survol de la brochure?
zarbo
Comme indiqué dans l'exemple, vous devez essayer de modifier l'événement transmis à la fonction onMapClick: ligne 41 »map.addEventListener ('click', onMapClick); Je pense que vous devriez jeter un œil à la page de documentation: leaflet.cloudmade.com/reference.html . En ce qui concerne les modèles de marque libre Geoserver, je ne les ai jamais utilisés, mais il est plus logique pour moi de faire une demande WFS GetFeature demandant que la réponse soit formatée dans GeoJson au lieu de WMS GetFeatureInfo. Avec cet objet GeoJson du côté client, il est beaucoup plus facile de créer un balisage HTML simple pour afficher les données de fonctionnalité (s).
Pedro Mendes
Désolé .. Il n'y a aucun moyen de faire une GetFeature avec Leaflet ..: / Même si vous pouvez utiliser la couche GeoJSON pour le même effet (les attributs de l'entité sont déjà accessibles sur le client). Mais c'est que j'aime OpenLayers =).
Pedro Mendes
Salut Zabro, As-tu réussi à faire fonctionner ça? je veux implémenter la même chose. Pourriez-vous partager des extraits de code?
Pragnesh Patel
4
@PedroMendes Le lien vers l'exemple est malheureusement rompu. Pourriez-vous s'il vous plaît le mettre à jour?
ustroetz
4

J'obtiens l'interactivité de Leaflet de deux manières, selon la taille de l'ensemble de données. Je recommanderais contre WMS getFeatureInfo, car le style est tout défini côté serveur, ce qui est fastidieux à configurer. Alors, voici mes deux façons:

  1. Si l'ensemble de données est petit, chargez le tout en tant que vecteur (faites la demande en JSONP ou JSON si CORS est activé). Par exemple: https://maps.gcc.tas.gov.au/dogexerciseareas.html et code: https://github.com/gccgisteam/maps-website/blob/master/dogexerciseareas.html
  2. Si l'ensemble de données est volumineux, effectuez une demande onClick et renvoyez des vecteurs pour les entités proches (à l'aide de JSON ou JSONP). Exemple: https://maps.gcc.tas.gov.au/stormwater.html et code: https://github.com/gccgisteam/maps-website/blob/master/stormwater.html

(Cet exemple d'eaux pluviales est un peu plus complexe qu'il ne faut vraiment parce que je change si une couche est interactive lorsque les couches sont activées et désactivées ...)

Alex Leith
la source
Notez que WMS GetFeatureInfo peut retourner JSON maintenant.
Alex Leith