OsmAnd: стили отображения карт

Наваял NightRS2 - зависимый от LightRS стиль. Теперь изменения в LightRS должны наследоваться моим стилем (в пределах совместимости), не знаю как они уживутся в будущем.
Стиль выглядит примерно так же, как и старый, но кое-что я поменял.
я предполагаю, что используется масштаб карты 100%, масштаб текста 100%, непроезжие дороги отключены, настройка “более подробно” отключена. Так лучше всего, на мой взгляд.

Несколько недоработок:

  1. Я хотел убрать шильдики с номерами дорог, но что-то не проканало.
  2. Трамвайные линии под дорогами, а не над ними. Пока думаю над этим.
  3. Почему-то иногда мигают цвета, например в дневном режиме при некоторых масштабах фон окрашивается в белый, а иногда в нужный цвет. Я думаю это конфликт стилей, программа не успевает обрабатывать их вместе.
  4. Некоторые объекты не согласуются со стилем, так как их обозначение не описано в моем стиле, но они есть в LightRS. В своем городе я прописал все основные, но в других городах могут быть свои теги.

В планах: сократить код и повысить совместимости с LightRS (в некоторых местах есть лишний код и костыли), убрать недоработки, отточить цветовую схему.

ссылки в подписи.

картинки день ночь

Вот так

 <case textLength="1" textShield="mot_shield1" order="-1"/>

работать не будет. В order=“-1” не работает, только в , но это не тот случай когда он поможет. Я бы попробовал textShield=“”. А еще лучше - переопределить так:

<case tag="highway" value="motorway" nameTag="ref"/>

nameTag это условие. Если один из nameTags равен ref то … Если не сработает то можно добавить disable=“true” или textSize=“0”.

order в секции

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

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

Не используйте хотя бы для нового кода group, filter и groupFilter. Их заменили switch (с некоторыми изменениями - работает более логично), case и apply (синоним - apply_if).

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

group=switch, filter=case и groupFilter=apply?

Там на зумах 12-14 был жестко задан цвет. Добавил аттрибут: https://github.com/osmandapp/OsmAnd-resources/commit/076a4cebc3e243e462a21fe18e81e79658ee120d. Копируете его в стиль и переопределяете.

Да. Для удобства чтения можно пользоваться apply_if если используется какое-либо условие.

Это из-за цвета natural=land, который начинает появляться на z12…z10.

Да, спасибо за советы, поправил мигающие цвета и убрал шильдики. Еще вопрос есть: можно ли переопределить серый цвет, что на картинке?

Y0!ZiK, я провёл рефакторинг LightRS. Вам нужно поменять константы с цветами дорог motorway-tertiary на renderingAttribute: https://github.com/osmandapp/OsmAnd-resources/blob/master/rendering_styles/LightRS.render.xml#L52
Лучше сделайте репозиторий на github, потому что так гораздо удобнее вести разработку.

Предложения по основному стилю:

  1. При включённой галочке “Линии метро” в настройках карты на высоких зумах не окрашивать коричнывем линии railway=subway, которые не входят ни в один маршрут. На мой взгляд, они только засоряют карту:
    https://onedrive.live.com/redir?resid=A02F9D40E9B3164F!2137&authkey=!ACCLuPGIGdXPEHU&v=3&ithint=photo%2cpng
    https://onedrive.live.com/redir?resid=A02F9D40E9B3164F!2135&authkey=!AENRT8YGRsT9mps&v=3&ithint=photo%2cpng

  2. Сейчас иконки детских площадок (leisure=playground) и спортивных полей (leisure=pitch) начинают рисоваться с 16 зума. Здесь они, я считаю, не нужны, потому что опять-таки засоряют карту. Их бы с 16 на 18 зум перенести.
    https://onedrive.live.com/redir?resid=A02F9D40E9B3164F!2136&authkey=!AF0VLN4SleMqwH0&v=3&ithint=photo%2cpng

Железные дороги после 1.8.3 совсем тусклые, а при параллельной тропке совсем не видно стало одноколейки.

Это если в городе метро правильно затегировано. А вот в Китае например мало что затегировано правильно и если убрать это то вообще непонятно где там метро.

Подумаю, может перенесу на 17-й. На скрине старая версия - в новой у этих значков нет shield.

Скриншот/место?

Тут заметил http://osm.org/go/0t22RiSk-
Может из-за масштаба 50%-ного.
Wetland тоже стало почти не видно черточки, прежние кустики виднее. Пеньки вырубок и прочие сады хорошо.

Если только из-за Китая, то там местным нельзя рисовать карты. Поэтому надеяться на них не стоит и нужно взять и исправить самим.

Согласен, сделал поконтрастнее.

Это тот случай когда на всех не угодишь. Здесь railway=rail + service=spur. Сделал его чуть потемнее.

Можно ли что-нибудь придумать, чтобы использовать tunnel и brigde вместо layer? Последний часто используют как попало и он скорее служит для указания порядка отрисовки. Примеров layer!=0 без тегов мостов и тоннелей сейчас достаточно много.

Вот здесь bridge и tunnel преобразуются в layer.

Добавил в опцию “Отображать веломаршруты” route=bicycle и route=mtb (с раскраской в зависимости от mtb:scale + mtb:scale:uphill).
https://dl.dropboxusercontent.com/u/4624786/osm/Screenshot%20-%20030915%20-%2021%3A45%3A15.png

Однако, странный подход, считаем мостами объекты с layer>0 или с тегом bridge=yes. При этом всё-равно подобные мосты теряются.

Для рендеринга этого достаточно, я считаю. На мой взгляд такое упрощение оправдано. Вот в Голландии слишком много данных получается и надо их как-то обрезать (не в плане разбиения на области, а в плане плотности данных. Тормозит.)

Это недоработка.

Всё-таки слишком много ложных срабатываний, т.к. layer тоже индексируется http://overpass-turbo.eu/s/875 Может лучше при конвертации взять типы мостов, использованные более 200 раз (http://taginfo.openstreetmap.org/keys/bridge#values) и привести к bridge=yes? С тоннелями поступить также.

Но bridge и layer=1 рендерятся одинаково в стандартном стиле и… какая разница пользователю - мост это или просто дорога, идущая по верху? Я bridge преобразую также в man_made=bridge если кому-то это потребуется.