Cómo agregar un conjunto de datos a un conjunto de datos de mapa y diseño

Selecciona la plataforma: Android iOS JavaScript

En esta página, se muestra cómo agregar un conjunto de datos a un mapa y aplicar diseños.

Captura de pantalla que muestra datos de polígono con diseño aplicado.

Requisitos previos

Antes de continuar, debes tener un ID de mapa, un diseño de mapa y un ID de conjunto de datos.

Asocia un ID de conjunto de datos a un diseño de mapa

Para diseñar los componentes de un conjunto de datos, debes aplicar una función de diseño a la capa de componentes del conjunto de datos de un mapa. La capa de entidades del conjunto de datos se crea cuando asocias un conjunto de datos con un diseño de mapa.

Para asociar tu conjunto de datos al diseño de mapa, sigue estos pasos:

  1. En la consola de Google Cloud, ve a la página Conjuntos de datos.
  2. Haz clic en el nombre del conjunto de datos. Se abrirá la página Detalles del conjunto de datos.
  3. Haz clic en la pestaña Vista previa.
  4. En la sección Diseños de mapa asociados, haz clic en AGREGAR DISEÑO DE MAPA.
    La sección Diseños de mapa asociados con un botón de signo más que dice AGREGAR DISEÑO DE MAPA a la derecha.
  5. Haz clic en las casillas de verificación correspondientes a los diseños de mapa que deseas asociar y, luego, en GUARDAR.

Aplica diseños al conjunto de datos

Para aplicar diseños a un conjunto de datos, sigue estos pasos:

  1. Crea una función de fábrica de diseño que implemente la interfaz FeatureLayer.StyleFactory. Esta función define la lógica de diseño de un conjunto de datos.

  2. Llama a FeatureLayer.setFeatureStyle() para aplicar la función de fábrica de diseño a cada elemento del conjunto de datos.

Crea una función de fábrica de diseño

La función de fábrica de diseño se aplica a cada elemento de la capa del conjunto de datos en el momento en que configuras la función en la capa de elementos. Esta función debe devolver un objeto FeatureStyle que especifique cómo diseñar el polígono.

Si la fábrica de diseño devuelve null, no se renderiza el elemento proporcionado. Para obtener más información, consulta Cómo quitar el diseño de una capa.

El SDK de Maps para Android pasa una instancia de Feature a la función de fábrica de diseño. La instancia de Feature representa los metadatos de la función, lo que te brinda acceso a los metadatos en la función de fábrica de diseño.

La función de fábrica de diseño siempre debe devolver resultados coherentes cuando se aplica. Por ejemplo, si deseas colorear de forma aleatoria un conjunto de componentes, la aleatoriedad no debe ocurrir en la función de diseño de los componentes, ya que esto generaría resultados no deseados.

Dado que esta función se ejecuta en todos los componentes de una capa, la optimización es importante. Para no afectar los tiempos de renderización, llama a FeatureLayer.setFeatureStyle(null) cuando una capa de entidades ya no esté en uso.

También puedes llamar a FeatureLayer.getDatasetId() para obtener el ID del conjunto de datos.

Cómo establecer el radio del punto, el trazo y el relleno

Cuando diseñas un elemento en la función de fábrica de diseño, puedes establecer lo siguiente:

  • Color y opacidad del trazo del borde, según se definen en la clase Color. El valor predeterminado es transparente (Color.TRANSPARENT).

  • Ancho del trazo del borde en píxeles de pantalla. El valor predeterminado es 2.

  • Color y opacidad del relleno, según se definen en la clase Color El valor predeterminado es transparente (Color.TRANSPARENT).

  • Radio del punto de un elemento de punto entre 0 y 128 píxeles.

Utiliza reglas de diseño simples

La forma más sencilla de aplicar diseño a los elementos es definir un FeatureLayer.StyleFactory que siempre cree un objeto FeatureStyle idéntico, independientemente del elemento. Aplica opciones de diseño de componentes directamente a una capa de componentes del conjunto de datos o utilízalas en conjunto con un FeatureStyleFunction.

Utiliza reglas de diseño declarativas

Puedes establecer reglas de diseño de forma declarativa según un atributo de elemento y aplicarlas a todo tu conjunto de datos. Puedes devolver null desde tu función de diseño de componentes, por ejemplo, si quieres que un subconjunto de componentes permanezca invisible.

Por ejemplo, usa el método DatasetFeature.getDatasetAttributes() para devolver un objeto Map<String,String> de atributos del conjunto de datos para un atributo. Luego, puedes personalizar el diseño de la función según sus atributos.

En este ejemplo, se determina el valor del atributo "highlightColor" de cada atributo de un conjunto de datos para controlar el diseño:

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; }

Aplica diseño a la capa de componentes del conjunto de datos

En este ejemplo, se aplica una función de fábrica de diseño a un polígono en la capa de componentes del conjunto de datos. La función de fábrica de diseño aplica un diseño de relleno y trazo personalizado al polígono:

  1. Si aún no lo hiciste, sigue los pasos que se indican en Cómo comenzar para crear un ID y un diseño de mapa nuevos. Asegúrate de habilitar la capa del componente Conjuntos de datos.

  2. Obtén una referencia a la capa de componentes de Datasets cuando se inicialice el mapa.

    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. Crea una función de fábrica de diseño y aplícala a la capa de componentes de Datasets.

    En el siguiente ejemplo, se aplica el mismo relleno y trazo a todos los elementos del conjunto de datos.

    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); }

Cómo quitar el diseño aplicado a una capa

Para quitar el diseño aplicado a una capa, llama a FeatureLayer.setFeatureStyle(null).

También puedes devolver null desde tu fábrica de diseño, por ejemplo, si quieres que un subconjunto de componentes permanezca invisible.