Начало работы

Выберите платформу: Android iOS JavaScript

Чтобы использовать стили на основе данных для границ, необходимо создать идентификатор карты. Затем нужно создать стиль, выбрать слои объектов и связать стиль с идентификатором карты.

Создайте идентификатор карты

mapID – это уникальный идентификатор, который представляет один экземпляр Google Карты. Вы можете в любой момент создать идентификатор карты и обновить связанный с ним стиль в консоли Google Cloud.

Скриншот консоли Google Cloud

Создайте стиль карты

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

Выберите слои объектов

В консоли Google Cloud можно выбрать слои объектов. Они определяют типы границ на карте (например, границ областей и районов).

Как выбрать слои объектов

  1. В консоли Google Cloud перейдите на страницу "Стили карты".

  2. Если требуется, выберите проект.

  3. Выберите стиль карты.

  4. Нажмите на раскрывающееся меню Feature layers (Слои объектов) и выберите нужные слои.

  5. Нажмите Save (Сохранить), чтобы внести изменения на карты.

Скриншот с раскрывающимся списком.

Измените код инициализации карты

Для этого шага требуется идентификатор карты, связанный со стилем, в котором включен хотя бы один слой объектов. Чтобы проверить, правильно ли настроен идентификатор карты в Cloud Console, посмотрите, как он настроен в разделе Управление картами.

Swift

// A map ID using a style with one or more feature layers enabled

let mapID = GMSMapID(identifier: "YOUR_MAP_ID")
let camera = GMSCameraPosition(latitude: 40, longitude: -80, zoom: 7)
let options = GMSMapViewOptions()
options.camera = camera
options.mapID = mapID
let mapView = GMSMapView(options: options)

Objective-C

// A map ID using a style with one or more feature layers enabled

GMSMapID *mapID = [GMSMapID mapIDWithIdentifier:@"MAP_ID"];
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:40 longitude:-80 zoom:7];
GMSMapViewOptions *options = [[GMSMapViewOptions alloc] init];
options.camera = camera;
options.mapID = mapID;
GMSMapView *mapView = [[GMSMapView alloc] initWithOptions:options];

Добавьте слои объектов на карту

Чтобы получить ссылку на слой объектов вашей карты, вызовите метод mapView.featureLayer(of:) при инициализации карты:

Swift

let layer = mapView.featureLayer(of: .locality)

Objective-C

GMSFeatureLayer *layer = [mapView featureLayerOfFeatureType:GMSFeatureTypeLocality];

Как проверить функции карты

Стили границ на основе данных подразумевают использование функций, которые активированы в консоли Google Cloud и связаны с идентификатором вашей карты. Поскольку идентификаторы карт могут меняться, вы можете вызвать mapView.mapCapabilities для GMSMapView, чтобы проверить, доступна ли определенная возможность (например, стили на основе данных), прежде чем вызывать ее.

Вы также можете отслеживать изменения в возможностях карты, подписавшись на GMSViewDelegate. В этом примере показано, как использовать протокол для проверки требований к стилям на основе данных.

Swift

class SampleViewController: UIViewController {

  private lazy var mapView: GMSMapView = {
    let options = GMSMapViewOptions()
    options.mapID = GMSMapID(identifier: "YOUR_MAP_ID")
    options.camera = GMSCameraPosition(latitude: 40, longitude: -80, zoom: 7)
    return GMSMapView(options: options)
  }()

  override func loadView() {
    self.view = mapView
    mapView.delegate = self
  }
}

extension SampleViewController: GMSMapViewDelegate {
  func mapView(_ mapView: GMSMapView, didChange mapCapabilities: GMSMapCapabilityFlags) {
    if (!mapCapabilities.contains(.dataDrivenStyling)) {
      // Data-driven styling is *not* available, add a fallback.
      // Existing feature layers are also unavailable.
    }
  }
}

Objective-C

@interface SampleViewController: UIViewController <GMSMapViewDelegate>
@end

@implementation SampleViewController
- (void)loadView {
  GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:40 longitude:-80 zoom:7];
  GMSMapViewOptions *options = [[GMSMapViewOptions alloc] init];
  options.camera = camera;
  options.mapID = [GMSMapID mapIDWithIdentifier:@"MAP_ID"];
  GMSMapView *mapView = [[GMSMapView alloc] initWithOptions:options];
  mapView.delegate = self;
  self.view = mapView;
}

- (void)mapView:(GMSMapView *)mapView didChangeMapCapabilities:(GMSMapCapabilityFlags)mapCapabilities {
  if (!(mapCapabilities & GMSMapCapabilityFlagsDataDrivenStyling)) {
    // Data-driven styling is *not* available, add a fallback.
    // Existing feature layers are also unavailable.
  }
}
@end