Как получить интерактивность Leaflet от Geoserver WMS?


12

У меня есть геосервер, обслуживающий шейп-файлы как WMS в Leaflet.

Я хотел бы добавить интерактивность, которая отображает всплывающее окно с атрибутами WMS на карте Leaflet, когда пользователь наводит курсор мыши или щелкает функцию WMS.

Я видел интерактивность воска / листовки, но возможно ли это с помощью WMS и Leaflet?

Ответы:


14

Вы должны попробовать использовать WMS GetFeatureInfo. Вот пример с Leaflet, сделанным доступным Брайаном Макбрайдом. Событие, используемое для запуска запроса GetFeatureInfo, вызывается по щелчку.


Сейчас я работаю над форматированием данных GetFeatureInfo с помощью шаблонов Geoserver Freemarker. Есть какие-нибудь мысли о взаимодействии Leverlet / Mouseover?
Зарбо

Как показано в примере, вы должны попробовать изменить событие, передаваемое в функцию onMapClick: строка 41 »map.addEventListener ('click', onMapClick); Я думаю, что вы должны взглянуть на страницу документации: leaflet.cloudmade.com/reference.html . Что касается шаблонов свободных маркеров Geoserver, я никогда не использовал их, но для меня более логично сделать WFS-запрос GetFeature с просьбой отформатировать ответ в GeoJson вместо WMS GetFeatureInfo. С этим объектом GeoJson на стороне клиента гораздо проще создать простую разметку HTML для отображения данных объекта (ов).
Педро Мендес

Извините ... Нет способа сделать GetFeature с Leaflet ..: / Даже если вы можете использовать слой GeoJSON для того же эффекта (атрибуты объекта уже доступны на клиенте). Но это я люблю OpenLayers =).
Педро Мендес

Привет Забро, тебе удалось заставить это работать? Я хочу реализовать то же самое. Не могли бы вы поделиться некоторыми фрагментами кода?
Прагнеш Патель

4
@PedroMendes Ссылка на пример, к сожалению, не работает. Не могли бы вы обновить его?
Устроец

4

Я получаю интерактивность Leaflet двумя способами, в зависимости от размера набора данных. Я бы рекомендовал против WMS getFeatureInfo, потому что стилизация полностью настроена на стороне сервера, что утомительно настраивать. Итак, вот мои два способа:

  1. Если набор данных небольшой, просто загрузите все как вектор (выполните запрос как JSONP или JSON, если у вас включен CORS). Например: https://maps.gcc.tas.gov.au/dogexerciseareas.html и код: https://github.com/gccgisteam/maps-website/blob/master/dogexerciseareas.html.
  2. Если набор данных большой, выполните запрос onClick и верните векторы для близких объектов (используя JSON или JSONP). Пример: https://maps.gcc.tas.gov.au/stormwater.html и код: https://github.com/gccgisteam/maps-website/blob/master/stormwater.html

(Этот пример ливневой воды немного сложнее, чем должен быть, потому что я изменяю, является ли слой интерактивным, когда слои включаются и выключаются ...)


Обратите внимание, что WMS GetFeatureInfo теперь может возвращать JSON.
Алекс Лейт

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.