Как программист карты к печати готовил
Всё началось с призыва о помощи в чате открытых карт: у славного города Иркутска, что стоит близ озера Байкал, нет своих схем для навигации внутри города. А когда эти схемы, наконец, решили задизаинить, векторных данных никто не предоставил. Ситуация осложняется тем, что люди, которые будут делать новые карты, пока практически ничего не знают о картографии, но являются экспертами в полиграфии. Поэтому учить ещё один векторный редактор со своими особенностями они не хотят. А так как QGIS и JOSM пиарятся в полиграфии меньше продуктов от Adobe — в шортлист знакомых приложений они не попали.
Итак, вводные: есть OpenStreetMap, есть город Иркутск. Нужно получить карту Иркутска в векторном графическом формате, который бы поняли Adobe Illustrator или Corel Draw.
Попытка 1: osmarenderЗадача очень похожа на ту, которая описана в вики по osmarender. Great London или как делали svg карту всего Лондона
Все манипуляции я проводил в MacOS.
Для начала я скачал сам osmarender
И потренировался создавать карты на одном районе города (чтобы быстро считать и видеть результат). Район получил, сохранив квадратик выгрузки карты из JOSM, который обозвал data.osm и положил к xslt стилям утилиты.
Получилось сразу неплохо (что и насторожило, но пока я не знал в чём подвох). Osmarender считал около минуты, на выходе получился файл, который открылся хромом за пару секунд.
Не всё, кончено, идеально. Ангара обмелела в ручей, но на карту похоже. Сюрприз был в том, что Corel Draw отказался открывать такой файл. Adobe Illustrator попыхтел, но файл открыл. Что дало мне повод двигаться дальше в этом направлении и попробовать создать большую карту Иркутска.
Для большой карты мне понадобилось резать planet-latest.osm руками (так как загрузить через API, а значит и JOSM, такие больше полигоны нельзя).
На выходе получил файл весом аж в 47 мегабайтов. Этот файл osmarender обрабатывал уже около часа… и сказал что у него не получилось! Выходной файл присутствовал, но там был какой-то мусор, который ни разу не XML. И ни одного упоминания слова error или чего-то подобного! Попытки замены стилей и процессоров xslt результат дали не сразу. В итоге, я заменил xml на xsltproc, а xml со стилями на 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
Покидав шейпы на карту, я получил такую вот картинку:
Экспорт прошёл гладко, и Illustrator теперь всё открыл. Этот вариант выбран в качестве основного.
Попытка читерскаяИ только пройдя всю эту тягомотину и отправив готовый файл дизайнерам, я внимательно огляделся и понял… что всё могло бы быть гораздо проще:
- openstreetmap.org умеет сохранять в svg прямо на главной. Правда небольшие участки, и весь Иркутск туда не влезет.
- Veloroad умеет делать svg карты. Правда только западной части России.
- Bbike умеет не только сохранять в svg, но и применять к данным различные стили.
- И вообще, на английской вики есть целая страница по этой теме.
А нет их, выводов. Для себя я, конечно, отметил, что перед тем как браться за незнакомую задачу, которую я смутно представляю как решать, нужно побольше поспрашивать гугл. Но это лирика и понятно без всяких историй.
В сухом остатке проект получил карты, ребята вроде довольны. Что они будут делать с этим огромным файлом — самому интересно. Метаинформация утеряна. Нельзя, допустим, выделить все внутридворовые проезды. Особенно забавно то, что конвертировать данные получилось только после загрузки их в программу для дизайна карты. Где, по идее, и должны быть проведены все преобразования перед экспортом карты в svg, как последней стадии подготовки к печати.
И самое обидное, что много важной информации для красивой печатной карты (landuse, названия улиц на иностранных языках) отсутсвует в исходных данных. Её, конечно, добавят на макет, но в OSM она не попадёт. И в следующий раз, когда кто-то захочет напечатать план города Иркутска, всё начнётся с начала… Надеюсь, эта заметка им хоть немного поможет.