Как программист карты к печати готовил

Irkutsk

Всё началось с призыва о помощи в чате открытых карт: у славного города Иркутска, что стоит близ озера Байкал, нет своих схем для навигации внутри города. А когда эти схемы, наконец, решили задизаинить, векторных данных никто не предоставил. Ситуация осложняется тем, что люди, которые будут делать новые карты, пока практически ничего не знают о картографии, но являются экспертами в полиграфии. Поэтому учить ещё один векторный редактор со своими особенностями они не хотят. А так как QGIS и JOSM пиарятся в полиграфии меньше продуктов от Adobe — в шортлист знакомых приложений они не попали.

Итак, вводные: есть OpenStreetMap, есть город Иркутск. Нужно получить карту Иркутска в векторном графическом формате, который бы поняли Adobe Illustrator или Corel Draw.

Попытка 1: osmarender

Задача очень похожа на ту, которая описана в вики по osmarender. Great London или как делали svg карту всего Лондона

Все манипуляции я проводил в MacOS.

Для начала я скачал сам osmarender

wget -r -np -R index.html -nH --cut-dirs 2 http://svn.openstreetmap.org/applications/rendering/osmarender/

И потренировался создавать карты на одном районе города (чтобы быстро считать и видеть результат). Район получил, сохранив квадратик выгрузки карты из JOSM, который обозвал data.osm и положил к xslt стилям утилиты.

Получилось сразу неплохо (что и насторожило, но пока я не знал в чём подвох). Osmarender считал около минуты, на выходе получился файл, который открылся хромом за пару секунд.

osmarender_small

Не всё, кончено, идеально. Ангара обмелела в ручей, но на карту похоже. Сюрприз был в том, что Corel Draw отказался открывать такой файл. Adobe Illustrator попыхтел, но файл открыл. Что дало мне повод двигаться дальше в этом направлении и попробовать создать большую карту Иркутска.

Для большой карты мне понадобилось резать planet-latest.osm руками (так как загрузить через API, а значит и JOSM, такие больше полигоны нельзя).

osmconvert juno/data/osm/planet-latest.osm.pbf -b=104,52.2,104.5,52.4 --complex-ways --out-osm > irk.osm

На выходе получил файл весом аж в 47 мегабайтов. Этот файл osmarender обрабатывал уже около часа… и сказал что у него не получилось! Выходной файл присутствовал, но там был какой-то мусор, который ни разу не XML. И ни одного упоминания слова error или чего-то подобного! Попытки замены стилей и процессоров xslt результат дали не сразу. В итоге, я заменил xml на xsltproc, а xml со стилями на osm-map-features.xml, и моя срока запуска приобрела вид:

xsltproc -o ~/map_irk_full.svg osmarender.xsl osm-map-features.xml

На выходе я получил файл, который открывался хромом 5 минут. Adobe Illustrator переваривал его больше часа и в результате потерял часть фич. Путь выглядел всё бесперспективнее, и я отложил osmarender до лучших времён.

Попытка 2: QGIS

Я решил попробовать ортогональный подход: взять другие данные (shape выгрузку от гислаба) и сконвертировать её в другой формат (DXF для AutoCad’a). В интернете написано, что это один их самых удобных вариантов экспорта данных из QGIS в Illustrator. Тем более в выгрузке shape файлов от GisLab есть готовые файлы стилей QGIS. Все манипуляции проводятся в несколько кликов мышкой. На выходе получается файл весом под 90 мегабайтов… который не открывается ни в Illustrator, ни в онлайн просмотре Autodesc. Так как на моём компьютере ни одна программа кроме текстового редактора не могла прочесть этот файл, попытку с экспортом в dxf пришлось завершить.

Попытка 3: TileMill

Раз у меня уже был полный комплект shape файлов, я решил загнать их в программу, которая точно умеет делать SVG файлы. Такой программой на моей памяти была TileMill от Mapbox. Только существует одна проблема: TileMill больше не поддерживается, и последний официальный релиз виснет на старте. Так что если, вдруг, кто-то захочет запустить его на маке, качайте сразу девелоперскую или более старую версию программы с http://tilemill.s3.amazonaws.com/index.html

Покидав шейпы на карту, я получил такую вот картинку:

TileMill

Экспорт прошёл гладко, и Illustrator теперь всё открыл. Этот вариант выбран в качестве основного.

Попытка читерская

И только пройдя всю эту тягомотину и отправив готовый файл дизайнерам, я внимательно огляделся и понял… что всё могло бы быть гораздо проще:

  • openstreetmap.org умеет сохранять в svg прямо на главной. Правда небольшие участки, и весь Иркутск туда не влезет.
  • Veloroad умеет делать svg карты. Правда только западной части России.
  • Bbike умеет не только сохранять в svg, но и применять к данным различные стили.
  • И вообще, на английской вики есть целая страница по этой теме.

Выводы

А нет их, выводов. Для себя я, конечно, отметил, что перед тем как браться за незнакомую задачу, которую я смутно представляю как решать, нужно побольше поспрашивать гугл. Но это лирика и понятно без всяких историй.

В сухом остатке проект получил карты, ребята вроде довольны. Что они будут делать с этим огромным файлом — самому интересно. Метаинформация утеряна. Нельзя, допустим, выделить все внутридворовые проезды. Особенно забавно то, что конвертировать данные получилось только после загрузки их в программу для дизайна карты. Где, по идее, и должны быть проведены все преобразования перед экспортом карты в svg, как последней стадии подготовки к печати.

И самое обидное, что много важной информации для красивой печатной карты (landuse, названия улиц на иностранных языках) отсутсвует в исходных данных. Её, конечно, добавят на макет, но в OSM она не попадёт. И в следующий раз, когда кто-то захочет напечатать план города Иркутска, всё начнётся с начала… Надеюсь, эта заметка им хоть немного поможет.

One Comment on “Как программист карты к печати готовил

  1. В Maperetive есть экспорт в AI формат, а оттуда уже в свг