В этой статье рассказывается, как настроить карту, которая уже добавлена в приложение iOS с помощью Maps SDK для iOS.
Обзор
Для карты, добавленной в приложение, можно менять как исходные настройки, так и параметры времени выполнения. Подробнее о том, как добавить контейнер карты…
Исходные настройки карты включают в себя следующее:
- Положение камеры, включая координаты, масштаб, наклон и поворот. Подробнее о расположении камеры и обзоре см. в разделе «Камера и обзор».
- Цвет фона карты.
- Тип карты.
- Компоненты пользовательского интерфейса, такие как кнопки масштабирования и компас.
- Жесты для управления.
Во время выполнения вы можете изменить эти и некоторые другие настройки, обновив объект GMSMapView.
Параметры карты
При инициализации представления карты параметры конфигурации задаются с помощью GMSMapViewOptions.
Свойства вариантов включают frame, camera, mapID или backgroundColor.
| Параметры карты | |
|---|---|
| рамка | Ценность:
CGRectФрейм карты. Значение по умолчанию – CGRectZero.
|
| камера | Ценность:
GMSCameraPositionПоложение камеры на карте по умолчанию.
|
| mapID | Ценность:
GMSMapIDИдентификатор карты Google. Необязательный параметр.
|
| backgroundColor | Ценность:
UIColorЗначение по умолчанию – UIColor.lightGray.
|
Как настроить параметры карты
Вы можете задать собственные свойства или передать экземпляр GMSMapViewOptions со значениями по умолчанию непосредственно в GMSMapView.
Swift
let options = GMSMapViewOptions() options.camera = GMSCameraPosition.camera(withLatitude: -33.8683, longitude: 151.2086, zoom: 6) let mapView = GMSMapView(options:options)
Objective-C
GMSMapViewOptions *options = [[GMSMapViewOptions alloc] init]; options.camera = [GMSCameraPosition cameraWithLatitude:-33.8683 longitude:151.2086 zoom:6]; GMSMapView *mapView = [[GMSMapView alloc] initWithOptions:options];
Ниже приведен пример передачи объекта GMSMapViewOptions со значениями по умолчанию непосредственно в GMSMapView.
Swift
let options = GMSMapViewOptions() let mapView = GMSMapView(options:options) //initialized with default values
Objective-C
GMSMapViewOptions *options = [[GMSMapViewOptions alloc] init]; GMSMapView *mapView = [[GMSMapView alloc] initWithOptions:options]; //initialized with default values
Как настроить цвет фона
При работе в тёмном режиме или переключении между режимами просмотра карты может быть полезно переопределить цвет фона карты по умолчанию. Для этого нужно задать свойство backgroundColor в настройках карты.
Swift
let options = GMSMapViewOptions() options.backgroundColor = UIColor.yellowColor let mapView = GMSMapView(options:options)
Objective-C
GMSMapViewOptions *options = [[GMSMapViewOptions alloc] init]; options.backgroundColor = UIColor.yellowColor; GMSMapView *mapView = [[GMSMapView alloc] initWithOptions:options];
Типы карт
Для своей карты вы можете выбрать один из нескольких типов. Тип карты определяет ее общий вид. Например, в атласе обычно есть политические карты, на которых показаны границы, и дорожные карты, на которых показаны все дороги города или региона. Maps SDK для iOS предлагает следующие типы карт:
| Тип карты | |
|---|---|
| Обычный | Ценность:
kGMSTypeNormalОбычная дорожная карта. Показывает дороги, некоторые объекты, созданные людьми, и важные природные объекты, например реки. Кроме того, на такой карте представлены названия дорог и объектов. Поддерживает настройку цветовой схемы карты (темная, светлая или в соответствии с системными настройками).
|
| Гибрид | Значение:
kGMSTypeHybridФотографии со спутника, на которые наложена дорожная карта. Также видны ярлыки дорог и объектов. |
| Спутник | Ценность:
kGMSTypeSatelliteФотографии со спутника. Ярлыки дорог и объектов не видны.
|
| Рельеф | Значение:
kGMSTypeTerrainТопографические данные. На карте есть цвета, контурные линии, метки и перспективное затенение. Видны некоторые дороги и ярлыки. Поддержка настройки цветовой схемы карты на тёмную, светлую или в соответствии с системными настройками.
|
| Нет | Ценность:
kGMSTypeNoneФрагменты не отображаются. Фрагменты базовой карты не будут отрисовываться. Этот режим полезен в сочетании со слоями фрагментов. Если тип карты не задан, данные о загруженности дорог не показываются. |
Изменение типа карты
Чтобы задать тип карты, присвойте новое значение свойству GMSMapView.mapType. Например, отображение спутниковой карты:
Swift
let options = GMSMapViewOptions() options.camera = GMSCameraPosition.camera(withLatitude: -33.8683, longitude: 151.2086, zoom: 6) let mapView = GMSMapView(options:options) mapView.mapType = .satellite
Objective-C
GMSMapViewOptions *options = [[GMSMapViewOptions alloc] init]; options.camera = [GMSCameraPosition cameraWithLatitude:-33.8683 longitude:151.2086 zoom:6]; GMSMapView *mapView = [[GMSMapView alloc] initWithOptions:options]; mapView.mapType = kGMSTypeSatellite;
На изображении ниже показаны рельефная, обычная и гибридная карты одного и того же местоположения.
Схемы зданий
При максимальных уровнях масштабирования Maps SDK для iOS показывает планы зданий, например аэропортов, вокзалов и торговых центров. Схемы зданий интегрированы в стандартные фрагменты карт для обычного типа карты (kGMSTypeNormal). Они автоматически появляются при увеличении масштаба и не видны, если его уменьшить.
Чтобы отключить схемы зданий, установите для свойства indoorEnabled объекта GMSMapView значение NO.
Swift
mapView.isIndoorEnabled = false
Objective-C
mapView.indoorEnabled = NO;
Вы также можете отключить только элемент управления выбором этажа.
Как добавить схемы зданий
Планы зданий доступны не во всех регионах. Если данные плана здания недоступны для здания, которое вы хотите выделить в своем приложении, вы можете:
- Добавлять планы этажей непосредственно на Google Карты. Это позволит сделать ваши планы доступными для всех пользователей Google Карт.
- добавить план как наложение на земную поверхность, В этом случае планы здания будут доступны только пользователям вашего приложения.
Слой "Пробки"
Вы можете сделать так, чтобы пользователям был доступен слой с данными о загруженности дорог. По такой карте удобно оценивать обстановку в своем районе. Чтобы включить или отключить слой загруженности дорог, вызовите метод trafficEnabled. Ниже показано, как данные о загруженности дорог выглядят на карте.

Слой "Транспорт"
Maps SDK для iOS позволяет показывать на карте информацию о городском общественном транспорте с помощью метода transitEnabled. Если этот слой активирован и в центре карты находится город, для которого доступна информация, главные маршруты общественного транспорта будут показаны на карте в виде толстых цветных линий. Цвета линий заданы оператором общественного транспорта. При активации слоя "Общественный транспорт" стиль базовой карты меняется, чтобы маршруты общественного транспорта были более заметны.
Если вы представляете государственный орган, ответственный за городской общественный транспорт, и хотите добавить свои данные на карту, ознакомьтесь со сведениями на сайте Партнерской программы "Общественный транспорт".
На изображении ниже показано, как может выглядеть слой общественного транспорта на карте.

Специальные возможности
По умолчанию элементы для использования специальных возможностей на карте скрыты. Чтобы включить специальные возможности, задайте для свойства accessibilityElementsHidden объекта GMSMapView значение NO. Это приводит к созданию элементов специальных возможностей для объектов оверлея (таких как GMSMarker, информационные окна, GMSPolyline и т. д.).
Swift
mapView.accessibilityElementsHidden = false
Objective-C
mapView.accessibilityElementsHidden = NO;
Это свойство соответствует неофициальному протоколу UIAccessibility, за исключением того, что значением по умолчанию в Maps SDK для iOS является YES.
Мое местоположение
По умолчанию на карте отсутствуют какие-либо данные о местоположении. Вы можете включить синюю точку "Мое местоположение" и направление компаса, задав для свойства myLocationEnabled объекта GMSMapView значение true.
Swift
mapView.isMyLocationEnabled = true
Objective-C
mapView.myLocationEnabled = YES;
Если включить эту функцию, текущее местоположение пользователя будет передаваться через свойство myLocation. Это свойство может быть доступно не сразу, например если iOS запрашивает у пользователя разрешение на доступ к этим данным. В данном случае это nil.
Swift
print("User's location: \(String(describing: mapView.myLocation))")
Objective-C
NSLog(@"User's location: %@", mapView.myLocation);
3D-здания
Во многих городах при приближении становятся видны 3D-здания. Например, на картинке ниже показан Сиэтл.
Вы можете отключить показ 3D-зданий, задав соответствующее свойство GMSMapView в Swift или Objective-C, как показано ниже.
Swift
mapView.isBuildingsEnabled = false
Objective-C
[mapView setBuildingsEnabled:NO];
Поля карты
Карта Google занимает всю область, ограниченную элементом GMSMapView.
Размеры области просмотра определяют следующие аспекты отображения карты:
- Камера будет нацелена на центр области с отступами.
- Элементы управления упорядочиваются относительно краев карты.
- Юридическая информация, например заявления об авторских правах или логотип Google, отображается вдоль нижнего края карты.
Чтобы добавить вокруг карты поля, вызовите метод GMSMapView.padding. Сама карта будет и далее занимать весь контейнер, однако текст, элементы управления, жесты пользователя и движения камеры будут обрабатываться с учетом уменьшенной области. Это приведет к следующим изменениям:
- Движения камеры, совершаемые в ответ на вызовы API или нажатия кнопок ("Мое местоположение" и т.п.), будут обрабатываться относительно уменьшенной области.
GMSMapView.projectionвозвращает проекцию, которая включает только область с полями.- Элементы управления пользовательского интерфейса смещены от края контейнера на указанное количество точек.
Поля добавляются в случаях, когда пользовательский интерфейс закрывает часть карты. Например, на иллюстрации ниже добавлены верхнее и правое поля. Инструменты управления картой и юридические сведения отображаются вдоль краев уменьшенной области, которая обозначена на картинке зеленой рамкой, в то время как сама карта по-прежнему занимает весь контейнер (синяя рамка). Это позволяет разместить меню в правой части карты, не перекрывая инструменты управления.

Чтобы добавить отступы на карту, создайте объект UIEdgeInsets и передайте его в GMSMapView.padding ресурс.
Swift
// Insets are specified in this order: top, left, bottom, right let mapInsets = UIEdgeInsets(top: 100.0, left: 0.0, bottom: 0.0, right: 300.0) mapView.padding = mapInsets
Objective-C
// Insets are specified in this order: top, left, bottom, right UIEdgeInsets mapInsets = UIEdgeInsetsMake(100.0, 0.0, 0.0, 300.0); mapView.padding = mapInsets;
Цветовая схема карты
Для карт типа normal и terrain можно задать темную или светлую цветовую схему или использовать текущие системные настройки. Например, вы можете сделать цветовую схему карты темнее или светлее в зависимости от времени суток или от того, где находится устройство – в помещении или на улице.
Используйте GMSMapView
overrideUserInterfaceStyle:, чтобы задать и обновить цветовую схему карты.
Swift
let options = GMSMapViewOptions() // Map is init to use light mode by default. let mapView = GMSMapView(options: options) // Set map to use dark mode. mapView.overrideUserInterfaceStyle = .dark // Set map to use light mode. mapView.overrideUserInterfaceStyle = .light // Set map to use dark/light mode based on the value of traitCollection.userInterfaceStyle mapView.overrideUserInterfaceStyle = .unspecified
Objective-C
GMSMapViewOptions *options = [[GMSMapViewOptions alloc] init]; // Map is init to always use light mode. GMSMapView *mapView = [[GMSMapView alloc] initWithOptions:options]; // Set map to use dark mode. mapView.overrideUserInterfaceStyle = UIUserInterfaceStyleDark; // Set map to use light mode. mapView.overrideUserInterfaceStyle = UIUserInterfaceStyleLight; // Set map to use dark/light mode based on the value of traitCollection.userInterfaceStyle mapView.overrideUserInterfaceStyle = UIUserInterfaceStyleUnspecified;
Чтобы создать собственные светлые и темные стили для карт, используйте облачные стили карт.