Отрисовка в mapnik по имеющейся базе данных.

Не знаете, где задать вопрос? Задавайте здесь.
Ответить
ygroeg
Новоприбывший
Сообщения: 7
Зарегистрирован: 26 авг 2021, 13:08
Репутация: 0
Откуда: Санкт-Петербург

Отрисовка в mapnik по имеющейся базе данных.

Сообщение ygroeg » 26 авг 2021, 13:43

Есть папка с файлами формата S-57, хочется забить все файлы в БД Postgres+PostGis и потом отрисовать с помощью mapnik в определённой локации с выбранным масштабом, всё это происходит на старой дебиан. Чтобы заполнить базу данных пробовал два варианта: navi2pg и ogr2ogr, версия GDAL 1.10.1. Оба делают что мне нужно не полностью.
Navi2pg https://github.com/nextgis/navi2pg я использую таким образом:

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

$ ./navi2pg --schema public PG:"host=localhost user='user' password='useruser' dbname=testdb port=5433" ./map_file.000 ./templates/mapserver.map.template ./templates/mapnik.xml.template ./templates/mapnik.py.template
Получаю бд и скрипт на питоне для использования в mapnik и .xml файл с правилами отрисовки для него. Всё бы хорошо, но он начинает ругаться если попробовать использовать в той же схеме у бд другой файл карты, говорит что слой уже существует, и заканчивает работу. Немного пытался поковыряться в коде navi2pg но ничего путного не вышло. Опции командной строки --append тоже нет.
У ogr2ogr можно добавить опции -append -update и они добавляют при использовании с некоторыми файлами в одной базе данных

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

$ ogr2ogr -skipfailures -append -update -s_srs "+init=epsg:4326" -f PostgreSQL PG:"host=localhost user='user' password='useruser' dbname=testdb port=5433" ./map_file.000 
Но проблема в том, что у меня тогда нет .xml файла со стилем отрисовки.
Попытался адаптировать полученный xml из navi2pg но они добавляют данные в таблицы по разному, и не был уверен, что я делаю что то правильное, поэтому отложил это.
Проблема именно в отрисовке по готовой базе, был выбран mapnik потому что он есть на ОС и с ним можно всё сделать как просто и быстро, python, так и потом ускорить работу, если понадобится, c++. Но для него необходим файл со стилями. Хочу уточнить, необходимо ли писать свой xml со многими правилами отрисовки, тем более, что у не до конца уверен в их количестве.

Аватара пользователя
oldbay
Участник
Сообщения: 52
Зарегистрирован: 14 июл 2015, 11:46
Статьи: 1
Репутация: 18
Откуда: Санкт-Петербург
Контактная информация:

Re: Отрисовка в mapnik по имеющейся базе данных.

Сообщение oldbay » 30 авг 2021, 00:20

Из того что вы написали только navi2pg даёт вам некоторую возможность загрузить s-57 в БД и рендерить из неё карту на основании mapnik или mapserver (в проекте есть и такой) картостиля. ogr2ogr тут вообще ни при чём - та структура БД что он создаёт не подходит для работы со стилями из navi2pg. Так что вам единственный, наверное, путь это разбираться в navi2pg, но учтите это древний проект и он очень давно не обновляется.

Есть ещё два известных мне проекта:
https://github.com/LarsSchy/SMAC-M - тоже не очень живой (всего 2 года против 6-ти) проект - но был интересен мне тем что там пытались реализовать сектора света маяков.
https://opencpn.org (https://github.com/OpenCPN/OpenCPN), он жив-здоров и развивается, но я увы с ним не знаком.

По итогу могу сказать что сам когда то пытался дописывать mapserver картостиль из navi2pg - но. по ряду причин, в конце концов от этого отказался и писал картостиль для s-57 почти с нуля на основании стандарта s-52, сверяя результат по набору тестовых данных s-64.

п.с: Есть ещё момент - настолько вам нужно чётко следовать стандарту s-52? Если просто нужна карта похожая на стандарт, даже если на ней не будет хватать каких то элементов - то navi2pg более чем подойдет, а вот если заказчик требует чтобы карта рендерилась "в точности как у него на навигаторе" - то у меня для вас плохие новости ...

ygroeg
Новоприбывший
Сообщения: 7
Зарегистрирован: 26 авг 2021, 13:08
Репутация: 0
Откуда: Санкт-Петербург

Re: Отрисовка в mapnik по имеющейся базе данных.

Сообщение ygroeg » 30 авг 2021, 08:12

oldbay, Navi2pg не совсем подходит для отрисовки нескольких карт, он начинает ругаться если я хочу всё добавлять в одни и те же таблицы. ogr2ogr мне кажется очень даже причём, потому что он так может, с ключами -append -update, всё заверну в скрипт и для папки таких карт всё будет работать. Наверное буду писать свой картостиль, чтобы отрисовать несколько карт, другого варианта не вижу. Тем более что действительно, для начала можно ограничиться береговыми линиями и мелкой детализацией.
Другие инструменты вполне возможно не подойдут из-за несовместимости с условиями которые есть на ОС, например, GDAL версии 1.10.1, но я посмотрю, спасибо.

Аватара пользователя
oldbay
Участник
Сообщения: 52
Зарегистрирован: 14 июл 2015, 11:46
Статьи: 1
Репутация: 18
Откуда: Санкт-Петербург
Контактная информация:

Re: Отрисовка в mapnik по имеющейся базе данных.

Сообщение oldbay » 30 авг 2021, 10:02

Ваша беда в том, что вы пытаетесь решить проблему не вникая в её суть - просто набором магических пассов руками: "Если не загрузилось одним, загружу другим - какая разница, вдург заработает". Не заработает!
Ещё раз повторяю - структура БД создаваемая при помощи ogr2ogr категорически не подходит для рендеринга карт картостилями navi2pg. Если вы будете грузить ogr2ogr-ом то вам придётся создавать самим картостили которые будут работать с его структурой бд.

По поводу что navi2pg не сохраняет "несколько карт" - ну видимо да(не использовал его в продакшене - только тестил и разбирал), но вы можете грузить разные карты в разные схемы и даже используя параметр --create_schema создавать их автоматически при загрузке, скажем в режиме: имя карты = имя схемы.

п.с:
Ваша OS здесь тоже не причём - это, как я понял, debian 7 или скорее всего, в вашем случае, astra 1.3 - 1.5 (все они были по сути его форком) и эту версию gdal я хорошо знаю, она, конечно стара как мамонт, но s-57 худо-бедно открывала.

ygroeg
Новоприбывший
Сообщения: 7
Зарегистрирован: 26 авг 2021, 13:08
Репутация: 0
Откуда: Санкт-Петербург

Re: Отрисовка в mapnik по имеющейся базе данных.

Сообщение ygroeg » 30 авг 2021, 12:39

oldbay, Ну я сразу написал, что увидел что таблицы разные получаются и xml из navi2pg не подходит для второго варианта. И в прошлом сообщении я написал, что буду сам писать xml со стилями отрисовки который, как мне кажется, мне подойдёт.
--create_schema пробовал. В итоге хочется открыть часть карты в определённой точке с каким то масштабом, может быть она вся находится на одном файле, а может на нескольких, поэтому --create_schema для navi2pg не подойдёт, мне кажется. Хотя, может, мапник умеет загружать несколько карт. Или может быть в xml который получается из navi2pg добавлять в Datasource несколько схем.таблиц, наверное это должно работать, даже попробую.

ygroeg
Новоприбывший
Сообщения: 7
Зарегистрирован: 26 авг 2021, 13:08
Репутация: 0
Откуда: Санкт-Петербург

Re: Отрисовка в mapnik по имеющейся базе данных.

Сообщение ygroeg » 30 авг 2021, 13:44

ygroeg писал(а):
30 авг 2021, 12:39
Или может быть в xml который получается из navi2pg добавлять в Datasource несколько схем.таблиц, наверное это должно работать, даже попробую.
Да, так можно, хотя некоторые слои немного накладываются друг на друга, буду ещё разбираться.

Но всё равно придётся вернуться к написанию своего xml, потому что navi2pg не работает с версией GDAL 2.1.2, а на astra 1.6 именно он

Ответить

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

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

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