Visualice sus datos con BigQuery y la API de Datasets

En este documento, se proporciona una arquitectura de referencia y un ejemplo para crear visualizaciones de datos de mapas con datos de ubicación en BigQuery de Google Cloud Platform y la API de conjuntos de datos de Google Maps Platform, como el análisis de datos municipales abiertos, la creación de un mapa de cobertura de telecomunicaciones o la visualización de seguimientos del movimiento de la flota de vehículos móviles.

Las visualizaciones de datos de mapas son una herramienta eficaz para atraer a los usuarios y descubrir estadísticas espaciales en los datos de ubicación. Los datos de ubicación son datos que contienen componentes de punto, línea o polígono. Por ejemplo, los mapas meteorológicos ayudan a los consumidores a comprender y planificar viajes, y a prepararse para las tormentas; los mapas de inteligencia empresarial ayudan a los usuarios a obtener estadísticas a partir de sus análisis de datos, y los mapas de telecomunicaciones ayudan a los usuarios a comprender la cobertura y la calidad de sus proveedores en un área de servicio determinada.

Sin embargo, les resulta difícil a los desarrolladores de apps hacer visualizaciones grandes de datos de mapas que tengan buen rendimiento y proporcionen una excelente experiencia del usuario. Los datos de gran tamaño deben cargarse en la memoria del cliente, lo que hace que los tiempos de carga del primer mapa sean lentos. El elemento visual debe tener un buen rendimiento en todos los dispositivos, incluidos los teléfonos celulares de gama baja que tienen restricciones de memoria y GPU. Por último, los desarrolladores deben elegir una biblioteca de procesamiento de datos de gran tamaño que sea portátil, confiable y eficiente con grandes datos.

Arquitectura de referencia

El desarrollo de apps con grandes visualizaciones de datos requiere dos componentes principales.

  1. Backend del cliente: Todos los datos y servicios de apps de backend, como el procesamiento y el almacenamiento.
  2. Cliente cliente: Es la interfaz de usuario de tu app con un componente de visualización de mapas.

A continuación, se muestra un diagrama del sistema de cómo estos dos componentes interactúan con el usuario de la app, Google Cloud y Google Maps Platform para crear una app de visualización de datos de gran tamaño.

diagrama de arquitectura

⭐ Nota: La API de Maps Datasets es un producto en fase previa a la DG. Consulta los detalles en las Condiciones del Servicio.

Consideraciones del diseño

Hay una serie de consideraciones de diseño que se deben seguir para crear una visualización de datos de alto rendimiento con Google Cloud y Google Maps Platform.

  1. Tamaño de los datos de origen y frecuencia de actualización.
    1. Si los datos de origen en formato geojson son inferiores a 5 MB o se actualizan con mucha frecuencia, p.ej., un pronóstico de radares meteorológicos en vivo, considera entregar los datos como un lado del cliente de objeto geojson en tu app y renderiza con una capa deck.gl.
    2. Si tus datos tienen un tamaño superior a 5 MB y se actualizan no más de una vez por hora, considera la arquitectura de la API de Datasets en este documento.
      1. Los conjuntos de datos admiten archivos de hasta 350 MB de tamaño.
      2. Si tus datos superan los 350 MB, considera reducir o simplificar los datos de geometría del archivo fuente antes de pasarlos a los conjuntos de datos (consulta Reducción de datos a continuación).
  2. Esquema y formato
    1. Asegúrate de que tus datos tengan una propiedad de ID global única para cada función. Un ID único te permite seleccionar y aplicar diseño a un componente específico o combinar datos con un componente para visualizarlo; por ejemplo, puedes darle estilo a un componente seleccionado en el evento de usuario "clic".
    2. Aplica formato a tus datos como CSV o GeoJSON de acuerdo con las especificaciones de la API de Dataset con nombres de columna, tipos de datos y tipos de objetos GeoJSON válidos.
    3. Para crear fácilmente conjuntos de datos desde BigQuery, crea una columna llamada wkt en tu exportación de CSV de SQL. Los conjuntos de datos admiten la importación de geometría desde un archivo CSV en formato de texto conocido (WKT) desde una columna llamada wkt.
    4. Verifica que tus datos sean de geometría y tipos de datos válidos. Por ejemplo, GeoJSON debe estar en el sistema de coordenadas WGS84, el orden de devanado de geometría, etcétera.
    5. Usa una herramienta como geojson-validate para asegurarte de que todas las geometrías de un archivo fuente sean válidas, u ogr2ogr para transformar un archivo fuente entre formatos o sistemas de coordenadas.
  3. Reducción de datos
    1. Minimiza la cantidad de propiedades de los atributos. Puedes unir propiedades adicionales a una función durante el tiempo de ejecución con una clave de identificador única (ejemplo).
    2. Usa tipos de datos enteros para objetos de propiedad cuando sea posible para minimizar el espacio de almacenamiento de tarjetas, y así mantener el rendimiento de las tarjetas cuando se cargan a través de HTTPS en una app cliente.
    3. Simplifica o agrega geometrías de atributos muy complejas. Considera usar funciones de BigQuery como ST_Simplify en geometrías de polígono complejas para reducir el tamaño de archivo fuente y mejorar el rendimiento del mapa.
  4. Tilización
    1. La API de Google Maps Datasets crea mosaicos de mapas a partir de tu archivo de datos de origen para usar en la API de Maps JS.
    2. Los mosaicos de mapas son un sistema de indexación basado en el zoom que proporciona formas más eficientes de cargar datos en una app visual.
    3. Los mosaicos de mapas pueden eliminar elementos densos o complejos en niveles de zoom inferiores. Cuando un usuario aleja el mapa a un estado o país (p.ej., z5-z12), es posible que se vea diferente cuando se acerque a una ciudad o zona (p.ej., z13-z18).

Ejemplo: Ferrocarriles en Londres

En este ejemplo, aplicaremos la arquitectura de referencia para crear una aplicación web con GCP y Google Maps que visualice todos los ferrocarriles de Londres a partir de los datos de Open Street Map (OSM).

Requisitos previos

  1. Acceso a la zona de pruebas de BigQuery y la consola de Cloud
  2. Asegúrate de tener un proyecto de GCP y una cuenta de facturación configurados.

Paso 1: Consulta datos en BigQuery

Navega a Conjuntos de datos públicos de BigQuery. El conjunto de datos "bigquery-public-data" y la tabla geo_openstreetmap.planet_features contienen datos de Open Street Map (OSM) de todo el mundo, incluidas todas las funciones posibles. Descubre todas las funciones disponibles para consultar en la Wiki de OSM, incluidas amenity, road y landuse.

Usa Cloud Shell o la consola de Cloud de BigQuery(https://console.cloud.google.com) para consultar la tabla con SQL. El siguiente fragmento de código usa el comando bq query para consultar todos los ferrocarriles filtrados solo a Londres mediante un cuadro de límite y la función ST_Intersects().

Para realizar esta consulta desde Cloud Shell, ejecuta el siguiente fragmento de código y actualiza el ID del proyecto, el conjunto de datos y el nombre de la tabla de tu entorno.

bq query --use_legacy_sql=false \
--destination_table PROJECTID:DATASET.TABLENAME \
--replace \
'SELECT
osm_id, 
feature_type,
(SELECT value
         FROM   unnest(all_tags)
         WHERE  KEY = "name") AS name,
(SELECT value
         FROM   unnest(all_tags)
         WHERE  KEY = "railway") AS railway,
geometry as wkt
FROM   bigquery-public-data.geo_openstreetmap.planet_features
WHERE ("railway") IN (SELECT key FROM unnest(all_tags)) 
    AND ST_Intersects(
    geometry,
ST_MakePolygon(ST_MakeLine(
      [ST_GeogPoint(-0.549370, 51.725346),
      ST_GeogPoint(-0.549370, 51.2529407),
      ST_GeogPoint(0.3110581, 51.25294),
      ST_GeogPoint(0.3110581, 51.725346),
      ST_GeogPoint(-0.549370, 51.725346)]
    ))
   )' 

La consulta devuelve lo siguiente:

  1. un identificador único para cada atributo osm_id
  2. el feature_type (p.ej., puntos, líneas, etcétera)
  3. El name del atributo, p.ej., Paddington Station
  4. El tipo de railway, p.ej., principal, turismo, militar, etcétera
  5. El wkt del componente: geometría de punto, línea o polígono en formato WKT WKT es el formato de datos estándar que muestran las columnas de geografía de BigQuery en una consulta.

Nota: Para validar visualmente los resultados de tu consulta antes de crear un conjunto de datos, puedes visualizar tus datos rápidamente en un panel de BigQuery con Looker Studio.

Para exportar la tabla a un archivo CSV en un bucket de Google Cloud Storage, usa el comando bq extract en Cloud Shell:

bq extract \
--destination_format "CSV" \
--field_delimiter "," \
--print_header=true \
PROJECTID:DATASET.TABLENAME \
gs://BUCKET/FILENAME.csv

Nota: Puedes automatizar cada paso con Cloud Scheduler para actualizar tus datos con regularidad.

Paso 2: Crea un conjunto de datos a partir de tu archivo CSV

A continuación, crea un conjunto de datos de Google Maps Platform a partir del resultado de la consulta de Google Cloud Storage (GCS). Con la API de Dataset, puedes crear un conjunto de datos y, luego, subirlo a él desde un archivo alojado en GCS.

Para comenzar, habilita la API de Maps Datasets en tu proyecto de GCP y revisa los documentos de la API. Existen bibliotecas cliente de Python y Node.js para llamar a la API de Datasets desde una lógica en el backend de tu app. Además, existe una GUI de conjuntos de datos para crear conjuntos de datos de forma manual en la consola de Cloud.

Una vez que se haya completado la carga del conjunto de datos, puedes obtener una vista previa de él en la GUI del conjunto de datos.

Vista previa del conjunto de datos

Paso 4: Asocia tu conjunto de datos con un ID de mapa

Una vez creado tu conjunto de datos, puedes crear un ID de mapa con un diseño de mapa asociado. En el editor de diseños de mapa, puedes asociar un mapId y un diseño al conjunto de datos. Aquí también puedes aplicar el diseño de mapas basado en Cloud para personalizar el aspecto de tu mapa.

Paso 5: Crea la visualización del mapa de tu app cliente

Por último, puedes agregar el conjunto de datos a una app de visualización de datos del cliente con la API de Maps JS. Inicializa tu objeto de mapa con el mapID asociado con tu conjunto de datos del paso anterior. Luego, establece el estilo y la interactividad de tu capa del conjunto de datos. Consulta la guía completa sobre diseño basado en datos con conjuntos de datos para obtener más detalles.

Puedes personalizar el estilo, agregar controladores de eventos para cambiar el estilo de forma dinámica y mucho más con la API de Maps JS. Consulta ejemplos en los docs. A continuación, definiremos una función setStyle para crear el estilo de componente de punto y línea para este ejemplo según el atributo “feature_type”.

Nota: Asegúrate de utilizar el canal v=beta para tu implementación de la API de Maps JS.

function setStyle(params) {
  const map.getDatasetFeatureLayer("your-dataset-id");
  const datasetFeature = params.feature;
  const type = datasetFeature.datasetAttributes["feature_type"];
if (type == "lines") {
           return {
             fillColor: "blue",
             strokeColor: "blue",
             fillOpacity: 0.5,
             strokeWeight: 1,
           }
         } else if (type == "points") {
           return {
             fillColor: "black",
             strokeColor: "black",
             strokeOpacity: 0.5,
             pointRadius: 2,
             fillOpacity: 0.5,
             strokeWeight: 1,
           }
     }
}

Nota: Asegúrate de agregar siempre la atribución de tu conjunto de datos a tu app de mapas. Para hacerlo, sigue el ejemplo de código de atribución en la documentación de acuerdo con los lineamientos de OSM.

El código anterior, cuando se inicializa en una aplicación web de una página, genera la siguiente imagen de datos del mapa:

mapa de los ferrocarriles de Londres

Desde aquí, puedes ampliar la visualización de tu mapa en la función setStyle() agregando lógica para filtrar funciones, ajustes de estilo en función de la interacción del usuario e interactuando con el resto de tu aplicación.

Conclusión

En este artículo, analizamos una arquitectura de referencia y la implementación de ejemplo de una aplicación de visualización de datos de gran tamaño con Google Cloud y Google Maps Platform. Con esta arquitectura de referencia, puedes crear apps de visualización de datos de ubicación a partir de cualquier dato de BigQuery en GCP que tenga buen rendimiento en cualquier dispositivo mediante la API de Google Maps Datasets.

Acciones siguientes

Material de lectura adicional:

Colaboradores

Autores principales:

  • Ryan Baumann, administrador de Ingeniería de Soluciones de Google Maps Platform