Добавить набор данных на карту и набор данных стиля

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

На этой странице показано, как добавить набор данных на карту и применить стили.

Скриншот, демонстрирующий стилизованные данные полигона.

Предпосылки

Прежде чем продолжить, вам необходимо иметь идентификатор карты, стиль карты и идентификатор набора данных.

Свяжите идентификатор набора данных со стилем карты

Чтобы стилизовать объекты набора данных, необходимо применить функцию стиля к слою объектов набора данных на карте. Слой объектов набора данных создаётся при связывании набора данных со стилем карты .

Чтобы связать ваш набор данных со стилем карты:

  1. В консоли Google Cloud перейдите на страницу Наборы данных .
  2. Щелкните имя набора данных. Откроется страница с подробностями набора данных .
  3. Откройте вкладку Предварительный просмотр .
  4. В разделе Связанные стили карты нажмите ДОБАВИТЬ СТИЛЬ КАРТЫ .
    Раздел «Связанные стили карты» с кнопкой со знаком «плюс» и надписью «ДОБАВИТЬ СТИЛЬ КАРТЫ» справа.
  5. Установите флажки для стилей карты, которые необходимо связать, а затем нажмите кнопку СОХРАНИТЬ .

Применить стили к набору данных

Чтобы применить стили к набору данных:

  1. Создайте функцию фабрики стилей, реализующую интерфейс FeatureLayer.StyleFactory . Эта функция определяет логику стилей для набора данных.

  2. Вызовите FeatureLayer.setFeatureStyle() чтобы применить функцию фабрики стилей к каждому объекту в наборе данных.

Создать функцию фабрики стилей

Функция фабрики стилей применяется к каждому объекту в слое набора данных в момент её установки на слое объектов. Эта функция должна возвращать объект FeatureStyle , определяющий стиль полигона.

Если фабрика стилей возвращает null , данный объект не отображается. Подробнее см. в разделе Удаление стилей из слоя .

Maps SDK для Android передаёт экземпляр Feature в функцию фабрики стилей. Экземпляр Feature представляет метаданные объекта, предоставляя доступ к метаданным в функции фабрики стилей.

Функция фабрики стилей должна всегда возвращать согласованные результаты при применении. Например, если вы хотите случайным образом раскрасить набор объектов, случайная часть не должна выполняться в функции стиля объектов, так как это приведёт к непредвиденным результатам.

Поскольку эта функция обрабатывает все объекты в слое, оптимизация важна. Чтобы избежать влияния на время рендеринга, вызовите FeatureLayer.setFeatureStyle(null) , когда слой объектов больше не используется.

Вы также можете вызвать FeatureLayer.getDatasetId() чтобы получить идентификатор набора данных.

Задайте обводку, заливку и радиус точки

При стилизации объекта в функции фабрики стилей вы можете задать:

  • Цвет обводки и прозрачность границы определяются классом Color . Значение по умолчанию — прозрачный ( Color.TRANSPARENT ).

  • Ширина обводки границы в пикселях экрана. Значение по умолчанию — 2.

  • Цвет и непрозрачность заливки определяются классом Color . Значение по умолчанию — прозрачный ( Color.TRANSPARENT ).

  • Радиус точки точечного объекта от 0 до 128 пикселей.

Используйте простые правила стиля

Самый простой способ стилизации объектов — определить фабрику стилей FeatureLayer.StyleFactory , которая всегда создаёт идентичный объект FeatureStyle , независимо от объекта. Вы можете применять параметры стиля объектов непосредственно к слою объектов набора данных или использовать их вместе с FeatureStyleFunction .

Используйте правила декларативного стиля

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

Например, используйте метод DatasetFeature.getDatasetAttributes() , чтобы вернуть Map<String,String> атрибутов набора данных для объекта. Затем вы можете настроить стиль объекта на основе его атрибутов.

В этом примере определяется значение атрибута «highlightColor» каждого объекта набора данных для управления стилем:

Котлин

// Get the dataset feature, so we can work with all of its attributes.
val datasetFeature: DatasetFeature = feature as DatasetFeature
// Create a switch statement based on the value of the // "highlightColor" attribute of the dataset. val attributeColor: MutableMap<String, String> = datasetFeature.getDatasetAttributes() when (attributeColor["highlightColor"]) { "Black" -> { ... } "Red" -> { ... } else -> { ... } }

Ява

// Get the dataset feature, so we can work with all of its attributes.
DatasetFeature datasetFeature = (DatasetFeature) feature;
// Create a switch statement based on the value of the // "highlightColor" attribute of the dataset. Map<String, String> attributeColor = datasetFeature.getDatasetAttributes(); switch(attributeColor.get("highlightColor")) { case "Black": ... break; case "Red": ... break; default: // Color not defined. ... break; }

Применить стиль к слою объектов набора данных

В этом примере функция фабрики стилей применяется к полигону в слое объектов набора данных. Функция фабрики стилей применяет к полигону пользовательский стиль заливки и обводки:

  1. Если вы ещё этого не сделали, следуйте инструкциям в разделе «Начало работы» , чтобы создать новый идентификатор и стиль карты. Не забудьте включить слой объектов «Наборы данных» .

  2. Получите ссылку на слой объектов Datasets при инициализации карты.

    Котлин

    private var datasetLayer: FeatureLayer? = null
    override fun onMapReady(googleMap: GoogleMap) { // Get the DATASET feature layer. datasetLayer = googleMap.getFeatureLayer(FeatureLayerOptions.Builder() .featureType(FeatureType.DATASET) // Specify the dataset ID. .datasetId(YOUR_DATASET_ID) .build())
    // Apply style factory function to DATASET layer. styleDatasetsLayer() }

    Ява

    private FeatureLayer datasetLayer;
    @Override public void onMapReady(GoogleMap map) { // Get the DATASET feature layer. datasetLayer = map.getFeatureLayer(new FeatureLayerOptions.Builder() .featureType(FeatureType.DATASET) // Specify the dataset ID. .datasetId(YOUR_DATASET_ID) .build());
    // Apply style factory function to DATASET layer. styleDatasetsLayer(); }

  3. Создайте функцию фабрики стилей и примените ее к слою объектов Datasets.

    В следующем примере ко всем объектам в наборе данных применяется одна и та же заливка и обводка.

    Котлин

    private fun styleDatasetsLayer() {
    // Create the style factory function. val styleFactory = FeatureLayer.StyleFactory { feature: Feature ->
    // Check if the feature is an instance of DatasetFeature. if (feature is DatasetFeature) {
    return@StyleFactory FeatureStyle.Builder() // Define a style with green fill at 50% opacity and // solid green border. .fillColor(0x8000ff00.toInt()) .strokeColor(0xff00ff00.toInt()) .strokeWidth(2F) .build() } return@StyleFactory null }
    // Apply the style factory function to the feature layer. datasetLayer?.setFeatureStyle(styleFactory) }

    Ява

    private void styleDatasetsLayer() {
    // Create the style factory function. FeatureLayer.StyleFactory styleFactory = (Feature feature) -> {
    // Check if the feature is an instance of DatasetFeature. if (feature instanceof DatasetFeature) {
    return new FeatureStyle.Builder() // Define a style with green fill at 50% opacity and solid green border. .fillColor(0x8000ff00) .strokeColor(0xff00ff00) .strokeWidth(2) .build(); } return null; };
    // Apply the style factory function to the feature layer. datasetLayer.setFeatureStyle(styleFactory); }

Удалить стилизацию слоя

Чтобы удалить стиль из слоя, вызовите FeatureLayer.setFeatureStyle(null) .

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