Esta página mostra como adicionar um conjunto de dados a um mapa e aplicar um estilo.
Pré-requisitos
Antes de continuar, você precisa ter um ID do mapa, um estilo de mapa e um ID do conjunto de dados.
Associar um ID do conjunto de dados a um estilo de mapa
Para estilizar os elementos de um conjunto de dados, aplique uma função de estilo à camada de elementos do conjunto de dados de um mapa. A camada de elementos do conjunto de dados é criada quando você associa um conjunto de dados a um estilo de mapa.
Para associar o conjunto de dados ao estilo de mapa:
- No console do Google Cloud, acesse a página Conjuntos de dados.
- Clique no nome do conjunto de dados. A página Detalhes do conjunto de dados vai aparecer.
- Clique na guia Visualização.
- Na seção Estilos de mapa associados, clique em ADICIONAR ESTILO DE MAPA.
- Clique nas caixas de seleção dos estilos de mapa que serão associados e clique em SALVAR.
Aplicar estilos ao conjunto de dados
Para aplicar estilos a um conjunto de dados:
Crie uma função de fábrica de estilo que implemente a interface
FeatureLayer.StyleFactory
. Essa função define a lógica de estilo de um conjunto de dados.Chame
FeatureLayer.setFeatureStyle()
para aplicar a função de fábrica de estilo a cada elemento no conjunto de dados.
Criar uma função de fábrica de estilo
A função de fábrica de estilo é aplicada a todos os elementos na camada do conjunto de dados no momento em que você define a função na camada de elementos. Essa função precisa retornar um objeto FeatureStyle
que especifique como estilizar o polígono.
Se a fábrica de estilo retornar null
, o recurso indicado não será renderizado. Para mais
informações, consulte Remover o estilo de uma camada.
O SDK do Maps para Android transmite uma instância de Feature
para a função de fábrica de estilo. A instância Feature
representa os
metadados do elemento, acesso aos metadados na função da fábrica de estilos.
A função de fábrica de estilo precisa sempre retornar resultados consistentes quando é aplicada. Por exemplo, para colorir aleatoriamente um conjunto de elementos, a parte aleatória não pode ocorrer na função de estilo de elementos porque isso gera resultados indesejados.
Como essa função é executada em todos os elementos de uma camada, a otimização é importante. Para evitar impacto nos tempos de renderização, chame FeatureLayer.setFeatureStyle(null)
quando uma camada de elemento não estiver mais em uso.
Também é possível chamar FeatureLayer.getDatasetId()
para receber o ID do conjunto de dados.
Definir traço, preenchimento e raio do ponto
Ao definir o estilo de um elemento na função da fábrica de estilos, é possível definir:
Cor e opacidade do traço da borda, conforme definido pela classe
Color
. O valor padrão é transparente (Color.TRANSPARENT
).Largura do traço da borda em pixels da tela. O valor padrão é 2.
Cor e opacidade do preenchimento, conforme definido pela classe
Color
. O valor padrão é transparente (Color.TRANSPARENT
).Raio do ponto de um elemento pontual entre 0 e 128 pixels.
Usar regras de estilo simples
A maneira mais simples de definir o estilo dos elementos é definir um FeatureLayer.StyleFactory
, que sempre cria um objeto FeatureStyle
idêntico, independentemente do elemento. Aplique opções de estilo diretamente a uma camada de elementos do conjunto de dados ou use-as com uma FeatureStyleFunction
.
Usar regras de estilo declarativas
É possível definir regras de estilo de forma declarativa com base em um atributo de elemento e aplicá-las a todo o conjunto de dados. Você pode retornar null
da função de estilo de elemento, por exemplo, se quiser que um subconjunto de elementos permaneça invisível.
Por exemplo, use o método DatasetFeature.getDatasetAttributes()
para retornar um
Map<String,String>
de atributos do conjunto de dados para um elemento. Depois,
é possível personalizar o estilo do recurso com base nos atributos dele.
Este exemplo determina o valor do atributo "highlightColor" de cada elemento de um conjunto de dados para controlar o estilo:
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; }
Aplicar estilo à camada de elementos do conjunto de dados
Este exemplo aplica uma função de fábrica de estilo a um polígono na camada de elementos do conjunto de dados. A função de fábrica de estilo aplica um estilo de preenchimento e traço personalizado ao polígono:
Siga as etapas em Começar para criar um novo ID e estilo de mapa, caso ainda não tenha feito isso. Ative a camada de elemento Datasets.
Receba uma referência à camada de elemento de conjuntos de dados quando o mapa for inicializado.
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(); }Crie uma função de fábrica de estilo e aplique-a à camada de elementos dos conjuntos de dados.
O exemplo a seguir aplica o mesmo preenchimento e traço a todos os elementos no conjunto de dados.
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); }
Remover o estilo de uma camada
Para remover o estilo de uma camada, chame FeatureLayer.setFeatureStyle(null)
.
Você também pode retornar null
da fábrica de estilo, por exemplo, se quiser que um subconjunto de elementos permaneça invisível.