Visualice sus datos con BigQuery y la API de Datasets

En este documento, se proporciona una arquitectura de referencia y ejemplos para crear visualizaciones de datos de mapas con datos de ubicación en Google Cloud Platform BigQuery 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 registros del movimiento de flotas de vehículos móviles.

Las visualizaciones de datos cartográficos son una herramienta potente para atraer a los usuarios y descubrir estadísticas espaciales en los datos de ubicación. Los datos de ubicación son datos que tienen 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, es difícil para los desarrolladores de apps hacer grandes visualizaciones de datos cartográficos con buen rendimiento y una excelente experiencia del usuario. Los datos de gran tamaño deben cargarse en la memoria del cliente, lo que hace que los primeros tiempos de carga del mapa sean lentos. El elemento visual debe tener un buen rendimiento en todos los dispositivos, incluidos los teléfonos celulares de gama baja que tengan restricciones de memoria y GPU. Por último, los desarrolladores deben elegir una biblioteca de renderización de datos de gran tamaño que sea portátil, confiable y tenga buen rendimiento con grandes datos.

Arquitectura de referencia

Desarrollar apps con visualizaciones de datos grandes requiere dos componentes principales.

  1. Backend del cliente: Todos los datos y servicios de la app de backend, como el procesamiento y el almacenamiento
  2. 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 sobre 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 que está en la 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 de menos de 5 MB o se actualizan con mucha frecuencia (p.ej., un pronóstico de un radar meteorológico en vivo), considera entregar datos como un objeto geojson del cliente en tu app y procésalo 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 en el archivo de origen 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 única a nivel global para cada función. Un ID único te permite seleccionar y diseñar un componente específico o unir datos a un componente para visualizarlo, por ejemplo, definir el diseño de un componente seleccionado en el evento de usuario "clic".
    2. Aplica formato a tus datos como CSV o GeoJSON según 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 SQL CSV. Los conjuntos de datos admiten la importación de geometrías de un archivo CSV en formato de texto conocido (WKT) a partir de una columna llamada wkt.
    4. Verifica que tus datos sean de formas geométricas y tipos de datos válidos. Por ejemplo, GeoJSON debe estar en el sistema de coordenadas WGS84, el orden de devanado geométrico, etcétera.
    5. Usa una herramienta como geojson-validate para asegurarte de que todas las geometrías en un archivo fuente sean válidas, o bien ogr2ogr para transformar un archivo de origen 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 en el tiempo de ejecución con una clave de identificador único (ejemplo).
    2. Cuando sea posible, usa tipos de datos enteros para objetos de propiedad a fin de minimizar el espacio de almacenamiento de mosaicos y mantener el rendimiento de las tarjetas para cargarse 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 complejas de polígonos para reducir el tamaño del 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 usarlos en la API de Maps JS.
    2. Los mosaicos de mapas son un sistema de indexación basado en zoom que proporciona formas más eficientes de cargar datos en una aplicación visual.
    3. Los mosaicos de mapas pueden quitar elementos densos o complejos a niveles de zoom más bajos. Cuando un usuario aleja el mapa de un estado o país (p.ej., z5-z12), el aspecto puede diferir del zoom en una ciudad o un vecindario (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 a la consola de Cloud
  2. Asegúrate de tener configurado un proyecto de GCP y una cuenta de facturación.

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 contiene los datos de Open Street Map (OSM) de todo el mundo, incluidos todos los atributos 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 todas las vías filtradas solo en Londres con 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 muestra lo siguiente:

  1. un identificador único para cada función osm_id
  2. el feature_type, p.ej., puntos, líneas, etcétera
  3. El name del componente, p.ej., Paddington Station
  4. El tipo railway, p.ej., main, tourism, militar, etcétera
  5. El objeto wkt del componente: geometría de punto, línea o polígono en formato WKT. WKT es el formato de datos estándar que se muestra en las columnas de ubicación geográfica de BigQuery en una consulta.

Nota: Para validar visualmente los resultados de tus consultas antes de crear un conjunto de datos, puedes visualizar rápidamente tus datos en un panel de BigQuery usando 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 del archivo CSV

A continuación, crea un conjunto de datos de Google Maps Platform a partir del resultado de la consulta en Google Cloud Storage (GCS). Con la API de Dataset, puedes crear un conjunto de datos y, luego, subir datos a tu conjunto de datos 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. Hay bibliotecas cliente de Python y Node.js para llamar a la API de Datasets desde la lógica del backend de tu app. Además, hay una GUI de conjuntos de datos para crear conjuntos de datos de forma manual en la consola de Cloud.

Una vez que se complete la carga del conjunto de datos, puedes obtener una vista previa de tu conjunto de datos en la GUI de Conjuntos de datos.

Vista previa del conjunto de datos

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

Una vez que se crea el 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 estilo 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 usando la API de Maps JS. Inicializa tu objeto de mapa usando el mapID asociado a tu conjunto de datos del paso anterior. Luego, establece el estilo y la interactividad de tu capa del conjunto de datos. Para obtener más información, consulta la guía completa sobre diseño basado en datos con conjuntos de datos.

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

Nota: Asegúrate de usar 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 del conjunto de datos a tu aplicación de mapas. Para agregar una atribución de OSM, sigue el ejemplo de código de atribución en los documentos que cumple con los lineamientos de OSM.

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

mapa ferroviario de londres

A partir de aquí, puedes ampliar tu visualización del mapa en la función setStyle() agregando lógica para filtrar características, agregar 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 una implementación de ejemplo de una aplicación de visualización de datos de gran tamaño usando 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 en GCP BigQuery que tenga un buen rendimiento en cualquier dispositivo gracias a la API de Google Maps Datasets.

Acciones siguientes

Material de lectura adicional:

Colaboradores

Autores principales:

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