Чем попроще сгенерировать векторные тайлы?

Понадобились мне векторные тайлы. Для двух задач:

  1. Веб-карта. Все существующие рендеры меня не устраивают, мой растр (ссылка в подписи) слишком неуниверсален, громоздок (вектор всегда громоздкий, и это я только Самарскую область до 14-го масштаба пока рендерю) и постоянно уродлив, потому что в Тайлмилле разработка идёт слишком медленно. Короче, нужны векторные тайлы с отрисовкой в канве браузера и настраиваемыми стилями на стороне пользователя. Заодно будет занимать меньше места на сервере при неограниченном масштабе.

  2. Хочу попробовать сделать простенькую игру на оснве OSM. В смысле, уже не в веб-странице, а в полноценным десктопным приложением, OpenGL, 3D и всё такое. Некоторые данные, типа графа дорог, если понадобятся, я вытащу из БД. Но для всего остального нужны векторные тайлы.

Чем попроще сгенерировать их? Прямо в бинарные файлики /z/x/y.bin в любом документированном формате.

Нашел следующее:

  1. Mapsforge. Генерируется одной командой. Но формат слишком пересжат, даже целые числа там переменной длины и собираются из кусочков по 7 байтов. И формат сильно урезан в возможностях, кроме Name нет никаких текстовых строк, только идентификатор пар “тег=значение”. Зато есть документация и код загрузки файла, который можно использовать для конвертирования в более удобный для меня формат. В проекте где-то была упомянута даже триангуляция полигонов, что тоже очень пригодится. Жаль Явы не знаю, придется всё переводить на Си. В общем, много возни с парсингом формата и заведомо мало возможностей.

  2. TileStache. Я так и не понял, работает ли эта штука с обычными геоданными, загруженными в Postgres через osm2pgsql. На странице сказано “Generates vector tiles from OGR datasources”. Т.е. ему уже нужны упорядоченные данные для работы?

  3. Чужие тайлы, скачанные откуда-нибудь. Главный минус в том, что данные могут быть необновленные, либо неудобно скачиваемые (http://osm2vectortiles.org/downloads - из вариантов только вся планета, 62 Гб, от ноября 2015 года). Кроме того, из-за невозможности сконфигурировать детализацию придется скачивать всё в 16 или даже 17 масштабе, потом фильтровать и склеивать. И делать это регулярно при каждом обновлении. Как-то это неправильно, нужна независимость.

Такие дела. Что посоветуете? Есть еще варианты? Какой вариант попроще?

И ещё маленькая ремарка: я не знаю ни Явы, ни Питона, ни толком postgresql (чуть-чуть). Но написать на Си программку-парсер какого-нибудь формата вполне могу. Поэтому душа лежит к mapsforge, который без заморочек выплёвывает готовый файл, который останется только распарсить. Но смущает заведомая ограниченность формата и, возможно, есть варианты ещё проще? За этим и спрашиваю.

Спасибо.

Список имплементаций формата, который использует Mapbox, включая writer-ы: https://github.com/mapbox/awesome-vector-tiles (см. CLI Utulities)

https://github.com/systemed/tilemaker

Также посмотри http://osm2vectortiles.org/

Или я чего-то не понял, или не я :slight_smile: Как векторные тайлы должны помочь в скорости написания стиля, устранении уродливости (tilemill не куда не денется); Зачем всё те же миллионы файликов /z/x/y.bin, когда есть возможность запихнуть их в базу - mbtiles.
Я использовал tippecanoe, создавая из geojson. Правда мне так и не удалось, впихнуть в mbtiles несколько наборов, чтобы было как у mapbox - набор street-v6, а внутри дороги, домики и т.д.

А я с чего-то решил, что Мапбокс проприетарный и writer’ов для него нет о_О

Спасибо, похоже это то, что нужно.

Тайлмилл у меня тормозит. Комп слабоватый. От исправления стиля до лицезрения результата, особенно на мелких масштабах, проходит очень много времени. Поэтому стиль пишется почти вслепую с редкими превью-рендерами. Так что сеанс работы над стилем я завершаю с мыслью “пусть уже хоть как-то нарисуется”.

Векторные тайлы же будут отрисовываться в браузере, стиль и цвета можно настраивать прямо внутри веб-страницы. Работа пойдет гораздо быстрей и удобней. Так что я смогу задизайнить карту так, как хочу, а не так, чтоб хоть как-то слепилось.

Что значит не денется? Он мне будет больше не нужен и денется куда подальше.

Чтобы разместить на веб-хостинге. Один большой mbtile-файл удобнее, но я еще не изучал вопрос насчёт того, как веб-серверу раздавать отдельные тайлы, хранящиеся в большом файле. При том, что у меня нет прав на установку расширений для апача. Число inodes на хостинге тоже ограничено, возможно придётся писать собственный велосипед на php.

Для десктопного использования (в игре и т.п.), конечно, сохраню набор тайлов в один файл.

для п.1. Заливаете ваши данные в свою учетку на Мапбокс и вставляете потом полученную карту(стиль) в свой сервис

https://youtu.be/LxcwJvOwUos?t=14m13s

Вот собственно и всё

PS Для генерирования mbtiles - https://www.mapbox.com/help/large-data-tippecanoe/

Если нужно периодически обновлять данные карты - https://www.mapbox.com/blog/mapbox-cli-intro/

Полезная информация, спасибо. Правда, прогонять всё через мапбокс как-то не очень красиво, но на время разработки это будет хороший инструмент.