Qualità dell'aria e polline in aree e percorsi
Obiettivo
Le API Air Quality e Pollen offrono ottime opportunità per aggiungere ulteriori approfondimenti a un viaggio o a una mappa in una determinata località. Esistono due modi per utilizzare i dati disponibili da queste API: indicizzare come testo o riquadri della mappa di calore come immagini raster.
Quando utilizzi gli endpoint delle API dei riquadri della mappa di calore, potresti riscontrare alcuni problemi durante il caricamento dei singoli riquadri raster, ad esempio:
- come caricare i riquadri su una mappa di Google sul Web? (anche per rispettare i Termini e condizioni d'uso delle API)
- Come gestire il numero di richieste durante l'esperienza?
- Come leggere i valori dei riquadri?
Esempi di casi d'uso
Ti verranno presentati casi d'uso di esempio per provare a rispondere alle domande precedenti.
- Qualità dell'aria e polline in un'area: visualizza i dati raster dei riquadri della mappa termica (condizioni attuali) all'interno di uno o più poligoni personalizzati.
- Qualità dell'aria e polline lungo il percorso: visualizza i dati raster dei riquadri della mappa termica (condizioni attuali) mappati sui waypoint dei percorsi.
Implementazione
Scoprirai quali riquadri sono disponibili e come possono essere caricati in un'esperienza web. Vedrai anche cosa si può fare per gestire il numero di richieste in uno scenario in cui i riquadri vengono caricati su una mappa. Infine, ti verrà mostrato come leggere le schede.
Schede della mappa di calore disponibili per tipo
API Air Quality
- UAQI_RED_GREEN (UAQI, tavolozza rosso-verde): tavolozza rosso-verde dell'IQA universale.
- UAQI_INDIGO_PERSIAN (UAQI, tavolozza persiana): tavolozza dell'indice di qualità dell'aria universale indaco-persiano.
- PM25_INDIGO_PERSIAN: tavolozza indaco-persiana dell'indice PM2,5.
- GBR_DEFRA: tavolozza dei colori dell'indice giornaliero di qualità dell'aria (Regno Unito).
- DEU_UBA: tavolozza dei colori dell'indice locale di qualità dell'aria tedesco.
- CAN_EC: tavolozza dei colori dell'indice di qualità dell'aria canadese.
- FRA_ATMO: tavolozza dei colori dell'indice di qualità dell'aria in Francia.
- US_IQA: tavolozza dei colori dell'indice di qualità dell'aria statunitense.
API Pollen
- TREE_UP: il tipo di mappa termica rappresenta una mappa grafica dell'indice ad albero.
- GRASS_UPI: il tipo di mappa termica rappresenta una mappa grafica dell'indice di vegetazione.
- WEED_UPI: il tipo di mappa termica rappresenta una mappa grafica dell'indice delle erbe infestanti.
Mostrare i riquadri della mappa termica sul web
Carica i riquadri e applica una maschera vettoriale per visualizzare solo le aree desiderate dell'area visibile della mappa.
Caricamento delle schede
- Utilizza l'API Maps JavaScript per caricare la mappa di base di Google e la libreria deckgl per prepararti al caricamento delle immagini dei riquadri raster.
- Utilizza TileLayer di deck.gl per caricare i riquadri della mappa termica della qualità dell'aria . Verranno visualizzate le etichette della mappa base di Google Maps sopra i riquadri della mappa termica (a differenza degli overlay personalizzati JavaScript di Maps)
import { TileLayer } from "deck.gl"; import { GoogleMapsOverlay } from "@deck.gl/google-maps"; // const TileLayer = deck.TileLayer; // const GoogleMapsOverlay = deck.GoogleMapsOverlay; // Initialize and add the map function initMap() { const map = new google.maps.Map(document.getElementById("map"), { center: { lat: 40, lng: -110 }, zoom: 4, }); const apiKey = 'YOUR_API_KEY'; const airqualityType = 'UAQI_RED_GREEN' // AirQuality API heatmap type const deckOverlay = new GoogleMapsOverlay({ layers: [ // Heatmap Tiles layer new TileLayer({ id: 'heatmap-tiles', data: 'https://airquality.googleapis.com/v1/mapTypes/'+ heatmapType + +'/heatmapTiles/{z}/{x}/{y}?key=' + apiKey, ... }) ], }); deckOverlay.setMap(map); } window.initMap = initMap;
Applicazione di una maschera vettoriale
Puoi nascondere o mostrare visivamente qualsiasi parte dei riquadri della mappa di calore. Importante: dovrai acquisire i dati che verranno utilizzati per creare la maschera vettoriale applicata ai riquadri della mappa di calore.
- In un'area:
Utilizza deck.gl GeoJson per creare una maschera sul livello Tile di qualità dell'aria.
L'esempio seguente utilizza un geojson multiplo della Francia
// geojson sample { "type": "Feature", "geometry": { "type": "MultiPolygon", "coordinates": [[[[-54.111527,2.11427],...[-54.194491,2.163073]]]] }, "properties": { "name": "France" } }
Ecco un riferimento per l'implementazione di deckgl:
// Loaded layers in maps overlay const deckOverlay = new GoogleMapsOverlay({ layers: layers }); const MaskExtension = deck.MaskExtension; // or import extension ... // As part of object containing the different layers const layers = [ // Masking layer new GeoJsonLayer({ id: 'country-vector', operation: 'mask', data: "geojson.json", // <-- any custom geometry }) ... ... // Heatmap Tiles layer new TileLayer({ id: 'heatmap-tiles', maskId: 'country-vector', // <-- same as mask id extensions: [new MaskExtension()], // <-- enable mask extension ... }) ]
- Lungo un percorso: utilizza deck.gl con il relativo TripsLayer per creare una maschera sul livello Tile di qualità dell'aria
Riquadro della mappa termica della qualità dell'aria durante una corsa
Gestire le richieste API e i costi
Sebbene il comportamento predefinito del browser sia in genere memorizzare nella cache tutti i riquadri caricati nello spazio di archiviazione locale (all'interno della stessa sessione), puoi ottimizzare ulteriormente:
- Limita l'area di caricamento: crea un riquadro di delimitazione (in rosso) e assegnalo al livello. A un determinato livello di zoom verranno caricati solo i riquadri della mappa di calore (in blu) che coprono il riquadro di delimitazione.
Riquadro di selezione (in rosso), riquadri della mappa termica (in blu)
// Heatmap Tile layer new TileLayer({ id: 'heatmap-tiles', extent: [minX, minY, maxX, maxY] // bounding box: southwest lat, southwest lng, northeast lat, northeast lng ... })
- Imposta le dimensioni del riquadro del display in modo da coprire l'intera area visibile a qualsiasi livello di zoom; opzione consigliata: da 256 a 1024.
Importante: i riquadri delle API rimangono a una risoluzione di 256 x 256, ma la regolazione della visualizzazione ti consente di aumentare/diminuire il numero di richieste di riquadri per coprire l'intera area visibile della mappa
(assicurati che funzioni con minZoom e maxZoom della mappa di Google, ad es.
tilesize:1024
non carica le tessere con zoom 0 o 1).
Area visibile con riquadri 256 x 256 pixel rispetto a 512 x 512 pixel
// Heatmap Tile layer new TileLayer({ id: 'heatmap-tiles', tilesize:256, // <-- change to 512 for instance ... })
Leggere i valori dei pixel
Per visualizzare il valore corrispondente su una scala di colori
Puoi utilizzare la libreria Luma.gl e il suo metodo readPixelsToArray su un evento ValueTrack assegnato come prop al livello deck.gl.
Valore del pixel: rgba(128,0,0,255)
BASSO ALTO
// Uint8Array pixel sample import { readPixelsToArray } from "@luma.gl/core"; ... // assign on the TileLayer new TileLayer({ id: 'heatmap-tiles', ... onClick: ({ bitmap, layer }) => { if (bitmap) { const pixel = readPixelsToArray(layer.props.image, { sourceX: bitmap.pixel[0], sourceY: bitmap.pixel[1], sourceWidth: 1, sourceHeight: 1 }); // console.log("color picked:"+ pixel); } } })
Conclusione
Hai scoperto come gli endpoint API delle mappe termiche Air Quality e Pollen possono essere:
- caricate su una mappa di Google sul web, assicurandosi inoltre di rispettare i Termini e condizioni d'uso
- ottimizzate per corrispondere al tuo caso d'uso
- Leggere i valori delle schede
Azioni successive
Letture consigliate:
Collaboratori
Autori principali:
Thomas Anglaret | Solutions Engineer di Google Maps Platform