Перейти к основному содержимому

Стили карты

Вы можете изменять внешний вид карты и её объектов с помощью стилей. Стили — это правила, которые определяют в каком порядке и в каком виде отображать данные карты.

Для работы со стилями нужно получить объект фабрики стилей IStyleFactory от центрального объекта SDK Container.

Подключение стиля к карте

Вы можете подключить стили из Редактора стилей к карте, добавленной в мобильное приложение. В Редакторе стилей вы можете детально настраивать отрисовку любых компонентов карты с помощью более 200 стилевых слоёв: см. список готовых слоёв.

Если вы установили проект с помощью xcframework, вы можете использовать стили карты по умолчанию из DGis.xcframework.

Чтобы подключить стиль из Редактора стилей:

  1. Создайте стиль карты и настройте стилевые слои с помощью Редактора стилей: см. инструкцию Создание стилей и настройка стилевых слоёв. Для создания вы можете использовать базовые стили с готовыми слоями.

  2. Экспортируйте стиль: см. инструкцию Подключение стиля для iOS SDK.

  3. Переместите скачанный стиль в проект с мобильным приложением.

  4. Подключите стиль при создании карты:

    // Файл стиля из проекта приложения
    let styleFile = File(path: styleFileURL.standardized.path)

    // Установка стиля в настройках контроллера карты
    let mapControllerOptions = MapControllerOptions(styleFile: styleFile)

    // Создание карты с указанными настройками
    let mapFactory = try sdk.makeMapFactory(options: mapControllerOptions)
    let map = mapFactory.map
  5. Если вы установили проект с помощью xcframework и используете стиль из Редактора стилей в приложении, удалите следующие файлы:

    • DGis.xcframework/ios-arm64/DGis.framework/Assets/ru.dgis.sdk/common-styles.2gis,
    • DGis.xcframework/ios-arm64_x86_64-simulator/DGis.framework/Assets/ru.dgis.sdk/common-styles.2gis.
  6. Если ранее у вас был подключён другой стиль, выпустите новую версию приложения.


Методы loadResource() и loadFile() возвращают отложенное значение (Future), чтобы не задерживать загрузку карты. Если стиль уже загружен, его можно передать в настройки карты:

let mapControllerOptions = MapControllerOptions(style: style)

Изменение стиля карты

Чтобы изменить стиль карты, которая уже добавлена в приложение:

  1. Экспортируйте обновлённый стиль из Редактора стилей: см. инструкцию Подключение стиля для iOS SDK.

  2. Укажите новый стиль в свойстве style объекта Map.

    В отличие от указания стиля при создании карты, style является не отложенным значением Future, а загруженным стилем карты (Style). Установите значение style после завершения загрузки Future:

    // Получение фабрики стилей
    let styleFactory = sdk.styleFactory

    // Загрузка нового стиля карты
    // Метод loadFile() принимает только локальные URL (file://)
    self.cancellable = styleFactory.loadFile(url: styleFileURL).sinkOnMainThread(
    receiveValue: { [map = self.map] style in
    // Изменение стиля карты после загрузки
    map.style = style
    },
    failure: { error in
    print("Не удалось загрузить стиль из файла <\(fileURL)>. Ошибка: \(error)")
    })
  3. Выпустите новую версию приложения.

Переключение темы

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

При создании карты

Вы можете указать темы при создании карты с помощью параметра appearance:

// Установка темы в настройках отображения карты
var mapViewOptions = MapViewOptions.default
mapViewOptions.appearance = .bySystem(.init(light: .defaultTheme, dark: .defaultDarkTheme))

// Создание карты с указанными настройками
let mapFactory = try sdk.makeMapFactory(mapViewOptions: mapViewOptions)

После создания карты

Изменить тему после создания карты можно через свойство appearance:

// Изменение темы на тёмную
map.appearance = .fixed(.init(theme: .defaultDarkTheme))

Управление стилевыми слоями

Вы можете динамически включать и выключать отображение стилевого слоя на карте. Чтобы включить слой (например, слой с парковками):

  1. Инициализируйте глобальную переменную:

    1. Откройте Редактор стилей.

    2. В блоке Мои стили откройте карточку нужного стиля.

    3. В разделе Слои выберите слой, который нужно включить.

    4. В блоке Данные (JSON) отредактируйте JSON-файл и добавьте нужную глобальную переменную (global). Например, для слоя с парковками — это переменная parkingOn:

      Добавление глобальной переменной

      Глобальная переменная может использоваться в нескольких слоях, но только внутри одного стиля.

  2. Экспортируйте и подключите стиль: см. инструкцию Подключение стиля для iOS SDK.

  3. Установите значение true для атрибута с помощью метода setAttributeValue(). Например, чтобы включить отображение слоя парковок:

    self.map.attributes.setAttributeValue(
    name: "parkingOn",
    value: .boolean(true)
    )
  4. Выпустите новую версию приложения.