RU:Kosmos Rendering Help

From OpenStreetMap Wiki
Jump to navigation Jump to search

broom

Help (89606) - The Noun Project.svg

Одной из самых интересных возможностей движка рендеринга Kosmos является возможность, позволяющая пользователям определять, как должна рендериться карта, описывая эти определения на Вики страницах OpenStreetMap. Один из примеров такой страницы - Kosmos General Purpose Rules, которая содержит правила для рендеринга стандартных карт.

Kosmos будет автоматически скачивать страницу с правилами и парсить её. Идея в том, чтобы "демократизировать" рендеринг данных OSM, предоставляя механизм Вики, чтобы пользователи OSM могли публиковать свои правила рендеринга. Также, здесь могут быть страницы, содержащие различные наборы правил для различных типов карт - городские карты, туристические карты, автомобильные карты и т.д. Там даже можно разделять страницы правил на карты для отображения на экране и карты для печати.

Вы также можете сохранять исходный код вики страницы с правилами рендеринга в файл, и использовать этот файл в Kosmos, не подключаясь к интернет (смотрите FAQ).

Если у вас есть вопросы по поводу использования правил рендеринга, возможно вам поможет Kosmos FAQ.

Таблицы правил

Правила должны быть оформлены в одну или более таблицу, как это показано на страницах KosmosStandardRules и Kosmos General Purpose Rules. Kosmos игнорирует всё, что лежит за пределами таблиц, это можно использовать для комментариев или раздалания вики страницы на несколько секций (что крайне рекомендуется, так вы сможете редактировать части списка правил по отдельности).

Одна строка таблицы описывает одно правило:

Имя правила Цели Селектор Шаблон Опции Комментарии
RestaurantNode точка amenity=restaurant Icon (MinZoom=13, IconUrl=http://wiki.openstreetmap.org/images/5/58/Restaurant.png, Width=12:5;17:20)
Text (MinZoom=15, Color=black, TagToUse=name, FontName=Arial, FontStyle=regular, FontSize=15:5;17:9, TextLineOffset=-200%)
Restaurant.png

столбцы таблицы:

  • Имя правила: некторая уникальная идентифицируемая строка
  • Цели: указывает Kosmos типы объектов OSM к которым должно применяться правило. Вы должны использовать шаблоны OSM IconNode, IconWay, IconArea и IconRelation, пример:
    {{IconWay}}
    указывает Kosmos, что привило применяется только к линиям.
  • Селектор: указывает Kosmos какие конкретно элементы учитываются данным правилом. Смотрите #Селекторы элементов для дополнительной информации.
  • Шаблон: указывает Kosmos каким будет графическое представление соответствующего элемента. Смотрите #Шаблоны для дополнительной информации.
  • Опции: дополнительные опции рендеринга (не обязательны)
  • Комментарии: человекочитаемый комментарий к правилу, игнорируется Kosmos (не обязательны)

Дочерние правила

Давая правилу имя с точкой и звёздочкой, вы объявляете дочернее правило для родительского правила (родительским является первое недочернее правило, стоящее выше в таблице). Пример:

HighwaySecondary линия highway=secondary Text (MinZoom=15, Color=black, TagToUse=name, FontName=Arial, FontStyle=regular, FontSize=15:6;17:9) ChildrenFirst
.Bridge bridge=yes Polyline (MinZoom=8, Color=#FDBF6F, BorderColor=gray, BorderWidth=30%, Width=8:1;10:2;13:6;17:14)
.* Polyline (MinZoom=8, Color=#FDBF6F, BorderColor=gray, Width=8:1;10:2;13:6;17:14)

Что всё это значит? Мы определили, что имена всех линий, отмеченных как highway=secondary, будет отрендерены как текст. Также, все такие линии, представляющие мосты, будут отрисованы полилиниями с утолщённой обводкой. Все иные линии (не мосты) будут отрисованы с обводкой нормальной ширины.

Дочерние правила соревнуются за право быть использованными. Для рендеринга OSM элемента будет использовано первое дочернее правило, селектор которого соответствует критерию. Остальные дочерние правила (в рамках родительского) после этого будут проигнорированы для данного OSM элемента.

Дочернее правило, названное как .* представляет особый случай (называемый стандартное дочернее правило), которое используется для всех OSM элементов, для которых не найдено подходящее дочернее правило. Вы можете не указывать это стандартное дочернее правило. Но если указываете, следите за тем, чтобы оно было последним в списке.

Kosmos игнорирует Цели и Опции, заданные для дочерних правил.

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

Селекторы элементов

Доступны два типа селекторов:

  • Шаблон тега вики OSM (имя_тега=* или имя_тега=значение_тега): выбирает все элементы OSM, которые обозначены тегом имя_тега. имя_тега=* будет выбирать элементы с указанным тегом, не зависимо от его значения, в то время как имя_тега=значение_тега будет выбирать элементы с указанным значением данного тега. Пример:
    {{tag|highway}}
    или
    {{tag|natural|coastline}}

Возможно указывать более одного тега для каждого правила. В таком случае, лишь элементы, имеющие все указанные теги, будут соответствовать критерию. К примеру:

{{tag|amenity|restaurant}} {{tag|cuisine|chinese}} {{tag|name|Hot Rat}}

выберет все китайские рестораны с именем 'Hot Rat' (это не значит, что я не знаю других ;) ).

  • Комплексное выражение: используется для более сложных запросов. Пример:
    IsTaggedWith(e,"ele") AND ValueNum(e,"ele") % 100 = 0
    выберет все элементы OSM, имиющие тег ele значение которого делится на 100 (это используется для рендеринга основных контуров рельефа, генерируемых инструментом Srtm2Osm).

Синтаксис комплексных выражений

NOTE: комплекные выражения на данный момент являются экспериментальной функцией. Синтаксис, описанный ниже, вероятно будет изменён в ближайшем будущем (он будет упрощён). Также, я попытаюсь сделать расчет выражений менее ресурсоёмким.

В данный момент Kosmos использует Flee library для вычисления комплексных выражений. Чтобы увидеть все доступные операторы, пройдите по ссылке.

Kosmos предлагает три специальные функции для использования в комплексных выражениях:

  1. IsTaggedWith (e,"ключ"): возвращает true если элемент (точка, линия, полигон) имеет тег, использующий указанный ключ ; иначе - false.
  2. ValueNum (e,"тег"): возвращает числовое значение тега тег
  3. ValueString (e,"тег"): возвращает строковое значение тега тег

Убедитесь, что прочитали #О производительности рассматривающее использование комплексных выражений.

Шаблоны

Шаблоны Kosmos описывают графическое представление элементов OSM на карте. В данный момент можно использовать следующие шаблоны:

  • Polyline: рисует полилинию
  • Polygon: рисует замкнутый полигон
  • Text: рисует текст
  • Symbol: рисует простой символ или ряд символов вдоль полилинии.
  • Icon: рисует значок

Each rule can have one or more templates (the example above uses two). Each template has to be its own line, example: Каждое правило можетиметь один и более шаблонов (пример ниже использует два). Каждый шаблон пишется в одну строку, пример:

Имя правила Цели Селектор Шаблон Опции Комментарии
RestaurantNode точка amenity=restaurant Icon (MinZoom=13, IconUrl=http://wiki.openstreetmap.org/images/5/58/Restaurant.png, Width=12:5;17:20)
Text (MinZoom=15, Color=black, TagToUse=name, FontName=Arial, FontStyle=regular, FontSize=15:5;17:9, TextLineOffset=-200%)
Restaurant.png

Каждый шаблон имеет ассоциированные параметры. Некоторые параметры доступны для всех типов шаблонов, а иные подходят только для определённых шаблонов.

Стандартные параметры

  • MinZoom: минимальный зум, с которого элемент с данным с шаблоном будет отображаться (по умолчанию: unlimited)
  • MaxZoom: максимальный зум, с которого элемент с данным с шаблоном будет отображаться (по умолчанию: unlimited)
  • Color: базовый цвет шаблона. Цвета должны быть указаны в стиле HTML, примеры: #FEADB8, white
  • Options: специфические опции рендеринга для данного шаблона. В данный момент поддерживается только одна опция: TopLevel (смотрите Kosmos Layering для дополнительной информации об этой опции).

Параметры шаблона полилинии

  • Width: ширина полилинии, указывается как значение зум фактора (обязательно)
  • DashStyle: если указан, полилиния будет нарисована с указанным типом пунктира
  • LineStartCap: если указан, полилиния будет нарисована с указанной формой начала
  • LineEndCap: если указан, полилиния будет нарисована с указанной формой окончания
  • BorderColor: если указан, полилиния будет нарисована в стиле highway, с обводкой
  • BorderWidth: ширина обводки, указывается в процентах от Width, по умолчанию 10%
  • BorderDashStyle: если указан, обводка полилинии будет нарисована с указанным типом пунктира

Параметры шаблона полигона

  • BorderColor: если указан, у полигона будут нарисованы границы
  • BorderWidth: ширина границ полигона, указывается как значение зум фактора
  • BorderDashStyle: если указан, полилиния границ будет нарисована с указанным типом пунктира
  • HatchStyle: если указан, полигон будет заштрихован в указанном стиле
  • BackgroundColor: фоновый (второй) цвет штриховки

Параметры шаблона текста

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

  • TextMode: каким образом будет рендериться текст. Возможные значения:
    • Node: текст будет центрирован относительно ассоциированной точки. Этот режим может быть использован только в правилах, где в качестве цели указана точка. Это стандартное значение, так что указывать не обязательно.
    • AlongWay: текст будет отображён вдоль ассоциированной линии. Этот режим может быть использован только в правилах, где в качестве цели указана линия или полигон. Это стандартное значение, так что указывать не обязательно.
    • AreaCenter: текст будет отображён в центре ассоциированного полигона. Этот режим может быть использован только в правилах, где в качестве цели указан полигон.
    • WayCenter: (новое в v2.1) текст будет отображён (приблизительно) в центре линии. Этот режим может быть использован только в правилах, где в качестве цели указана линия.
  • TagToUse: имя тега элемента OSM, чьё значение будет использовано в качестве текста для отображения. Вы можете указать несколько тегов, разделённых точкой с запятой (;). Kosmos использует первый найденный тег. Пример: TagToUse=nat_name;name укажет национальное имя объекта OSM. Если национальное имя не существует, будет использовано стандартное имя.
  • FontName: имя шрифта текста
  • FontStyle: стиль шрифта. Может иметь одно из следующих значений: Bold, Italic, Regular, Strikeout, Underline. Если не указан, используется "Regular"
  • FontSize: the size of the font
  • TextLineOffset: указывает вертикальное смещение строки в процентах от размера шрифта. Смещение рассчитывается относительно позиции соответствующей OSM точки. Отрицательное смещение двигает текст ниже исходной позиции точки. Параметр используется в режимах текста Node, AreaCenter и WayCenter (начиная с версии 2.3).
  • BorderWidth: ширина рамки вокруг текста, указывается в пикселях. Если не указан, рамка не отобразится.
  • BackgroundColor: цвет фона текста.
  • OutlineColor: (новое в v2.1) цвет обводки текста. Если не указан, текст будет без обводки.
  • OutlineWidth: (новое в v2.1) ширина обводки текста, вводится в процентах от высоты шрифта.

Параметры шаблона символа

  • Type: Тип символа. Может иметь одно из следующих значений: Square, Circle, Triangle, Diamond
  • Size: размер символа, указывается как значение зум фактора
  • BorderColor: елси указан, у символа будет обводка
  • BorderWidth: ширина обводки символа, указывается в процентах от Width
  • BorderDashStyle: если указан, обводка символа будет нарисована с указанным типом пунктира
  • HatchStyle: если указан, символ будет заштрихован указанным стилем
  • BackgroundColor: фонвый (второй) цвет штриховки
  • Density: когда Symbol применяется к линиям или полигонам, плотность определяет пространство между символами вдоль полилинии. Указывается как значение зум фактора.

Параметры шаблона значка

NOTE: Начиная с версии 2.3, шаблон значка может быть использован для точек и полигонов.

  • IconUrl: URL значка
  • Width: ширина значка, указывается как значение зум фактора (обязательно)
  • HAlign и VAlign: указывает горизонтальное и вертикальное выравнивание значка. Могут иметь одно из следующих значений: Center, Near, Far. Значки центрируются по умолчанию

Использование цветов

Цвета могут быть указаны как имена цветов HTML, примеры: "black", "white", "red", "#00FF00". Также, Kosmos поддерживает схему ARGB, благодаря которой вы можете указывать альфа значение цвета. Это может пригодиться, если вы захотите использовать эффект прозрачности. Пример: цвет "#80FFFF00" означает полупрозрачный жёлтый. Чем ниже значение альфа, тем выше прозрачность.

Зум фактор

Значение зум фактора позволяет вам указать, как данное свойство будет изменяться в соответствии с уровнем зума. По сути, вы указываете значение свойства для определённых уровней зума, а остальные значения Kosmos рассчитывает (интерполирует), базируясь на тех значениях, что вы указали. Пример:

Width=1:1;9:1.5;17:6

означает, что ширина, используемая в шаблоне будет 1 пиксел для уровня зума 1, 1.5 пиксела на уровне 9 и 6 пикселов на уровне 17. Все промежуточные уровни будут интерполированы. К примеру, на уровне 12 ширина будет 3.1875

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

Стили пунктиров

В данный момент поддерживаются следующие значения:

  • Solid, _________
  • Dash, - - - - -
  • Dot, . . . . .
  • DashDot -.-.-.- and
  • DashDotDot. -..-..-..-

Пример:

DashStyle=Dash

Смотрите [1] для примеров.

Окончания линий

Пример:

LineEndCap=Round, LineStartCap=Round

Смотрите [2] для списка всех стилей окончания.

Стили штриховки

Примеры и поддерживаемые значения [3]. -LastGrape/Gregory (LwD)

Опции ренеринга

Дополнительные опции могут изменить работу шаблона. В данный момент доступна только одна опция: EliminateSeams (Удалить швы).

Две линии нарисованы без опции EliminateSeams
Две линии нарисованы с опцией EliminateSeams
Две линии нарисованы с опцией EliminateSeams и Curved=true

EliminateSeams можно использовать в шаблоне полилинии. Если эта опция установлена, Kosmos попытается соединить все линии одного типа перед тем, как отобразить их на экране. Таким образом, швы будут удалены.

Однако, это работает только с линиями, нарисованными в одном стиле рендеринга. Также, удаление швов исключает использование опции Curved=true для линий, так как результат такой комбинации может быть страшен. На рисунке показано, как вместо двух линий отобразилось три.

Разумеется, в будущем алгоритм удаления швов будет улучшен.

Уровни в Kosmos

Kosmos рисует элементы OSM в определённом порядке. Этот порядок определяет, какой элемент будет находится над остальными элементами. Элементы, нарисованные первыми, могут быть частично или полностью закрыты другими элементами. Подробнее об этом в Kosmos Layering.

О производительности

Движок Kosmos будет рисовать быстро, насколько это возможно, если вы будете избегать некоторых вещей, особенно при обработке больших объемов данных OSM:

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

Ограничения

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

Ограничения таковы:

  • Текстовый шаблон рендерит не более 32 символов вдоль полилинии.

Предстоит доделать:

  • Рендеринг односторонних улиц
  • Тупиковые улицы не рисуются закрытыми

Ссылки