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

Предварительные требования
Прежде чем продолжить, вам потребуется идентификатор карты, стиль карты и идентификатор набора данных.
Свяжите идентификатор набора данных со стилем карты.
Для оформления объектов набора данных используется функция стиля, применяемая к слою объектов набора данных на карте. Слой объектов набора данных создается при связывании набора данных со стилем карты .
Чтобы связать ваш набор данных со стилем карты:
- В консоли Google Cloud перейдите на страницу «Наборы данных» .
- Щелкните по названию набора данных. Откроется страница с подробными сведениями о наборе данных .
- Нажмите вкладку « Предварительный просмотр» .
- В разделе «Связанные стили карты» нажмите «ДОБАВИТЬ СТИЛЬ КАРТЫ» .

- Установите флажки напротив стилей карты, которые необходимо связать, а затем нажмите СОХРАНИТЬ .
Примените стили к набору данных.
Чтобы применить стили к набору данных:
Создайте функцию-фабрику стилей, реализующую интерфейс
FeatureLayer.StyleFactory. Эта функция определяет логику стилизации для набора данных.Вызовите
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 -> { ... } }
Java
// 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; }
Примените стиль к слою пространственных объектов набора данных.
В этом примере функция фабрики стилей применяется к полигону в слое пространственных объектов набора данных. Функция фабрики стилей применяет к полигону пользовательский стиль заливки и обводки:
Если вы еще этого не сделали, выполните действия, описанные в разделе «Начало работы» , чтобы создать новый идентификатор карты и стиль карты. Обязательно включите слой объектов «Наборы данных» .
При инициализации карты необходимо получить ссылку на слой объектов «Наборы данных».
Котлин
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() }Java
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(); }Создайте функцию-фабрику стилей и примените её к слою пространственных объектов «Наборы данных».
В следующем примере ко всем элементам набора данных применяются одинаковые заливка и обводка.
Котлин
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) }Java
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 из своей фабрики стилей, например, если хотите, чтобы подмножество элементов оставалось невидимым.