Отрисовка полигонов в связке Geoserver+LeafletJS[Решено]

Не знаете, где задать вопрос? Задавайте здесь.
Ответить
Mehaev Alain
Новоприбывший
Сообщения: 3
Зарегистрирован: 18 авг 2020, 17:34
Репутация: 0
Откуда: Россия, Вологда

Отрисовка полигонов в связке Geoserver+LeafletJS[Решено]

Сообщение Mehaev Alain » 19 авг 2020, 09:30

Доброго времени суток, уважаемые форумчане. Надеюсь на вашу помощь или совет.
Опишу ситуацию:
Есть веб-приложение для картографии, использующее библиотеку LeafletJS. Необходимо на карте отобразить большое количество полигонов-участков (замкнутые многоугольники, с заливкой или без дело второе) по координатам. На участках постоянно (не по щелчку на участок, а ПОСТОЯННО) должна отображаться информация (заранее заданные номера или текстовые названия), Изначально использовались средства самой библиотеки Leaflet (L.Polygon и названия при помощи bindTooltip), но при появлении большего количества участков все это начало жутко тормозить. Решено использовать GeoServer.
Что делаю:
Создаю шейп (shp) файл с участками, при помощи PostGIS импортирую его в базу PostgreSQL. (делал по туториалу, при необходимости могу прикрепить ссылку)
Затем на GeoServer'е опубликовал слой(формируется по информации которую загрузили в базу PgSQL), прописал стиль - указал TextSymbolizer Label, теперь на участках отображается нужная информация. Вот так отображается на GeoServer'е
1.jpg
1.jpg (62.08 КБ) 2586 просмотров
Далее в само приложение пишу код, который обращается к GeoServer'у и тянет созданный слой.
JS:_______________________________________
Спойлер
getInformFromGeoserv(){
var kvartLayer= L.tileLayer.wms("http://localhost:8080/geoserver/data_nl/wms?service=WMS", {
layers: 'data_nl:kvart',
styles: 'kvartStyle',
format: 'image/png',
transparent: true,
color: "red"
});
this.getMap().addLayer(kvartLayer);
this.getMap().setView([59.220496, 39.891523],8);
//59.220496, 39.891523
}
И... не знаю, связано ли это с особенностью работы библиотеки, тем что карта выгружается тайлами(небольшими плитками) и если на тайле есть хотя бы небольшой кусок участка-полигона то GeoServer подписывает его или еще с чем-нибудь, но получается такая картина - в веб-приложении один участок-полигон подписывается по несколько раз при приближении(увеличении зума).
1.jpg
1.jpg (62.08 КБ) 2586 просмотров
Прошу помочь советом, как можно вылечить подобное, нужно чтобы был один полигон=одна подпись
Вложения
2.jpg
2.jpg (107.55 КБ) 2584 просмотра
2.jpg
2.jpg (107.55 КБ) 2586 просмотров
Последний раз редактировалось Mehaev Alain 19 авг 2020, 11:31, всего редактировалось 1 раз.

trir
Гуру
Сообщения: 5354
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1021
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Отрисовка полигонов в связке Geoserver+LeafletJS

Сообщение trir » 19 авг 2020, 09:33


Mehaev Alain
Новоприбывший
Сообщения: 3
Зарегистрирован: 18 авг 2020, 17:34
Репутация: 0
Откуда: Россия, Вологда

Re: Отрисовка полигонов в связке Geoserver+LeafletJS

Сообщение Mehaev Alain » 19 авг 2020, 10:01

trir писал(а):
19 авг 2020, 09:33
https://docs.geoserver.org/latest/en/us ... orial.html
Не совсем понял, проблема в самом JS коде, т.е. способе подключения??

Mehaev Alain
Новоприбывший
Сообщения: 3
Зарегистрирован: 18 авг 2020, 17:34
Репутация: 0
Откуда: Россия, Вологда

Re: Отрисовка полигонов в связке Geoserver+LeafletJS[Решено]

Сообщение Mehaev Alain » 19 авг 2020, 11:33

Решил проблему при помощи функции центроид (<Geometry><Function name ="centroid">...)

Ответить

Вернуться в «Я новичок!»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 11 гостей