Visualizzare i dati con BigQuery e l'API Datasets

Questo documento fornisce un'architettura di riferimento ed un esempio per creare visualizzazioni di dati sulla mappa con dati sulla posizione in BigQuery di Google Cloud e nell'API Google Maps Platform Datasets, ad esempio per analizzare dati municipali aperti, creare una mappa di copertura delle telecomunicazioni o visualizzare tracce dei movimenti dei veicoli mobili.

Le visualizzazioni dei dati sulla mappa sono uno strumento efficace per coinvolgere gli utenti e scoprire informazioni spaziali nei dati sulla posizione. I dati sulla posizione sono dati che contengono elementi punto, linea o poligono. Ad esempio, le mappe meteorologiche aiutano i consumatori a comprendere e pianificare le corse e a prepararsi per le tempeste; le mappe di business intelligence aiutano gli utenti a scoprire informazioni dall'analisi dei dati, mentre le mappe delle telecomunicazioni aiutano gli utenti a comprendere la copertura e la qualità dei loro fornitori in una determinata area coperta dal servizio.

Tuttavia, è difficile per gli sviluppatori di app creare visualizzazioni di grandi dimensioni dei dati delle mappe che funzionino e offrano un'esperienza utente ottimale. I dati di grandi dimensioni devono essere caricati sul lato client della memoria, causando un rallentamento dei tempi di caricamento della prima mappa. L'immagine deve essere efficace su tutti i dispositivi, compresi i telefoni cellulari di fascia bassa con vincoli di memoria e GPU. Infine gli sviluppatori devono scegliere una grande libreria di rendering dei dati che sia portabile, affidabile e dalle prestazioni elevate con dati di grandi dimensioni.

Architettura di riferimento

Lo sviluppo di app con visualizzazioni di dati di grandi dimensioni richiede due componenti principali.

  1. Backend del cliente: tutti i dati e i servizi delle app di backend, come elaborazione e archiviazione.
  2. Cliente: l'interfaccia utente dell'app con un componente di visualizzazione delle mappe.

Di seguito è riportato un diagramma di sistema che mostra come questi due componenti interagiscono con l'utente dell'app, Google Cloud e Google Maps Platform per creare un'app di visualizzazione dati di grandi dimensioni.

Diagramma dell'architettura

⭐ Nota: l'API Maps Datasets è un prodotto pre-GA. Consulta i dettagli nei Termini di servizio.

Note sul layout

È necessario seguire una serie di considerazioni di progettazione per creare una visualizzazione dei dati ad alte prestazioni utilizzando Google Cloud e Google Maps Platform.

  1. Dimensioni dei dati di origine e frequenza di aggiornamento.
    1. Se i dati di origine in formato geoJSON sono < 5 MB o vengono aggiornati molto di frequente, ad esempio una previsione radar meteo in tempo reale, puoi fornire i dati come lato client dell'oggetto geoJSON nella tua app ed eseguire il rendering con un livello deck.gl.
    2. Se i tuoi dati hanno dimensioni superiori a 5 MB e vengono aggiornati non prima di una volta all'ora, considera l'architettura dell'API Datasets descritta in questo documento.
      1. I set di dati supportano file di dimensioni fino a 350 MB.
      2. Se i dati superano i 350 MB, potresti eliminare o semplificare i dati relativi alla geometria nel file di origine prima di trasferirli ai set di dati (vedi Eliminazione dei dati di seguito).
  2. Schema e formato
    1. Assicurati che i dati abbiano una proprietà ID univoca a livello globale per ogni funzionalità. L'ID univoco ti consente di selezionare e definire uno stile di un elemento specifico o di unire i dati a una funzionalità da visualizzare, ad esempio per applicare uno stile a una funzionalità selezionata nell'evento utente "clic".
    2. Formatta i dati come CSV o GeoJSON in base alle specifiche dell'API Datasets con nomi di colonna, tipi di dati e tipi di oggetti GeoJSON validi.
    3. Per creare facilmente set di dati da BigQuery, crea una colonna denominata wkt nell'esportazione CSV di SQL. I set di dati supportano l'importazione della geometria da un file CSV nel formato Well-Known Text (WKT) da una colonna denominata wkt.
    4. Verifica che la geometria e i tipi di dati dei dati siano validi. Ad esempio, GeoJSON deve trovarsi nel sistema di coordinate WGS84, nell'ordine di rotazione della geometria e così via.
    5. Utilizza uno strumento come geojson-validate per assicurarti che tutte le geometrie di un file di origine siano valide oppure ogr2ogr per trasformare un file di origine tra formati o sistemi di coordinate.
  3. Eliminazione dei dati
    1. Riduci al minimo il numero di proprietà degli elementi. Puoi unire proprietà aggiuntive a una funzionalità in fase di runtime su una chiave identificatore univoca (esempio).
    2. Se possibile, utilizza tipi di dati interi per gli oggetti della proprietà per ridurre al minimo lo spazio di archiviazione dei riquadri, mantenendo i riquadri ad alte prestazioni per il caricamento tramite HTTPS in un'app client.
    3. Semplifica e/o aggrega geometrie di elementi molto complesse; valuta la possibilità di utilizzare funzioni BigQuery come ST_Simplify su geometrie complesse di poligoni per ridurre le dimensioni del file di origine e migliorare le prestazioni delle mappe.
  4. Riquadri
    1. L'API Google Maps Datasets crea riquadri di mappa dal file dei dati di origine per utilizzarli nell'API Maps JS.
    2. I riquadri di mappa sono un sistema di indicizzazione basato su zoom che offre modi più efficienti per caricare dati in un'app visiva.
    3. I riquadri della mappa potrebbero rilasciare elementi densi o complessi a livelli di zoom inferiori. Quando un utente diminuisce lo zoom su uno stato o un paese (ad es. z5-z12), l'aspetto potrebbe essere diverso rispetto a quando viene ingrandito una città o un quartiere (ad es. z13-z18).

Esempio - Ferrovie a Londra

In questo esempio, applicheremo l'architettura di riferimento per creare un'applicazione web con Google Cloud e Google Maps che visualizzi tutte le linee ferroviarie di Londra sulla base dei dati di Open Street Map (OSM).

Prerequisiti

  1. Accesso alla sandbox di BigQuery e alla console Cloud
  2. Assicurati di aver configurato un progetto Google Cloud e un account di fatturazione.

Passaggio 1: esegui query sui dati in BigQuery

Vai a Set di dati pubblici di BigQuery. Il set di dati "bigquery-public-data" e la tabella geo_openstreetmap.planet_features contiene l'intero globo di dati Open Street Map (OSM), che includono tutti gli elementi possibili. Scopri tutte le funzionalità disponibili su cui eseguire query nella Wiki OSM, tra cui amenity, road e landuse.

Utilizza Cloud Shell o la console Cloud di BigQuery(https://console.cloud.google.com) per eseguire query sulla tabella utilizzando SQL. Lo snip di codice riportato di seguito utilizza il comando bq query per eseguire una query su tutte le linee ferroviarie filtrate solo per Londra utilizzando un riquadro di delimitazione e la funzione ST_Intersects().

Per eseguire questa query da Cloud Shell, esegui la seguente snip di codice, aggiornando l'ID progetto, il set di dati e il nome della tabella per il tuo ambiente.

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 query restituisce:

  1. un identificatore univoco per ogni funzionalità osm_id
  2. feature_type, ad es. punti, linee e così via
  3. Il name della funzionalità, ad esempio Paddington Station
  4. Il tipo railway, ad esempio principale, turismo, militare e così via
  5. wkt dell'elemento: geometria di punti, linee o poligoni in formato WKT. WKT è il formato dei dati standard delle colonne Area geografica di BigQuery restituite in una query.

Nota: per convalidare visivamente i risultati della query prima di creare un set di dati, puoi visualizzare rapidamente i dati in una dashboard da BigQuery utilizzando Looker Studio.

Per esportare la tabella in un file CSV in un bucket Google Cloud Storage, utilizza il comando bq Extra in Cloud Shell:

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

Nota: puoi automatizzare ogni passaggio utilizzando Cloud Scheduler per aggiornare regolarmente i dati.

Passaggio 2: crea un set di dati a partire dal file CSV

Poi, crea un set di dati di Google Maps Platform dall'output della query in Google Cloud Storage (GCS). Utilizzando l'API Datasets, puoi creare un set di dati e poi caricare i dati nel tuo set di dati da un file ospitato su GCS.

Per iniziare, abilita l'API Maps Datasets nel tuo progetto Google Cloud ed esamina la documentazione dell'API. Esistono librerie client Python e Node.js per chiamare l'API Datasets dalla logica nel backend dell'app. Inoltre, è disponibile una GUI dei set di dati per creare manualmente i set di dati nella console Cloud.

Al termine del caricamento del set di dati, puoi visualizzare l'anteprima del set di dati nella GUI dei set di dati.

Anteprima del set di dati

Passaggio 4: associa il tuo set di dati a un ID mappa

Una volta creato il set di dati, puoi creare un ID mappa con uno stile di mappa associato. Nell'editor Stile mappa, puoi associare un mapId e uno stile al set di dati. Qui puoi anche applicare stili della mappa basati su cloud per personalizzare l'aspetto della mappa.

Passaggio 5 - Crea la visualizzazione della mappa dell'app client

Infine, puoi aggiungere il set di dati a un'app di visualizzazione dati lato client utilizzando l'API Maps JS. Inizializza l'oggetto mappa utilizzando il mapID associato al tuo set di dati del passaggio precedente. Poi imposta lo stile e l'interattività del livello del set di dati. Per saperne di più, consulta una guida completa agli stili basati sui dati con i set di dati.

Puoi personalizzare lo stile, aggiungere gestori di eventi per modificarlo in modo dinamico e altro ancora utilizzando l'API Maps JS. Guarda gli esempi nella docs. Di seguito definiremo una funzione setStyle per creare lo stile dell'elemento punto e linea per questo esempio in base all'attributo "feature_type".

Nota: assicurati di utilizzare il canale v=beta per l'implementazione dell'API JS di Maps.

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: assicurati di aggiungere sempre l'attribuzione per il tuo set di dati all'app delle mappe. Per aggiungere l'attribuzione OSM, segui l'esempio di codice di attribuzione nei documenti in conformità con le linee guida per OSM.

Questo codice riportato sopra, quando viene inizializzato in un'app web a pagina singola, restituisce la seguente visualizzazione dei dati della mappa:

mappa ferroviaria di londra

Da qui, puoi estendere la visualizzazione della mappa nella funzione setStyle() aggiungendo una logica per filtrare le funzionalità, aggiungere stili in base all'interazione dell'utente e interagendo con il resto dell'applicazione.

Conclusione

In questo articolo abbiamo parlato di un'architettura di riferimento e di un esempio di implementazione di un'applicazione di visualizzazione dati di grandi dimensioni utilizzando Google Cloud e Google Maps Platform. Grazie a questa architettura di riferimento, puoi creare app di visualizzazione dei dati sulla posizione da qualsiasi dato in BigQuery di Google Cloud e con prestazioni elevate su qualsiasi dispositivo utilizzando l'API Google Maps Datasets.

Azioni successive

Visita anche:

Collaboratori

Autori principali:

  • Ryan Baumann, Solutions Engineering Manager di Google Maps Platform