Страница 1 из 2

Отображение большого количества объектов на карте

Добавлено: 12 фев 2015, 11:37
Alex_mk
Добрый день.
Мне необходимо отобразить на веб-карте большое количество объектов (около 500 000).
Понравился Leaflet, но такое количество объектов при использовании кластеризации он не потянул (использовал модуль для Qgis - gis2leaf).
Желательна интерактивность карты или хотя бы присутствие подписей объектов не ней. Она будет использоваться во внутренней сети компании.
Посоветуйте решение данной задачи.

Re: Отображение большого количества объектов на карте

Добавлено: 12 фев 2015, 11:48
VolandF
Добрый день, Alex_mk
Для отображения данных в векторном виде можно использовать Openlayers 3 с webgl-рендерингом:
http://dev.camptocamp.com/files/ol3/web ... oints.html
Иначе нужен WMS сервис, отдающий уже готовую картинку.

Re: Отображение большого количества объектов на карте

Добавлено: 12 фев 2015, 11:58
Alex_mk
VolandF, а можно еще использовать geoserver или geomixer? или они не потянут такого количества объектов?

Re: Отображение большого количества объектов на карте

Добавлено: 12 фев 2015, 12:06
trir
Alex_mk писал(а):VolandF, а можно еще использовать geoserver или geomixer? или они не потянут такого количества объектов?
Иначе нужен WMS сервис

Re: Отображение большого количества объектов на карте

Добавлено: 12 фев 2015, 12:06
SergeyRyzhkov
Alex_mk писал(а):VolandF, а можно еще использовать geoserver или geomixer? или они не потянут такого количества объектов?
А причем тут серверная часть?
Если я Вас правильно понял, то у Вас большое количество векторных данных, которые отдаются клиенту для рендеринга. Задача сервера всего лишь отдать порцию данных по запросу.
То есть тормоза - это клиент.
Способы:
- смотрите в сторону Vector Tiles (серверная часть + клиентская)
- уменьшайте объем передаваемых данных, используя предварительное "упрощение" геометрий для различных масштабов (это серверная часть)
- уменьшайте объем передаваемых данных, используя TopoJSON вместо GeoJSON (серверная часть + клиентская)
- смотрите в сторону d3 с Leaflet (чтобы уменьшить тормоза)
- ждите релиз leaflet, скоро ребята разродятся. Идет активная работа

Re: Отображение большого количества объектов на карте

Добавлено: 12 фев 2015, 13:16
VolandF
Alex_mk, Т.к отрисовка векторного слоя происходит в браузере то при таком количестве объектов векторный способ затруднителен, лучше отображать сформированный на сервере растр, не обязательно тайлы, обычный WMS для ваших нужд вполне сгодиться, у вас же не публичный сервис с тысячами посещений. Можно использовать Mapserver, он пошустрее или GeoServer, у него попроще интерфейс.
При этом данные лучше хранить в пространственной базе данных(например Postgres+Postgis+shp2pgsql), используя индексирование, упрощение геометрии, выборки только в текущем охвате и прочие полезности.

Re: Отображение большого количества объектов на карте

Добавлено: 12 фев 2015, 13:30
SergeyRyzhkov
VolandF, Вы все правильно говорите, но если требования отображать именно вектор (по той или иной причине), то можно последовать советам выше (моим). У меня в текущем проекте 1.347.000 (!!!) узлов водоканала в базе "отдыхают" рендерим посредством vector tiles и счастье всем. И на клиенте нормальный вектор (для последующей работы) и тянется только то что нужно из базы.

Если уж совсем тяжко, то можно попробовать utfGrid, иначе только растр (

Re: Отображение большого количества объектов на карте

Добавлено: 12 фев 2015, 13:36
Alex_mk
SergeyRyzhkov писал(а): А причем тут серверная часть?
Если я Вас правильно понял, то у Вас большое количество векторных данных, которые отдаются клиенту для рендеринга. Задача сервера всего лишь отдать порцию данных по запросу.
То есть тормоза - это клиент.
Сервер предполагал использовать для порционной отдачи данных клиенту, но не знаю как и на чем можно это реализовать. Может есть примеры с очень большим количеством объектов на карте? Я пока таких не нашел. Если отображать сформированный растр, то пропадет интерактивность (нельзя будет кликнуть на точку и получить информацию по ней, например), чего бы не хотелось. Какой инструментарий серверной и клиентской части оптимально подойдет для выполнения требуемых задач?

Re: Отображение большого количества объектов на карте

Добавлено: 12 фев 2015, 13:43
Alex_mk
SergeyRyzhkov писал(а):VolandF, У меня в текущем проекте 1.347.000 (!!!) узлов водоканала в базе "отдыхают" рендерим посредством vector tiles и счастье всем.
можно это посмотреть где-то?

Re: Отображение большого количества объектов на карте

Добавлено: 12 фев 2015, 13:50
SergeyRyzhkov
Если про систему - нет. Она специально для Заказчика делается.
Про спецификацию и ее реализацию погуглите. Основная тема, что вы тянете с сервера также как и с растровыми тайлами, только то что нужно на текущий вид карты и возможно часть кэшируете.
Причем реализовать Вы можете как душе угодно, сам смысл важен

Дам пару ссылок
https://www.mapbox.com/developers/vector-tiles - общее
http://wiki.openstreetmap.org/wiki/Vector_tiles - общее
https://github.com/SpatialServer/Leafle ... VectorTile - плагин
https://github.com/mapbox/geojson-vt - еще
https://nelsonslog.wordpress.com/2013/0 ... tor-tiles/ - тут обратите внимание на релизацию отрисовки на d3 (TileLayer.d3_geoJSON.js). Но в новой версии leaflet есть подвижки с Canvas

Re: Отображение большого количества объектов на карте

Добавлено: 12 фев 2015, 13:53
VolandF
Alex_mk писал(а):нельзя будет кликнуть на точку и получить информацию по ней, например
Можно, запрос getfeatureinfo реализован в большенстве клиентов, правда это уже грозит погружением в изучение OGC стандартов :shock:.

Re: Отображение большого количества объектов на карте

Добавлено: 12 фев 2015, 13:57
Andrey Zhukov
1. Тянуть на клиента кучу геометрии - моветон.
2. Кластеризацию можно делать на сервере.
3. Векторные тайлы - перекладывание всего функционала с сервера на клиента, разработчикам будет адская развлекуха.

Re: Отображение большого количества объектов на карте

Добавлено: 12 фев 2015, 14:48
VolandF
Alex_mk, я бы посоветовал такую схему:

1) Mapserver 6.4.1 как WMS сервер
2) PostgreSQL 9.3 для хранения пространственных данных, расширение PostGis 2.1 для их анализа,
там же есть полезная штука shp2pgsql для загрузки шейп-файлов,
а так же магические операторы <-> и <#>, с помощью которых можно избежать использования getfeatureinfo.
К тому же при надлежащей оптимизации базы данных вопрос о производительности может и не возникнуть.
3) клиент OpenLayers или Leflet, что больше нравиться + javascript примочки типа Jquery и прочее.

Это вполне хватит чтобы отобразить вашу карту в браузере, получить информацию об объекте по клику, а так же реализовать поиск по атрибутам если понадобится.

Re: Отображение большого количества объектов на карте

Добавлено: 12 фев 2015, 15:00
SergeyRyzhkov
Коллеги, вот Вы все правильно говорите, советуете, но у меня есть предложение (на будущие ответы)
В общем вопросы бывают двух типов:
1. есть проблема в общем - как ее решить более оптимально (такие-то критерии)
2. есть конкретная задача - как ее решить более оптимально (такие-то критерии)
Давайте все в кучу не сваливать, а отвечать согласно вопросу.
Давайте думать о тех, кто придет на форум и будет читать тему, пытаясь найти подобное решение.

В данном вопросе есть конкретика (не совсем, но улавливается) - интерактивное отображение большого количества объектов. Если я правильно понял - это вектор. Клиент "тонкий", например leaflet. В локальной сети. Приложение просто посмотреть, без всяких наворотов
Вот зачем городить ГИС-серваки и т.д, кто за ними следить, даже если они бесплатные или покупать GeoMixer. Зачем тайлы, WMS и т.д. Если можно обойтись малой кровью.

Много конечно возникает вопросов для окончательного вердикта..
Alex_mk, если желаете напишите мне на почту, пообщаемся, может найдем приемлемый вариант. А потом Вы огласите здесь свое заключение (чтобы уважать форум)

Re: Отображение большого количества объектов на карте

Добавлено: 12 фев 2015, 15:05
Andrey Zhukov
SergeyRyzhkov, вы очень активно пытаетесь продать на этом форуме свои услуги.