Questo documento descrive perché e come implementare lo stile basato sui dati dinamico dei confini di Google utilizzando l'API Maps JavaScript, utile per una serie di casi d'uso in vari settori e segmenti.
Conteggi dei taxi animati a New York per confine del codice postale (simulati, in time-lapse):
Lo stile basato sui dati è una funzionalità di Google Maps Platform che ti consente di utilizzare i poligoni dei confini amministrativi di Google, applicare uno stile a questi poligoni per la visualizzazione sulle tue mappe e combinare i tuoi dati per creare mappe personalizzate e dettagliate che possono essere utilizzate per l'analisi visiva e una migliore comprensione dei tuoi dati. Questo documento illustra alcuni casi d'uso che spiegano perché e come puoi visualizzare i tuoi dati con lo stile basato sui dati su una mappa quasi in tempo reale integrando feed di dati dinamici.
Lo stile basato sui dati ti consente di creare mappe che mostrano la distribuzione geografica dei dati, personalizzare dinamicamente lo stile dei poligoni e interagire con i dati tramite gli eventi di clic. Queste funzionalità possono essere utilizzate per creare mappe informative e coinvolgenti per una varietà di casi d'uso e settori.
Ecco alcuni esempi di casi d'uso che potrebbero essere applicabili a una mappa che mostra aggiornamenti dinamici dei dati con lo stile basato sui dati:
- Ride sharing:gli aggiornamenti in tempo reale possono essere utilizzati per identificare le aree con una domanda elevata, nel qual caso alcuni fornitori potrebbero applicare prezzi più alti.
- Trasporti:gli aggiornamenti in tempo reale possono essere utilizzati per identificare le aree di congestione, il che aiuterà a determinare i percorsi alternativi migliori.
- Elezioni: la notte delle elezioni, i dati dei sondaggi in tempo reale possono essere utilizzati per visualizzare i risultati man mano che vengono pubblicati.
- Sicurezza dei lavoratori: gli aggiornamenti in tempo reale possono essere utilizzati per monitorare gli eventi man mano che si verificano, identificare le aree ad alto rischio e fornire informazioni sulla situazione agli operatori sul campo.
- Meteo:gli aggiornamenti in tempo reale possono essere utilizzati per monitorare il movimento delle tempeste, identificare i pericoli attuali e fornire avvisi e allerte.
- Ambiente: gli aggiornamenti in tempo reale possono essere utilizzati per monitorare il movimento delle ceneri vulcaniche e di altri inquinanti, identificare le aree di degrado ambientale e monitorare l'impatto dell'attività umana.
In tutte queste situazioni, i clienti possono sbloccare un valore aggiuntivo combinando i loro feed di dati in tempo reale con i confini di Google per visualizzare rapidamente e facilmente i loro dati su una mappa, ottenendo così il superpotere di insight quasi istantanei per un processo decisionale più informato.
Approccio architettonico alla soluzione
Ora vediamo come creare una mappa utilizzando lo stile basato sui dati per visualizzare i dati dinamici. Come illustrato in precedenza, il caso d'uso è un conteggio dei taxi di New York visualizzati per codice postale. Questo può essere utile per gli utenti per capire quanto sarà facile chiamare un taxi.
Ecco un diagramma dell'architettura dell'applicazione dell'approccio:
La soluzione di stile dinamico basato sui dati
Ora vediamo i passaggi necessari per implementare una mappa coropletica dinamica con stile basato sui dati per il tuo set di dati.
Questa soluzione ti consente di visualizzare un set di dati ipotetico della densità dei taxi in tempo reale a New York per codice postale. Anche se questi non sono dati reali, hanno applicazioni reali e ti danno un'idea della potenza e delle funzionalità di come i dati dinamici possono essere visualizzati sulla mappa con lo stile basato sui dati.
Passaggio 1: scegli i dati da visualizzare e uniscili a un ID luogo di confine
Il primo passaggio consiste nell'identificare i dati che vuoi visualizzare e assicurarti che possano essere abbinati ai confini di Google. Puoi eseguire questa corrispondenza lato client chiamando il metodo di callback findPlaceFromQuery per ogni postalCode. Tieni presente che i codici postali negli Stati Uniti hanno nomi distinti, ma altri livelli amministrativi no. Se i risultati potrebbero essere ambigui, assicurati di selezionare l'ID luogo corretto per la query.
const request = {
query: postalCode,
fields: ['place_id'],
};
function findPlaceId() {
placesService.findPlaceFromQuery(request, function (results, status) {
if (status === google.maps.places.PlacesServiceStatus.OK) {
console.log(results[0]);
}
});
}
Se i tuoi dati contengono valori di latitudine e longitudine, puoi anche utilizzare l'API Geocoding con il filtro dei componenti per risolvere i valori di latitudine/longitudine in valori di ID luogo per il livello degli elementi a cui vuoi applicare lo stile. In questo esempio, applicherai uno stile al livello degli elementi POSTAL_CODE.
Passaggio 2: connettiti ai dati in tempo reale
Esistono vari modi per connettersi alle origini dati e l'implementazione migliore dipenderà dalle tue esigenze specifiche e dalla tua infrastruttura tecnica. In questo caso, supponiamo che i tuoi dati si trovino in una tabella BigQuery con due colonne: "zip_code" e "taxi_count" e che li interrogherai tramite una funzione Cloud Functions for Firebase.
async function queryNycTaxis() {
// Queries the NYC Taxis dataset.
// Create a client
const bigqueryClient = new BigQuery();
// The SQL query to run
const sqlQuery = 'SELECT zip_code, taxi_count
FROM \'YOUR_DATASET_ID.TABLE\' LIMIT 100';
const options = {
query: sqlQuery,
// Location must match that of the dataset(s)
// referenced in the query.
location: 'US',
};
// Run the query
const [rows] = await bigqueryClient.query(options);
rows.forEach(row => {
const postalCode = row['zip_code'];
const taxiCount = row['taxi_count'];
});
}
Successivamente, dovrai assicurarti di mantenere i dati aggiornati. Un modo per farlo è chiamare la query precedente utilizzando un web worker e impostare un timer per aggiornare i dati utilizzando la funzione setInterval. Puoi impostare l'intervallo su un valore appropriato, ad esempio aggiornare la mappa ogni 15 secondi. Ogni volta che trascorre l'intervallo di tempo, il web worker richiederà i valori taxiCount aggiornati per postalCode.
Ora che possiamo eseguire query e aggiornare i dati, assicuriamoci che l'aspetto dei poligoni della mappa rifletta queste modifiche.
Passaggio 3: applica gli stili basati sui dati alla mappa
Ora che hai i valori dei dati dinamici necessari per creare e applicare uno stile visivo ai confini dei codici postali nella tua istanza di Maps JavaScript come oggetto JSON, è il momento di applicare uno stile come mappa coropletica.
In questo esempio, lo stile della mappa verrà applicato in base al numero di taxi in ogni codice postale, per dare agli utenti un'idea della densità e della disponibilità dei taxi nella loro zona. Lo stile varia in base ai valori del numero di taxi. Le aree con il minor numero di taxi avranno uno stile viola e la mappa a gradiente di colore passerà dal rosso all'arancione, per finire con il giallo dei taxi di New York per le aree con la densità più elevata. Per questa combinazione di colori, applicherai questi valori di colore a fillColor e strokeColor. Impostando fillOpacity su 0,5, gli utenti possono vedere la mappa sottostante, mentre impostando strokeOpacity su 1,0 possono distinguere i confini dei poligoni dello stesso colore:
const featureLayer = map.getFeatureLayer(
google.maps.FeatureType.POSTAL_CODE
);
featureLayer.style = (featureStyleFunctionOptions) => {
const placeFeature = featureStyleFunctionOptions.feature;
// taxiCount per (postal_code) PlaceID
const taxiCount = zips[placeFeature.placeId];
let fillColor;
let strokeColor;
// Apply colors to features based on taxiCount values
if (taxiCount < 8) {
fillColor = "#571845";
strokeColor = "#571845";
} else if (taxiCount < 13) {
fillColor = "#900c3e";
strokeColor = "#900c3e";
} else if (taxiCount < 21) {
fillColor = "#c60039";
strokeColor = "#c60039";
} else if (taxiCount < 34) {
fillColor = "#fe5733";
strokeColor = "#fe5733";
// keep else if or the whole map gets this style with else
} else if (taxiCount >= 34) {
fillColor = "#fec30f";
strokeColor = "#fec30f";
}
return {
fillColor,
strokeColor,
fillOpacity: 0.5,
strokeOpacity: 1.0,
};
Conclusione
Lo stile basato sui dati per i confini di Google consente di utilizzare i tuoi dati per applicare uno stile alla mappa per una serie di implementazioni in vari settori e segmenti. La connessione ai dati in tempo reale ti consente di comunicare cosa sta succedendo, dove sta succedendo e mentre sta succedendo. Questa funzionalità ha il potenziale di sbloccare il valore dei tuoi dati in tempo reale e aiutare gli utenti a comprenderli meglio in tempo reale, nel mondo reale.
Azioni successive
- Guarda il webinar How to use Data-driven styling to style Google map boundaries.
- Fai un ulteriore passo avanti nella visualizzazione con gli eventi di clic per lo stile basato sui dati.
- Valuta la possibilità di aggiungere indicatori avanzati alla tua mappa.
Collaboratori
Autore principale:
Jim Leflar | Google Maps Platform Solutions Engineer