Стили карты

В MapKit можно менять внешний вид как всей отображаемой карты, так и отдельных слоев. Стилизация карты задается в формате JSON-массива, содержащего объекты, каждый из которых задает один стиль. Каждый стиль может применяться к одному или нескольким объектам.

  1. Формат JSON-массива
  2. Список тегов
  3. Как применить стиль карты

Формат JSON-массива

[{
    "tags": {
        "all": ["string", "string", ...],
        "any": ["string", "string", ...],
        "none": ["string", "string", ...]
    },
    "types": ["string", "string", ...],
    "elements": ["string", "string", ...],
    "stylers": {
        "zoom": [integer, integer],
        "visibility": "string",
        "hue": "string",
        "saturation": double,
        "lightness": double,
        "color": "string",
        "opacity": double,
        "scale": double
    }
}]
tags
Теги, определяющие подмножество объектов, к которым применяется стилизация. Список тегов для объектов подложки указан ниже. Если поле отсутствует, стили применяются ко всем объектам. Если указан неизвестный тег, стили не применяются.
all
У объекта должны присутствовать все указанные теги.
any
У объекта должен быть хотя бы один из указанных тегов.
none
У объекта не должно быть указанных тегов.
types
Типы объектов, к которым применяется стилизация. Если поле отсутствует, стили применяются ко всем типам объектов. Можно задать только один элемент вместо массива. Возможные значения:
  • point — точки, например автобусные остановки или точки интереса;
  • polyline — линии, например дороги или границы;
  • polygon — многоугольники, например парки или озера.
elements
Элементы объекта, у которого будут меняться свойства отображения. Если поле отсутствует, стилизация применяется ко всем элементам. Можно задать только один элемент вместо массива. Возможные значения:
  • geometry —геометрические элементы объекта;
    • geometry.fill — внутренняя область (заливка) геометрических элементов объекта;
      • geometry.fill.pattern — картинка, которой мостится внутренняя область полигона или полилинии;
    • geometry.outline — обводка геометрических элементов объекта;
  • label — все элементы подписи объекта;
    • label.icon — иконка объекта;
    • label.text — текст подписи объекта;
      • label.text.fill — заливка текста подписи объекта;
      • label.text.outline — обводка текста подписи объекта.
stylers
Один или несколько стилей, которые применятся к объектам. Стили применяются в указанном порядке.
zoom
Ограничивает применение стилей диапазоном масштабов. Можно указать одно значение или диапазон значений от меньшего к большему. Для применения стилей дробные значения масштаба округляются к ближайшему целому.
visibility
Задает видимость объекта. Возможное значение: off.
hue

Меняет цветовой тон объекта на карте. Задается базовым цветом в формате #RRGGBB. При базовом цвете с неопределенным тоном (белом, сером или черном) цвет объекта не изменяется.

saturation

Меняет насыщенность цветов на карте. Возможные значения: от -1 до 1. При -1 все цвета превращаются в оттенки серого, при 1 картинка приобретает очень высокую насыщенность цвета.

lightness

Меняет яркость цветов на карте. Возможные значения: от -1 до 1. При -1 объект становится черным, при 1 — белым.

color
Меняет цвет объекта. Поддерживаются следующие форматы:
  • Строка с hex-кодом цвета, например: #RGB, #RRGGBB, 0xRGB, 0xRRGGBB, RGB, RRGGBB.
  • Строка с hex-кодом цвета и альфа-каналом, например: #RGBA, #RRGGBBAA, 0xRGBA, 0xRRGGBBAA, RGBA, RRGGBBAA.
opacity
Меняет относительную прозрачность объекта. Если в поле color задан альфа-канал, значение opacity умножается на него.
scale
Меняет масштаб объекта. Размер объекта умножается на scale. Не применяется к selected-иконке.

Список тегов

Теги объектов зависят слоя карты, для которого применяются стили. Ниже перечислены теги, с помощью которых можно менять подложку карты.

  • road — автомобильные дороги;
    • road_N — автомобильные дороги важности N, где N — значение от 1 до 7;
    • road_limited — дороги с ограничением движения автомобильного транспорта, пешеходные зоны;
    • road_unclassified — неклассифицированные дороги, как правило — лесные и полевые;
    • road_minor — внутриквартальные проезды;
    • road_construction — строящиеся дороги;
    • path — дороги, непригодные для проезда автомобилей (тротуары, дорожки в парках, велодорожки);
    • crosswalk — пешеходные и велосипедные переходы;
    • traffic_light — светофоры;
  • water — водные объекты;
  • landscape — объекты ландшафта;
    • land — земная поверхность;
    • landcover — растительность, болота, ледники и другое;
      • vegetation — растительность, включая газоны и внутриквартальную растительность;
    • urban_area — кварталы;
      • residential — жилые кварталы;
  • poi — точки интереса;
    • park — нацпарки, сады, парки;
  • admin — подписи и границы регионов, полигоны населённых пунктов;
    • country — страны;
    • region — области или штаты;
    • locality — населённый пункт;
    • district — городские районы;
    • address — адресные точки;
  • transit — все объекты карты, связанные с общественным транспортом;
    • transit_location — все точки на карте, связанные с общественным транспортом, например станции метро, вокзалы, аэропорты и автобусные остановки;
      • transit_stop — остановки наземного общественного транспорта, где выполняется посадка и высадка пассажиров;
      • transit_entrance — физические входы на станцию метро или выходы из нее;
    • transit_line — проложенные на поверхности линии транспорта, например железнодорожные и трамвайные пути, кабельные линии и другое;
    • transit_schema — схематическое изображение линий общественного транспорта, проложенных под землей, например ветки метро;
    • is_unclassified_transit — другие объекты общественного транспорта, например вокзалы и аэропорты;
  • structure — структуры;
    • building — здания;
      • entrance — входы в здания;
    • fence — заборы;
  • is_tunnel — участок дороги или пути проходит в тоннеле.

Как применить стиль карты

Для применения стилей к карте используйте следующие методы:

  • setMapStyle — для подложки карты.
  • setLayerStyle — для произвольного слоя.
String style = "[" +
            "        {" +
            "            \"types\": \"point\"," +
            "            \"tags\": {" +
            "                \"all\": [" +
            "                    \"poi\"" +
            "                ]" +
            "            }," +
            "            \"stylers\": {" +
            "                \"color\": \"f00\"" +
            "            }" +
            "        }" +
            "    ]";
mapView.getMap().setMapStyle(style);