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

12

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

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

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

zarbo
источник

Ответы:

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.
Алекс Лейт