На этой странице показано, как добавить набор данных на карту и применить стили.
Предварительные условия
Прежде чем продолжить, у вас должен быть идентификатор карты и стиль карты, а также идентификатор набора данных.
Свяжите идентификатор набора данных со стилем карты
Чтобы стилизовать объекты набора данных, вы применяете функцию стиля к векторному слою набора данных на карте. Слой объектов набора данных создается, когда вы связываете набор данных со стилем карты .
Чтобы связать набор данных со стилем карты:
- В Google Cloud Console перейдите на страницу «Наборы данных» .
- Щелкните имя набора данных. Появится страница сведений о наборе данных .
- Откройте вкладку «Предварительный просмотр» .
- В разделе «Связанные стили карты» нажмите «ДОБАВИТЬ СТИЛЬ КАРТЫ» .
- Установите флажки напротив стилей карты, которые требуется связать, а затем нажмите СОХРАНИТЬ .
Применить стили к набору данных
Чтобы применить стили к набору данных:
Создайте функцию фабрики стилей, реализующую интерфейс
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 -> { ... } }
Ява
// 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() }Ява
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) }Ява
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
из своей фабрики стилей, например, если вы хотите, чтобы подмножество функций оставалось невидимым.