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 recursos 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.
    A seção "Estilos de mapa associados" com um botão de adição que diz "ADICIONAR ESTILO DE MAPA" à direita.
  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 estilos 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 estilos a cada elemento do conjunto de dados.

Criar uma função de fábrica de estilos

A função de fábrica de estilo é aplicada a todos os elementos na camada do conjunto de dados quando você define a função na camada de elementos. Essa função precisa retornar um objeto FeatureStyle que especifica como estilizar o polígono.

Se a fábrica de estilos retornar null, o recurso especificado 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 Feature para a função de fábrica de estilos. A instância Feature representa os metadados do recurso, acesso a eles na função de 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 recursos não estiver mais em uso.

Também é possível chamar FeatureLayer.getDatasetId() para receber o ID do conjunto de dados.

Definir raio de traço, preenchimento e ponto

Ao estilizar um recurso na função de 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 de preenchimento e opacidade, conforme definido pela classe Color. O valor padrão é transparente (Color.TRANSPARENT).

  • Raio do ponto de um recurso de ponto entre 0 e 128 pixels.

Usar regras de estilo simples

A maneira mais simples de definir o estilo dos recursos é definir um FeatureLayer.StyleFactory que sempre cria um objeto FeatureStyle idêntico, independente do recurso. Aplique opções de estilo diretamente a uma camada de elementos do conjunto de dados ou use com uma FeatureStyleFunction.

Usar regras de estilo declarativas

É possível definir regras de estilo de forma declarativa com base em um atributo de recurso 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 recurso. Em seguida, é possível personalizar o estilo do recurso com base nos atributos dele.

Este exemplo determina o valor do atributo "highlightColor" de cada atributo 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 estilos 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. Consulte 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 "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 estilos e aplique-a à camada de elementos de conjuntos de dados.

    O exemplo a seguir aplica o mesmo preenchimento e traço a todos os recursos do 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 estilos, por exemplo, se quiser que um subconjunto de elementos permaneça invisível.