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

Leaflet + mapserver

Добавлено: 29 ноя 2014, 19:38
mks
Добрый день уважаемые.
Подскажите возможно ли в вышеупомянутой связке организовать tile server который подложку будет брать например из OSM и дополнительно накладывать на неё данные из локальной БД или файлов и всё вместе показывать в обозревателе, в leaflet? С картографией столкнулся первый раз в жизни, усиленно читаю документацию, но просветления пока не наступило.
Спасибо.

Re: Leaflet + mapserver

Добавлено: 01 дек 2014, 14:22
Denis Rykov
Leaflet-у без разницы чьи тайлы отображать. По описанной вами схеме у вас должны быть следующие компоненты:
  1. Рендерер собственных данных (как вариант - Mapnik)
  2. Сервис наложения данных из п.1 на подложку OSM (MapProxy)
  3. Тайловый сервер (MapProxy)

Re: Leaflet + mapserver

Добавлено: 01 дек 2014, 15:00
mks
Спасибо за отклик.
Подскажите, mapnik это ведь библиотека, консольного приложения mapnik не существует? Я собственно и хотел на начальном этапе избежать встраивания таких библиотек в своё приложение и остановился на mapserver так как его можно вызывать по CGI и просто транслировать его выхлоп пользователю (в leaflet или что топодобное).
Вот тут описан tile mode для mapserver это разве не то что нужно для leflet?

Re: Leaflet + mapserver

Добавлено: 01 дек 2014, 23:44
Denis Rykov
Извините, но я вас не понял, что значит избежать встраивания библиотек? MapServer CGI - это ни что иное, как приложение, использующее возможности библиотеки libmapserver (не путать с mapscript - баиндинги к этой библиотеке):

Код: Выделить всё

$apt-cache depends cgi-mapserver
cgi-mapserver
  Зависит: libc6
  Зависит: libfcgi0ldbl
  Зависит: libmapserver1
Аналогичную обёртку вы можете сделать используя Mapnik, пример, но чтобы не велосипедить, можно использовать MapProxy, развернув его удобным вам способом, или воспользовавшись serve-develop для тестов. Воспользовавшись MapProxy, вы получаете не просто всевозможные сервисы на выходе (TMS, WMS и пр.), но и полноценную поддержку тайловых кэшев (в стеке MapServer для этого используется отдельное приложение MapCache).

Re: Leaflet + mapserver

Добавлено: 02 дек 2014, 14:31
mks
Собственно я пишу приложение для рабочего стола на C++ и Qt в котором надо результаты расчётов показывать на карте. Что бы не писать свой виджет отображения карты решил вставить в приложение WebKit браузерный движёк и использовать Leaflet. Так же в приложение встроен http сервер который отдаёт в браузер страничку с картой + данные для отображения поверх карты. Что бы самому не заниматься сборкой всевозможных библиотек для чтения/отображения карт хочу по cgi интерфейсу подключить к своему http серверу mapserver. Поэтому встал вопрос с его настройкой. Надо было сразу изложить суть задачи, извините если ввёл в заблуждение.
Сейчас посидел подумал, пожалуй стоит подложку грузить напряму в leaflet из источника (OSM, Yandex) а на mapserver возложить только отдачу данных для отображения, а объединять слои в leaflet. Данные видимо будут лежать в БД SpatiaLite. Да, показывать мне надо вектора (точки и полигоны) и геопривязаные растровые картинки.
Что скажете про такую связку, она работоспособна? Может я что то упустил или не понял?

Re: Leaflet + mapserver

Добавлено: 02 дек 2014, 20:08
trir
вектор можно и в самом leaflet показать и даже растр вставить...

Re: Leaflet + mapserver

Добавлено: 02 дек 2014, 23:50
Ariki
А большой ли объём данных? Если нет, может оказаться намного проще, коли уж у вас встроен HTTP-сервер в приложение, безо всякого MapServer прямо в вашем приложении генерировать и отдавать растровые тайлы по схеме TMS или совместимой с OSM и Google Maps, а векторные данные - в GeoJSON. Все эти форматы настолько просты, что их обычно проще генерировать самостоятельно, чем полагаться на сторонние приложения и библиотеки. За исключением случая, если вы собрались рендерить в растр собственную картографию с условными знаками, подписями и т. п. - тогда вам нужен Mapnik. MapServer требуется, когда нужно кэширование или следование стандартам OGC. В вашем настольном приложении всё это ни к чему.
Повозиться придётся только в том случае, если векторных данных много и их приходится отдавать частями по географическому охвату. Единого стандарта на такие сервисы нет (кроме сравнительно сложного WFS), но есть несколько реализаций, которые можно взять за образец, и плагины для Leaflet, позволяющие с ними работать. Посмотрите примеры здесь.

Re: Leaflet + mapserver

Добавлено: 03 дек 2014, 02:09
ericsson
Да, может никакой сервер вообще и не нужен, просто написать один скрипт для растеризации (или конвертирования в вектор, пригодный для web) и последующей нарезки, а потом дергать его по расписанию или по признаку обновления данных какому-то. И просто хранить все это в файловой системе веб-сервера.

Re: Leaflet + mapserver

Добавлено: 03 дек 2014, 10:18
mks
Всем спасибо за отклики, возьму перерыв на размышления...

Re: Leaflet + mapserver

Добавлено: 03 дек 2014, 11:57
Ariki
Ну если по-честному, в настольном приложении веб-сервер вообще выглядит костылём. Если лицензия приложения позволяет использовать GPL-код, можно воспользоваться QGIS Libraries или выдернуть что-нибудь отсюда; если нет - реализовать отрисовку тайликов и геометрий на Qt самому не сложнее, чем встроить в приложение веб-сервер и морду к нему, тем более при использовании SpatiaLite, на который можно возложить и перепроецирование, и пространственные выборки.

Re: Leaflet + mapserver

Добавлено: 03 дек 2014, 14:04
mks
Ariki писал(а):А большой ли объём данных?
Вообще да, картинка может запросто весить 1 Гб или около того.
Ariki писал(а):Ну если по-честному, в настольном приложении веб-сервер вообще выглядит костылём.
В будущем думаем делать web клиент с урезанным функционалом поэтому пока предварительно выбрали такую архитектуру. К тому же приложение всё равно должно содержать в себе некий сервер для общения с удалённым узлом.
Ariki писал(а):... при использовании SpatiaLite, на который можно возложить и перепроецирование, и пространственные выборки.
На самом деле я пока не очень понимаю какие функции на что можно возложить и как это лучше сделать.

Re: Leaflet + mapserver

Добавлено: 03 дек 2014, 17:45
Ariki
mks писал(а):Вообще да, картинка может запросто весить 1 Гб или около того.
Размер растровых данных не имеет значения, они всё равно режутся на тайлы для веб-приложений, а для настольных строятся пирамиды (чтобы при мелких масштабах отображения отрисовывать не исходный растр, а его вариант в низком разрешении). Я не знаю специфику вашего приложения, можно ли у вас генерировать данные на лету для некоторого "окна" в определённом масштабе, или же сначала выполняется расчёт на всю территорию, картинка сохраняется и затем уже её надо оптимизировать для отображения.
В случае векторных данных, на СУБД можно возложить их выборку по пространственному охвату (окну отображения) и другим критериям, перепроецирование в картографическую проекцию и даже генерацию GeoJSON для отдачи по HTTP.

Re: Leaflet + mapserver

Добавлено: 03 дек 2014, 20:12
jerry-maori
1. Что представляют из себя результаты рассчётов? Именно в исходном виде.. Если это тупо сразу растр - одна история, если же это вектор, который загоняется в растр в угоду каким-либо причинам - совсем другая...
2. Приложение stand-alone или таки может щемится в интернет?
Если может - то все кульбиты с подложкой можно слать лесом... Опять же, leaflet вроде как может вывести на подложку почти любой каприз...

От этого зело многое зависит...

Re: Leaflet + mapserver

Добавлено: 04 дек 2014, 12:18
mks
  • Результат расчётов изначально растровый (матрица напряжённости электромагнитного поля).
  • Обращаться в интернет можно.