Adicionar conjunto de dados a um mapa e estilizar conjunto de dados

Selecione a plataforma: Android iOS JavaScript

Esta página mostra como adicionar um conjunto de dados a um mapa e aplicar um estilo.

Captura de tela mostrando um dado de polígono estilizado.

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 seu conjunto de dados ao estilo de mapa:

  1. No console do Google Cloud, acesse a página Conjuntos de dados.
  2. Clique no nome do conjunto de dados. A página Detalhes do conjunto de dados vai aparecer.
  3. Clique na guia Visualização.
  4. Na seção Estilos de mapa associados, clique em ADICIONAR ESTILO DE MAPA.
    Captura de tela do botão ADICIONAR ESTILO DE MAPA.
  5. 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:

  1. 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.

  2. 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 a função é definida. 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, dando 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 dos elementos porque isso causaria 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 estilizar um elemento na função de fábrica de estilo, é 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 recurso. 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 maneira declarativa com base em um atributo de recurso e aplicá-las em todo o conjunto de dados. Você pode retornar null da função de estilo de elementos, por exemplo, se quiser que um subconjunto de elementos permaneça invisível.

Por exemplo, use o método DatasetFeature.getDatasetAttributes() para retornar uma Map<String,String> de atributos do conjunto de dados para um recurso. Depois, é possível personalizar o estilo do recurso com base nos atributos dele.

Este exemplo determina o valor do atributo "highlightColor" de cada recurso 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:

  1. 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 Conjuntos de dados.

  2. 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(); }

  3. Crie uma função de fábrica de estilo e aplique-a à camada de elementos do conjunto 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.