Архив рубрики: OSM

OpenStreetMap

Скачивание видеороликов с попутным их склеиванием

Если что-то в интернете можно посмотреть, значит, это можно и скачать, хоть это и не всегда удобно.

Вот, например, челябинский провайдер «Интерсвязь» всюду развесил камеры видеонаблюдения да видеодомофоны и даёт возможность своим абонентам смотреть не только то, что происходит прямо сейчас, но и архив за последнюю неделю. При этом архивную запись с общедоступной камеры скачать можно — на странице есть соответствующая кнопка, но вот с камеры домофона — нельзя.

Как известно, если нельзя, но очень хочется, то можно.

Метод

1. Заходим на страницу с архивом, находим нужный фрагмент, открываем отладчик (клавишей F12), переключаемся на вкладку Network — так и в Google Chrome, и в Mozilla Firefox.

2. Запускаем воспроизведение — отладчик покажет выполненные запросы.

3. Когда запросы перестанут идти (то есть, всё нужно, уже скачалось), можно, щёлкнув по ним правой кнопкой, выбрать пункт “Save all as HAR” — запросы и ответы на них будут сохранены единым файлом с расширением HAR — на самом деле это JSON.

В отладчике открыта вкладка Network

4. Берём какой-нибудь HAR-extractor (есть всякие варианты — мне подошёл первый попавшийся, написанный на Node.JS), натравливаем его на HAR-файл, получаем папку, в одной из подпапок которой будут лежать видеофайлы с расширением TS.

5. Смотрим эти видеофайлы — под линуксом с гномом можно использовать стандартный видеоплеер totem или всеядный mpv (ну или mplayer, из которого он и вырос).

6. Создаём текстовый файл, каждая строка которого состоит из слова file, пробела и имени файла в апострофах:

file 'cam42_16-10-2020_26778689266.ts'
file 'cam42_16-10-2020_26778699914.ts'

7. Склеиваем мелкие видеофрагменты в один большой файл:

ffmpeg -f concat -i список.txt -codec copy результат.mp4

Всё!


Аналогичный способ — сохранение кучи мелких файликов через HAR — можно использовать для того, чтоб добыть тайлы — небольшие квадратные картинки из которых состоят интерактивные карты на сайтах, а потом, делая свою карту, разместить эти тайлы где-нибудь у себя, чтоб не создавать лишнюю нагрузку на тайлопровайдера — они этого не любят: OpenStreetMap просит не брать тайлы непосредственно у них, а фонд ВикиМедиа всё время клянчит денег на поддержку функционирования Википедии. Реальный пример такого подхода — карта Global SUSU на сайте Южно-Уральского университета: тайлы там сгенерированы Википедией из общедоступных данных OpenStreetMap, но хранятся на одном из университетских серверов.

Re: Неожиданные маршруты челябинского электротранспорта

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

Посчитаем:

  • 3. Завод имени Колющенко — ЧМК
  • 3. Завод имени Колющенко — Коксохим
  • 3. Завод имени Колющенко — ЦХП (недавно в новостях преподносилось как свежая забота о садоводах, хотя этот удлинённый маршрут был и в СССР — см. справочник «Улицы Челябинска» за 1989 год)
  • 3. ЦХП — ЧМК
  • 5. Завод имени Колющенко — улица Горького — ЧЭМК
  • 5, 18. ЧЭМК — трамвайное депо № 1
  • 6. ЧТЗ — Медгородок
  • 6. ЧТЗ — улица Карла Маркса — трамвайное депо № 1 (кольцевой с хвостиком)
  • 6. ЧТЗ — улица Кирова — трамвайное депо № 1 (кольцевой с хвостиком)
  • 6, 17, 20. Трамвайное депо № 2 — Медгородок (фактически это часть двадцатого маршрута)
  • 6, 8. Трамвайное депо № 1 — улица Чистопольская (часть восьмого маршрута)
  • 6, 15. Трамвайное депо № 1 — улица Горького — улица Чичерина
  • 6. Трамвайное депо № 1 — улица Кирова — улица Горького — трамвайное депо № 1 (кольцевой)
  • 6, 22. Улица Чичерина — улица Карла Маркса — трамвайное депо № 1
  • 7. Завод имени Колющенко — ЧГРЭС
  • 5, 7, 8, 19. Завод имени Колющенко — трамвайное депо № 1 (можно не считать, у семёрки не такое уж большое отклонение, хотя и непонятно, что тут девятнадцатый забыл)
  • 8. Завод имени Колющенко — улица Чистопольская
  • 10, 14. Першино — ЦХП (часть четырнадцатого)
  • 10, 19. Першино — Коксохим (часть девятнадцатого)
  • 10, 14, 19. ЦХП — Коксохим (вроде, в советское время был маршрут № 9, который так ходил вокруг комбината)
  • 10, 19. ЧМК — Коксохим (укороченная версия предыдущего)
  • 10. Трамвайное депо № 2 — ЧМК (часть маршрутов № 3 и 14)
  • 14. Улица Чичерина — ЦХП
  • 14, 19. Улица Чичерина — ЧМК (чуть короче)
  • 14, 17, 19, 22. Улица Чичерина — трамвайное депо № 2 (ещё короче)
  • 15. ЧТЗ — улица Чичерина
  • 15. ЧТЗ — трамвайное депо № 1 (можно не считать, не такое уж большое отклонение)
  • 15, 19. Трамвайное депо № 1 — улица Российская — улица Чичерина
  • 16. Завод имени Колющенко — улица Чичерина
  • 16. Завод имени Колющенко — театр оперы и балета — трамвайное депо № 1 (внезапно по улице Труда)
  • 16, 22. Трамвайное депо № 1 — улица Карла Маркса — улица Чичерина
  • 17. Медгородок — улица Чичерина
  • 18. ЧЭМК — улица Чистопольская
  • 19. Улица Чичерина — Коксохим
  • 19, 20. Трамвайное депо № 2 — Коксохим (часть предыдущего)
  • 19. Першино — ЧМК
  • 20. Медгородок — ЧМК
  • 20. Медгородок — Коксохим
  • 21. ЧМК — ЧЭМК
  • 21. ЧЭМК — ЦХП
  • 22. Улица Чичерина — улица Чистопольская
  • 22. Улица Чистопольская — улица Карла Маркса (часть восьмого маршрута, на карте нарисован невозможный для трамвая разворот)
  • 22. Трамвайное депо № 2 — улица Карла Маркса — улица Чистопольская

Итого — больше сорока маршрутов, причём в Металлургическом районе творится совсем уж полное безобразие: там и одному номеру могут соответствовать разные маршруты, и по одному и тому же маршруту могут хоть трамваи с разными номерами.

Что делать с этим — вообще не понятно. Если не оставлять всё как есть, и не менять маршруты принципиально, остаётся лишь смена нумерации. И тут, как нетрудно догадаться, есть два варианта: либо каждому маршруту давать номер, состоящий только из цифр, либо нормальные номера давать только рейсам между самыми дальними конечными (например, номер 3 относился бы только к маршруту Завод имени Колющенко — ЦХП), а к рейсам покороче добавлять буквы. Трамвайная сеть в Челябинске хоть и не самая большая (даже в Магнитогорске больше), но достаточно развитая — её можно представить таким графом:

«Самые дальние конечные» — это те вершины графа, к которым приходит только одно ребро и таких вершин всего девять, что даёт ещё один вариант нумерации, точнее, разновидность второго из предложенных ранее вариантов: пусть номер маршрута складывается из номеров его самых дальних конечных, а если он до них не доезжает — добавим букву. Если конечные будет пронумерованы таким образом: 0 — Чичерина, 1 — Медгородок, 2 — Колющенко, 3 — ЧГРЭС, то, например, нынешний семнадцатый маршрут «Чичерина — Медгородок» получит номер 1, шестнадцатый «Колющенко — Чичерина» — 2, а семёрка «Колющенко — ЧГРЭС» — 23.

Преимущество подобного подхода в том, что номера девяти конечных проще запомнить, чем несколько десятков маршрутов, но вот недостатков у него — множество:

  • нумерация меняется очень сильно,
  • нумерация не сплошная, а с разрывами,
  • некоторые популярные маршруты могут получить неудобные длинные номера: например, 26к или 26а вместо тройки.

Надо чел. урбанисту подкинуть идею — раз уж удалось поменять схемы в трамваях, может, и нумерацию можно выправить? 🙂

Неожиданные маршруты челябинского электротранспорта

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

Вот, скажем, троллейбусных маршрутов у нас, вроде, семнадцать. А теперь посчитаем ещё раз и учтём всякие отклонения и некоторые рейсы в единственное оставшееся троллейбусное депо:

  • 1. Вокзал — ПКиО
  • 2. ЧТЗ — ПКиО
  • 4. ЧКПЗ — Копейское шоссе — улица Гагарина — Солнечный берег
  • 5. АМЗ — Вокзал
  • 6. ЧТЗ — Первоозёрный
  • 7. ЧМК — АМЗ
  • 5, 7, 12. АМЗ — Троллейбусное депо № 2 (часть обычного седьмого маршрута)
  • 7, 14. ЧМК — Троллейбусное депо № 2 (часть обычного седьмого маршрута)
  • 8. ПКиО — улица Гагарина — ЧКПЗ
  • 8, 19. ПКиО — Копейское шоссе — ЧКПЗ (в восьмидесятые так ходил 18-й троллейбус)
  • 8. ЧКПЗ — Копейское шоссе — улица Гагарина — ЧКПЗ (а так ходил 20-й)
  • 8. ПКиО — улица Сони Кривой —Дворец спорта «Юность» — Троллейбусное депо № 2
  • 10. Улица Молдавская — Солнечный берег
  • 10, 26. Улица Молдавская — Копейское шоссе — ЧКПЗ
  • 10. Улица Молдавская — улица Гагарина — ЧКПЗ
  • 10. Солнечный берег — улица Новороссийская — ЧКПЗ (маршрут 4 в 2002 году)
  • 11. ЧТЗ — АМЗ
  • 12. АМЗ — улица Молдавская
  • 14. ЧМК — улица Братьев Кашириных — ПКиО
  • 14. ПКиО — улица Братьев Кашириных — улица Молдавская (почти как 13-й маршрут до 1997 года, только от ПКиО идёт по проспекту Ленина, а не по улице Сони Кривой)
  • 14, 17. Улица Молдавская — улица Братьев Кашириных (внутри Северо-Запада)
  • 14, 15. ЧМК — ДК «Строитель» (внутри ЧМЗ)
  • 14, 15. ЧМК — Братьев Кашириных (четырнадцатый так ходил в 1994–2004)
  • 14. ПКиО — проспект Ленина — Дворец спорта «Юность» — Троллейбусное депо № 2
  • 14. Троллейбусное депо № 2 — Алое поле — улица Братьев Кашириных — ЧМК
  • 14. Улица Братьев Кашириных — ПКиО (часть нынешнего 14-го, в 1997–2012 так ходил 13-й)
  • 15. ЧМК — улица Молдавская
  • 16. АМЗ — ЖБИ
  • 17. Вокзал — улица Молдавская
  • 17. Улица Молдавская — Алое поле (он так ходил в 1995–2001, а до этого — почти так же, только оборачивался не по Труда → Свердловскому → Ленина → Энгельса, а против часовой стрелки: по Коммуны → Энгельса → Сони Кривой, да и шёл по Комсомольскому и Свердловскому проспектам, а не по улице Братьев Кашириных)
  • 17. Троллейбусное депо № 2 — улица Братьев Кашириных — Вокзал
  • 17, 26. Троллейбусное депо № 2 — Алое поле — улица Братьев Кашириных — улица Молдавская
  • 19. ПКиО — Первоозёрный — ТЭЦ-3
  • 19. ПКиО — Первоозёрный (обычный 19-й, как он ходил до этого мая)
  • 19. ПКиО — Солнечный берег (как 10-й в 1997–2013) — а нет, рейсов-то ноль
  • 19. Первоозёрный — ТЭЦ-3 — и тут ноль рейсов
  • 19, 26. ЧКПЗ — Копейское шоссе — Первоозёрный (14 утренних рейсов в рабочие дни и пять — в выходные, но только в одну сторону, потому что с театра ЧТЗ на КБС на троллейбусе не повернёшь)
  • 26. Улица Молдавская — улица Чичерина — Первоозёрный
  • 27. Улица Молдавская — улица Чичерина — ПКиО
  • 27. Улица Братьев Кашириных — улица Молодогвардейцев — улица Чичерина — ПКиО

Итого — почти сорок троллейбусных маршрутов с диким бардаком в нумерации.

С трамваями такая же фигня, особенно с теми, что ходят по Металлургическому району. Но это — тема отдельного поста.

Карта планируемых челябинских платных парковок

Блогер Ведмед1969 краевед-фотограф-энергетик Константин Севостьянов подкинул ссылку на постановление Администрации г. Челябинска № 452-п «О создании и использовании на платной основе парковок (парковочных мест), расположенных на автомобильных дорогах общего пользования местного значения города Челябинска, и о прекращении такого использования» — там перечислен список улиц и площадей, где будут платные парковки.

Я нанёс их на карту:

Карта будущих челябинских парковок

Про сопутствующее развитие общественного транспорта или велопарковок там ничего не сказано.

Много Тере́нкулей

Среди топонимов есть популярные. Одних только деревень с именем Александровка иль Фёдоровка — в любой области найдётся не одна. На Южном Урале — то же самое, да ещё и с озёрами. Вот, например, услышали вы — озеро Кисега́ч — о каком озере подумали? О Большом Кисегаче, что в Чебаркульском районе? Мне, например, известно пять Кисегачей в Челябинской области: в трёх купался, ещё один видел с дороги, да соседний с ним — на карте.

Озёр под названием Тере́нкуль — тоже много. Решил подсчитать, сколько же их в Челябинской области.

Большой Теренкуль на карте OSM

В одном лишь Чебаркульском районе — Теренкуль южнее Большого Кисегача и Большой Теренкуль — севернее Малого Сунукуля. Возле Новоандреевки — Терень-Куль (это уже на границе Аргаяшского района и Карабашского городского округа). А ещё есть Теренкуль в Октябрьском районе возле дороги из Октябрьского в Троицк. И в Красноармейском (восточне Бродокалмака). И возле Кыштыма — на одном из северных въездов. И на границе Аргаяшского и Сосновского районов — восточнее озера Курги. И в Снежинском городском округе — южнее озера Иткуль. И возле Увильдов на границе Аргаяшского района с Кыштымским городским округом. И в Каслинском районе возле поворота со свердловской дороги на Большой Куяш и Озёрск.

Сколько получилось? Десять?

Османд на большом планшете

Попробовал использовать свежий OsmAnd на купленном перед отпуском десятидюймовом планшете. Вывод — использовать можно.

А теперь — подробности:

  1. Несмотря на немаленький размер планшета — около 16×26  см — он достаточно хорошо помещается в моём холодильнике автомобиле.
  2. Так как планшет в отличие от навигатора — штука универсальная, на нём можно при необходимости и загуглить что-нибудь, и мультики детям показать. Хотя мультики водителя слегка отвлекают.
  3. Новый Османд, дико тормозивший на телефоне, на планшете работает достаточно резво: если и затормаживается до состояния, что Андроид предагает снять задачу, то это происходит не каждый день.
  4. После одного из последних обновлений Османд наконец-то в местах, требующих особого внимания, при выбранном русском языке озвучивания (точнее, RU-TTS — русский через синтезатор речи) стал говорить не просто одно слово «Внимание!», но и указывать, что же ждёт впереди — например, камера или пешеходный переход.
  5. Работающий в других местах способ снятия скриншотов — долго нажать центральную кнопку Home (теперь там кружок) в Османде работает не всегда.
  6. Офлайновая маршрутизация испортилась — за городом Османд норовит всё согнать меня с трассы, ведёт в города и деревни:

 

Автомобильный видеорегистратор для записи GPS-треков

Перед отпуском приобрёл видеорегистратор Mystery MDR-970HDG — помимо записи в видеофайл того, что находится перед его объективом, он может определять своё положение по GPS-спутникам. В инструкции описано, как смотреть получившиеся файлы специальным видеоплеером (под Windows, разумеется), который должен показывать помимо картинки и место, где она была снята, но это — не наш метод. Нам нужен трек!

Расковыривание собранных данных показало:

1. В качестве контейнера для видеороликов используется QuickTime — каталог DCIM/100MEDIA заполнен файлами FILE№№№№.MOV, кодек для видео — H.264. Для преобразования в MP4 можно применять FFMPEG:

ffmpeg -i FILE0123.MOV  -f mp4 -vcodec copy -acodec copy 0123.mp4

2. Геоданные хранятся в текстовом виде — нет нужды ковырять видеофайлы в надежде извлечь координаты оттуда. С одной стороны, на карте памяти есть каталог GPSLog, в который сваливаются файлы с именами вида YYYYmmdd_HHMMSS.log, каждый их которых — текстовый, по строке на точку, поля разделены символами табуляции:

2017-07-27 19:07:46	N56.254678	E59.273161	313.4	38.72	345

Можно легко догадаться, что за поля здесь представлены — это время, широта, долгота, высота над уровнем моря в местах, скорость в километрах в час и курс в градусах. Так как регистратор смотрит вперёд, то курс можно считать совпадающим с направлением взгляда — этот параметр как только не называют: то Heading, то Bearing, то ImgDirection.

Есть и другое место — в DCIM/INFO для каждого видеофрагмента можно найти соответствующий файл FILE№№№№.dat, также являющийся текстовым с полями, разделёнными символом табуляции. Там тоже можно найти координаты:

[S]	0	0	0
[S]	0	0	0
[S]	0	0	0
[S]	0	0	0
[S]	0	0	0
[S]	0	0	0
[S]	0	0	0
[S]	0	0	0
[S]	0	0	0
[G]	2017-07-20 18:41:10	N56.740461	E60.735576	38	222

Похоже, строки, начинающиеся с [S], отписывают кадры, а те, в первом поле которых стоит [G] — геоданные. В таких файлах нет данных о высоте, да и скорость округлена до целого.

3. Эксперименты по скармливанию файлов GPSLog/*.log ГПСБабелю ничего не дали: среди различных текстовых форматов, которые знает GPSBabel, не нашлось подходящего. Пришлось по-быстрому написать свой конвертер и выложить на GitHub, чтоб не забыть довести до ума — там надо бы с часовыми поясами разобраться.

4. Трек за городом пишется весьма точно — куда лучше, чем телефоном. Например, на этой картинке (здесь трек наложен на карту OpenStreetMap) видно, и что трек идёт по дорогам, и что часть пути прошла по встречной проезжей части (своя закрыта на ремонт)

Трек по подъезду к Екатеринбургу

А вот в городе всё не так хорошо — треки иногда на сотни метров сдвинуты во дворы

Трек по Челябинску

Вывод: видеорегистратор Mystery MDR-970HDG вполне можно использовать в качестве GPS-логгера, но треки, добытые в условиях плотной городской застройки, надо фильтровать.

Красим школы и стоянки

В прошлых сериях экспериментов с ТайлМиллом доводилось раскрашивать находящиеся в университетском городке здания и добавлять номера домов. Теперь попробуем раскрасить какую-нибудь территорию, да и здания можно перекрасить как-нибудь иначе. Заодно и повод подвернулся: авторы сайта mapstr.ru решили поменять самодельную карту Стерлитамака на OpenStreetMap — там город неплохо отрисован (хотя, конечно, есть ещё, что улучшать), им в целом нравится стиль, которым отрисована карта окрестностей нашего университета, но им хочется, чтоб было как в ДубльГИСе — чтоб стоянки, дворы и частный сектор были залиты разными цветами. Ну и школы с детсадами хочется выделить цветом.

Делаем так:

1. Перед импортом данных OSM в PostGIS в файле imposm-mapping.py указываем, что нам нужно предназначение здания, а относится ли оно к университету, нас не интересует:

buildings = Polygons(
    name = 'buildings',
    fields = (
        ('area', PseudoArea()),
        ('addr:housenumber',String()),
        ('building:levels',Integer()),
        ('height',Integer()),
        ('amenity',String()),
    ),
    mapping = {
        'building': (
            '__any__',
        ),
        'railway': (
            'station',
        ),
        'aeroway': (
            'terminal',
        ),
    }
)

там же указываем, что у территорий нас интересует тэг residential — его значение rural можно использовать для обозначения деревенских жилых территорий.

landusages = Polygons(
    name = 'landusages',
    fields = (
        ('area', PseudoArea()),
        ('residential', String()),
        ('z_order', ZOrder([
            'pedestrian',
             ...

2. Импортируем данные.

3. Запускаем TileMill, выбираем нужный проект, идём в свойства слоёв, путём редактирования фрагмента SQL-запроса добавляем поля:

  • amenity — к слою #buildings
  • residential — к слоям #landuse, #landuse_gen0, #landuse_gen1

4. Исправляем стилевые правила:

В базовом файле base.mss указываем необходимость особенной заливки частного сектора

#landuse[zoom>12] {
  [type='allotments']    { polygon-fill: @agriculture; }
  // ...
  [type='residential']   {
    polygon-fill: @residential;

    [residential='rural']   {
      polygon-fill: @rural;
    }
  }
}

а также зданий образовательных учреждений: детских садов, школ, ПТУ/техникумов/колледжей и институтов/академий/университетов:

// At the highest zoom levels, render buildings in fancy pseudo-3D.
// Ordering polygons by their Y-position is necessary for this effect
// so we use a separate layer that does this for us.
    [type != 'hedge'] {
     building-fill: @building;
     building-height: 2 + [building:levels] * 2;
     [height>0] {
       building-height: 2 + [height] / 1.5;
     }

      // Our buildings
      [amenity = 'kindergarten'] {
        building-fill: @kindergarten_building;
        line-color:darken(@kindergarten_building,10%);
      }

      [amenity = 'school'] {
        building-fill: @school_building;
        line-color:darken(@school_building,10%);
      }

      [amenity = 'college'] {
        building-fill: @college_building;
        line-color:darken(@college_building,10%);
      }
      [amenity = 'university'] {
        building-fill: @university_building;
        line-color:darken(@university_building,10%);
      }
    }

    [type = 'hedge'] {
      building-fill:@wooded;
      building-height:1.25;
    }
  }
}

добавляем цвета в палитру palette.mss

@residential:       #e9e1cd;
@rural:             #ece2b5;
@commercial:        #e7e0f4;
@industrial:        #eeeeee;
@parking:           #e5eaf0;

/* Buildings */
@building:          #bbaa99;
@educational_mix:   #0099ff;

@kindergarten_building: mix(@building, @educational_mix, 90%);
@school_building:       mix(@building, @educational_mix, 85%);
@college_building:      mix(@building, @educational_mix, 80%);
@university_building:   mix(@building, @educational_mix, 75%);

Результат — на http://mapstr.ru/map/

Фрагмент карты Стерлитамака

Рельеф и дороги

Недавняя запись в ЖЖ-сообществе «Челябинский Челябинск» напомнила, что хотел я как-то собрать рельеф с дорогами на одной карте. Хотел — сделал.

Рельеф и дороги Челябинска

Сделано при помощи Maperitive — он кроссплатформенный (хоть и выглядит по-виндовому), написан на питоне, падает часто. Делаем так:

1. Масштабируем карту, чтоб захватить нужную область.

2. Генерируем фон, с цветом, зависящим от высоты. Если запустить генерацию без дополнительных параметров, то всё зальёт зелёным без заметного контраста, поэтому надо указать свои цвета:

generate-hypsometric ramps=-200:#003399;200:#33cc66;250:#eeee99;350:#993300

Что даст шкалу, где наиболее заметный контраст приходится на высоты от 200 до 350 метров над уровнем моря
Шкала рельефа

3. Для красоты добавляем отмывку: Tools → Generate Hillshading. В меню три подобных пункта — можно выбрать тот, чьи результаты больше нравятся. Если хочется большего контраста, добавлени слоя с отмывкой можно повторить.

4. Скачиваем данные OpenStreetMap для выбранной области: Map → Download Data (Overpass API) Ctrl+Shift+D

5. Создаём стилевой файл с дорогами и границами, но без всего остального, например, такой:

// rendering rules for Maperitive - roads and boundaries
// http://maperitive.net

// Created by Alexander Sapozhnikov, based on style by Igor Brejc
// Released under the Creative Commons Attribution-ShareAlike 3.0 License (http://creativecommons.org/licenses/by-sa/3.0/)

features
	lines
		road major : highway=motorway OR highway=trunk OR highway=primary
		road minor : highway=motorway_link OR highway=trunk_link OR highway=primary_link OR highway=secondary
		boundary country   : relation[type=boundary AND boundary=administrative AND admin_level=2]
		boundary region    : relation[type=boundary AND boundary=administrative AND admin_level=4]
		boundary province  : relation[type=boundary AND boundary=administrative AND admin_level=6]
		boundary municipal : relation[type=boundary AND boundary=administrative AND admin_level=7]

properties
	map-background-color	: #F1EEE8
	map-background-opacity	: 1
	map-sea-color : #B5D0D0
	map.rendering.lflp.min-buffer-space : 5
	map.rendering.lflp.max-allowed-corner-angle : 40

rules

	target : road*
		if : road major
			define
				line-color : #ff9900
				line-width : 2
				border-width : 10%
				border-color : #000000
				border-style : solid
		elseif : road minor
			define
				line-color : #cc6600
				line-width : 1
		draw : line

	target : boundary*
		define
			line-color : #cc3399
			line-style : dash
		if : boundary country
			define
				line-width : 5
		elseif : boundary region
			define
				line-width : 4
		elseif : boundary province
			define
				line-width : 2
		elseif : boundary municipal
			define
				line-width : 1
		draw : line

6. Выбираем этот стиль:

use-ruleset location="/home/as/map/osm/maperitive/rules/road.mrules"

7. Получившуюся карту экспортируем в желаемый формат — см. меню Tools.

Пробую ориентироваться по Maps.me

Поставил на телефон Maps.me — для сравнения. Теперь у меня на одном телефоне аж пять карт: кроме Мэпс.ми это OsmAnd (как и Мэпс.ми, на OpenStreetMap, хотя им можно и спутниковые снимки смотреть, и всякие веб-карты), 2GIS (потому что в городе он круче, чем OSM), Яндекс.Навигатор (ради просмотра пробок и прокладки маршрута c ними) и Google Maps (потому что он уже есть — телефон-то ведроидный). Сравниваю, в общем-то, с ОсмАндом — у них хотя бы общая картографическая основа.

Первое ощущение: Мэпс.ми проще и шустрее. Но карта у них какая-то неконтрастная и серая да и, похоже, её внешний вид никак не регулируется.

Карты maps.me на смартфоне CAT B15

Кроме того, подробные карты появляются слишком поздно: на масштабах 1:500000 (в 1 см 5 км) и крупнее. Для Европы или Юго-Восточной Азии это, может быть, и хорошо, но для Урала образуется зазор: начиная с масштаба 1:2000000 (в 1 см 20 км) детализация встроенной грубой карты уже мала: в таком масштабе легко можно сдвинуть карту на такое место, где не будет ни одного отображающегося на карте города, и приходится либо карту приближать, в надежде случайно попасть в нужное место, либо отодвигать, чтобы понять, где вообще ты находишься. Получается, авторам приложения надо сдвинуть границу переключения карт: либо для всех регионов разом, либо с учётом плотности имеющихся картографических данных.

Следующий этап — тестирование навигации: в Мэпс.ми есть два варианта прокладки маршрута: для автомобиля и для пешехода. Плюс — голосовые подсказки. Попробую проверить в ближайшие дни.