Картостиль veloroad для печати маршрутов

Рассказал про стиль в штосме. Также посчитал занимаемое базой данных место: после заливки 17 гигабайт, прирастает на 0,6 в день. Поэтому примерно раз в 10 дней приходится перевырезать и загружать заново. Это автоматизировано, но всё равно неприятно: хотелось бы минутное обновление не всей планеты, а только нужного региона.

Грохать не нужные данные после каждого наката дифа?

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

У меня это реализовано так:
процедуру накатывания дифов вызывает демон, после чего он же запускает процедуру очистки, соответсвенно, пока чистка не закончится следующего дифа не будет.
процедура очистки:
• все изменения дифов логируются тригерами
• на старте очистки тригеры дизейблятся (тригер просто не осуществляет логирование при наличии некоего значение в некоторой таблице)
• по логам анализируются измененные записи и удаляются не нужные
• опять же по логам анализируются не изменялись ли статистируемые объекты и обновляются в статистических таблицах
• очищаем логи, включаем тригеры логирования, процесс очистки окончен.
Благодаря анализу лишь измененных данных и расстановки соответсвующих индексов процедура очистки и обновления данных порядка десятка таблиц происходит быстрее наката диффов.

немного статистики по накату ~5-ти минутным диффам (регион - Эстония)

Не очень разбираюсь в деталях, но предложу вариант - не накатывать закачанные обновления (osc) сразу, а сначала обрезать osmfilter-ом, например. Это если есть возможность покопаться в скриптах обновления.

Приятный стиль! Заинтересовал значок железнодорожных станций) Можно узнать, от чего зависит размер значка и положение серого квадратика на нем?

Тоже поначалу склонялся к этому варианту, однако не нашел готового решения, решил костылять, взялся за дело и задумался “а как?”. Попадала нода в наш регион, ее кто-то подвинул и она вылетела, мы ее из дифа вырезали (диф имеет только актуальные данные), ибо не попадает, а у себя оставили. Не годится.

Хм. Спасибо за картинку со статистикой, она обнадёживает. Правда, я так понимаю, твоя база — совсем не osm2pgsql --slim. Я поэкспериментирую в этом направлении как-нибудь.

Размер зависит от значения: railway=station или railway=halt. Положение серого квадратика на картах генштаба обозначает направление выхода, но у меня оно, к сожалению, случайно: это направление по данным OSM никак не определить в общем случае.

У меня osmosis PostGIS + hstore без потери данных (если не ошибаюсь, osm2pgsql льет только интересующие данные). Геометрии строю только на те объекты, которые интересуют и хранятся они в отдельных, тех самых, статистических таблицах.

Zveik, а как у тебя получается значок вдоль линии поворачивать?

Разный знак для станции и остановки давно использовался на космоснимках, но не поворачивается. А фича, про то, что поворачивать его лицом к станции -это следующий вызов

Кстати, подписи населенных пунктов рисуюся с пунсонами или без. Смешивать это на одной карте для разных типов нп в правилах классической бумажной картографии не принято . Этим грешит яндекс, но что им до советской картографической школы)

и зеленые массивы слишком мелко (ИМХО) подписаны

Сейчас вспомнился еще один, рассматриваемый мною вариант (уже не помню, в следствии чего я от него отказался), возможно, он тебе больше подойдет.

Перекидываешь паблик таблицы в новую схему, паблик наполняешь аналогичными пустыми таблицами. Перенесенные таблицы наследуешь от соответсвующих паблик таблиц. При должном тестировании запросов эту процедуру можно проделать прямо на живую. Что имеем в итоге:
• Рендер обращается к паблик таблицам и видит данные как пустых паблик, так и данные живых таблиц, ибо они наследованы. Ничего не изменилось.
• osm2pgsql накатывает дифы на паблик, инсерты идут в паблик, делиты и апдейты отрабатывают как на пустом паблике, так и на наследованных. Т.е. для osm2pgsql тоже ничего не изменилось, но, живые данные тут же апдейтятся, а вот новые объекты остаются только в паблике. Анализом данных только паблика с живыми данными + нужный регион решается судьба этих новых объектов.

Угол беру от ближайшего к точке стометрового отрезка железной дороги. Стиль выложен на гитхаб, sql-запрос можно взять оттуда. Проблема со станциями — что их почти нигде нет. Или, например, что делать на остановках двухпутных линий, где платформы внутри или снаружи?

Я знаю, что неаккуратненько, но — удобно. Маркеры убираются для небольших городов, чтобы не закрывать сеть дорог. По-моему, там всё достаточно хорошо подогнано, чтобы было понятно, к чему относятся подписи.

На все претензии к размеру букв ответ один — карта должна хорошо смотреться на печати, поэтому размеры принудительно уменьшены (поначалу были на 1-4 пункта больше). На тайлах кое-как читается, уже хорошо.

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

Runge,
для населенных пунктов -пунсон -это не только местоположение объекта на карте, но и отображение типа объекта. Обычно это численность населения и административная принадлежность. Если пунсон убрать, то и то и другое можно выразить в шрифте, но если смешать две сущности -пунсон и разные шрифты -получится конфликт легенд. У “западников” на мелкомасштабных картах возможен вариант, когда агломерацию показывают площадным знаком, соответсвующим ее реальному контуру и это типа пунсон. и красят ее цветом пунсона. Но это справедливо, пока этот контур в масштабе не сильно от пунсона отличается по размерам

Пара предложений.
Вот, например, Зеленоград,

  1. Велостоянка - не отображается, а хорошо бы (видна на Cycle Map)
  2. Река в подземной трубе - отображается как обычная, а лучше бы спрятать, хотя бы частично (на OpenMapSurfer - бледнее, чем обычная)

Спасибо за предложения. Велостоянки, как и прочие элементы велосипедной инфраструктуры, не отображаются. Если я и буду заниматься рисованием иконок для POI, то не в ближайший месяц.

Трубу поправил.

Чёрт, прочитал ШТОСМ раньше этой темы, и поднял там тему, которую здесь уже обсудили. Признаю свою вину, меру, степень, глубину… Спасибо ещё раз за приятный стиль!

Для railway=abandoned это не работает? В г.Липки ж/д станция (недействующая) стоит поперёк ж/дороги:
http://osmz.ru/veloroad.html#12/53.9369/37.6968

И в том же районе, на 11 зуме название пос.Комсомольский закрывает большой кусок дороги :((

Добавь railway=narrow_gauge, а то станции в воздухе висят, 1111!
http://osmz.ru/veloroad.html#14/60.2577/47.8124

railway=station и railway=halt у которых есть тег disused=yes надо скрывать (или рисовать зачёркнутыми крестиком)

В контексте обсуждения лицензий хочу сразу пояснить, что тайлы стиля veloroad опубликованы под CC-BY: использовать можно как угодно, но необходимо, помимо OpenStreetMap, упоминать «© Ilya Zverev».

Сам стиль на github опубликован под лицензией WTFPL. То есть да, вы можете его скачать и делать свои тайлы со своей лицензией. Такая интересная юридическая ситуация.