В этой статье рассказывается, как добавить набор данных на карту и применить стили.
Требования
Чтобы продолжить работу, вам понадобятся идентификатор и стиль карты и идентификатор набора данных.
Как связать идентификатор набора данных со стилем карты
Чтобы настроить стиль объектов набора данных, примените функцию стиля к слою объектов набора данных на карте. Слой объектов набора данных создается, когда вы связываете набор данных со стилем карты.
Чтобы связать набор данных со стилем карты, выполните следующие действия:
- В консоли Google Cloud перейдите на страницу Наборы данных.
- Нажмите на название набора данных. Откроется страница Dataset details (Сведения о наборе данных).
- Перейдите на вкладку Preview (Предварительный просмотр).
- В разделе Associated map styles (Связанные стили карт) нажмите Add map style (Добавить стиль карты).
- Установите флажки для стилей, с которыми нужно установить связь, и нажмите Save (Сохранить).
Как применить стили к набору данных
Чтобы применить стили к набору данных, выполните следующие действия:
Создайте функцию фабрики стилей, которая реализует интерфейс
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 каждого объекта набора данных, чтобы управлять стилем:
Kotlin
// 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; }
Как применить стиль к слою объекта набора данных
В этом примере к многоугольнику на слое объектов набора данных применяется функция фабрики стилей. Функция фабрики стилей применяет к многоугольнику собственный стиль заливки и контура:
Если вы этого ещё не сделали, создайте новый идентификатор карты и стиль карты, следуя инструкциям в статье Начало работы. Обязательно включите слой объектов Наборы данных.
Получите ссылку на слой объектов наборов данных после инициализации карты.
Kotlin
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(); }Создайте функцию фабрики стилей и примените ее к слою объектов наборов данных.
В следующем примере ко всем объектам в наборе данных применяется одинаковая заливка и обводка.
Kotlin
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, например если вы хотите, чтобы поднабор объектов не отображался.