Qualità dell'aria e polline in zone e percorsi
Obiettivo
Le API Air Quality e Pollen offrono grandi opportunità per aggiungere più informazioni su un viaggio o su una mappa in qualsiasi località specifica. Esistono due modi per consumare i dati disponibili da queste API: indicizzare come testo o riquadri della mappa termica come immagini raster.
Quando utilizzi gli endpoint delle API riquadri mappa termica, potresti dover affrontare un paio di 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: visualizzare i dati raster dei riquadri della mappa termica (condizioni attuali) mappati sulle tappe delle route.
Implementazione
Scoprirai quali riquadri sono disponibili e come possono essere caricati in un'esperienza web. Vedrai anche cosa puoi 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 i riquadri.
Riquadri della mappa termica disponibili per tipo
API Air Quality
- UAQI_RED_GREEN (UAQI, tavolozza rosso-verde): tavolozza rosso-verde dell'indice di qualità dell'aria universale.
- UAQI_INDIGO_PERSIAN (UAQI, tavolozza indaco-persiano): tavolozza dell'indice di qualità dell'aria universale indaco-persiano.
- PM25_INDIGO_PERSIAN: tavolozza indaco-persiana con indice PM2.5.
- GBR_DEFRA: tavolozza dei colori dell'indice giornaliero di qualità dell'aria (Regno Unito).
- DEU_UBA: tavolozza dei colori dell'indice di qualità dell'aria locale 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 rappresenterà una mappa grafica con indice ad albero.
- GRASS_UPI: il tipo di mappa termica rappresenterà una mappa grafica con indice erba.
- WEED_UPI: il tipo di mappa termica rappresenterà graficamente un indice di erbe infestanti.
Visualizza riquadri della mappa termica in Web
Carica i riquadri e applica una maschera vettoriale per visualizzare solo le aree desiderate dell'area visibile della mappa.
Caricamento dei riquadri
- Utilizza l'API Maps JavaScript per caricare la mappa base di Google e la libreria deckgl in modo da prepararti al caricamento delle immagini dei riquadri raster.
- Utilizza deck.gl TileLayer per caricare i riquadri della mappa termica 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 termica. Importante: dovrai acquisire i dati che verranno utilizzati per creare la maschera vettoriale applicata ai riquadri della mappa termica.
- In un'area:
usa deck.gl GeoJson per creare una maschera sul livello Tile di qualità dell'aria.
L'esempio seguente utilizza un geoJSON multipoligono 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 suo TripsLayer per creare una maschera sopra il Tile Layer di qualità dell'aria.
Riquadro della mappa termica della qualità dell'aria durante una corsa
Gestisci richieste API e costi
Anche se il comportamento predefinito del browser prevede di solito la memorizzazione nella cache di tutti i riquadri caricati nello spazio di archiviazione locale (nella stessa sessione), è possibile ottimizzare ulteriormente:
- Limita l'area di caricamento: crea un riquadro di delimitazione (in rosso) e assegnalo al livello; solo i riquadri della mappa termica (in blu) che coprono il riquadro di delimitazione verranno caricati a qualsiasi livello di zoom specificato
Riquadro di delimitazione (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 di visualizzazione visiva in modo da coprire l'intera area visibile a qualsiasi livello di zoom specificato. consigliato: compreso tra 256 e 1024.
Importante: i riquadri delle API rimangono alla risoluzione 256x256, ma la regolazione visiva della visualizzazione ti consentirà di aumentare/diminuire il numero di richieste di riquadri per coprire l'intera area visibile della mappa
(assicurati che funzioni con minZoom e maxZoom di Google Maps, vale a dire
tilesize:1024
non verranno caricati riquadri con lo 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 ... })
Leggi valori 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 start assegnato come prop al livello deck.gl.
Valore 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 per i riquadri Qualità dell'aria e Pollen possano essere:
- caricati su una mappa di Google sul web, assicurandoti inoltre di essere conformi ai Termini e condizioni d'uso
- ottimizzate per corrispondere al tuo caso d'uso
- leggi i valori dei riquadri
Azioni successive
Ulteriori letture suggerite:
Collaboratori
Autori principali:
Thomas Anglaret | Solutions Engineer di Google Maps Platform