Chất lượng không khí và phấn hoa ở các khu vực và tuyến đường
Mục tiêu
Air Quality và Pollen API (API Chất lượng không khí và phấn hoa) mang đến những cơ hội tuyệt vời để bổ sung thêm thông tin chi tiết về một chuyến đi hoặc bản đồ ở bất kỳ vị trí nào. Có hai cách để sử dụng dữ liệu có sẵn từ các API đó: chỉ mục dưới dạng văn bản hoặc ô bản đồ nhiệt dưới dạng hình ảnh raster.

Khi sử dụng các điểm cuối API ô bản đồ nhiệt, bạn có thể gặp phải một số thách thức khi tải các ô raster riêng lẻ, chẳng hạn như:
- cách tải các ô trên Google Maps trên web? (cũng để tuân thủ Điều khoản sử dụng API)
- cách quản lý số lượng yêu cầu trong quá trình sử dụng?
- cách đọc giá trị của ô?
Các trường hợp sử dụng mẫu
Bạn sẽ được xem các trường hợp sử dụng mẫu để cố gắng trả lời các câu hỏi nêu trên.
- Chất lượng không khí và phấn hoa trong một khu vực: hình dung dữ liệu raster của ô bản đồ nhiệt (điều kiện hiện tại) bên trong một hoặc nhiều đa giác tuỳ chỉnh.
- Chất lượng không khí và phấn hoa dọc theo tuyến đường: hình dung dữ liệu raster của ô bản đồ nhiệt (điều kiện hiện tại) được ánh xạ trên các điểm tham chiếu của tuyến đường.
Triển khai
Bạn sẽ khám phá những ô có sẵn và cách tải các ô đó trong trải nghiệm trên web. Bạn cũng sẽ thấy những việc có thể làm để quản lý số lượng yêu cầu trong trường hợp các ô được tải lên bản đồ. Cuối cùng, bạn sẽ được hướng dẫn cách đọc các ô.
Các loại ô bản đồ nhiệt có sẵn
Air Quality API
– UAQI_RED_GREEN (UAQI, bảng màu đỏ-xanh lục): Bảng màu đỏ-xanh lục của Chỉ số chất lượng không khí toàn cầu.
– UAQI_INDIGO_PERSIAN (UAQI, bảng màu chàm-ba tư): Bảng màu chàm-ba tư của Chỉ số chất lượng không khí toàn cầu.
– PM25_INDIGO_PERSIAN: Bảng màu chàm-ba tư của chỉ số PM2.5.
– GBR_DEFRA: Bảng màu của Chỉ số chất lượng không khí hằng ngày (Vương quốc Anh).
– DEU_UBA: Bảng màu của Chỉ số chất lượng không khí địa phương của Đức.
– CAN_EC: Bảng màu của Chỉ số sức khoẻ theo chất lượng không khí của Canada.
– FRA_ATMO: Bảng màu của Chỉ số chất lượng không khí của Pháp.
– US_AQI: Bảng màu của Chỉ số chất lượng không khí của Hoa Kỳ.
Pollen API
– TREE_UP: Loại bản đồ nhiệt sẽ biểu thị bản đồ đồ hoạ chỉ mục cây.
– GRASS_UPI: Loại bản đồ nhiệt sẽ biểu thị bản đồ đồ hoạ chỉ số cỏ.
– WEED_UPI: Loại bản đồ nhiệt sẽ biểu thị bản đồ đồ hoạ chỉ số cỏ dại.
Hiển thị ô bản đồ nhiệt trên web
Tải các ô và áp dụng mặt nạ vectơ để chỉ hiển thị các khu vực mong muốn của khung nhìn bản đồ.
Tải các ô
- Sử dụng Maps JavaScript API để tải bản đồ cơ sở của Google và tải thư viện deckgl để chuẩn bị tải hình ảnh ô raster.
- Sử dụng deck.gl TileLayer để tải ô bản đồ nhiệt Chất lượng không khí . Thao tác này sẽ hiển thị nhãn bản đồ nền của Google Maps trên các ô bản đồ nhiệt (không giống như lớp phủ tuỳ chỉnh của Maps JavaScript)
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;
Áp dụng mặt nạ vectơ
Bạn có thể ẩn hoặc hiện bất kỳ phần nào của ô bản đồ nhiệt. Quan trọng: Bạn cần phải thu thập dữ liệu sẽ được dùng để tạo mặt nạ vectơ áp dụng cho các ô bản đồ nhiệt.
- Trong một khu vực:
sử dụng deck.gl GeoJson để tạo Mặt nạ trên Lớp ô Chất lượng không khí.
Ví dụ dưới đây sử dụng geojson đa giác của Pháp
// geojson sample { "type": "Feature", "geometry": { "type": "MultiPolygon", "coordinates": [[[[-54.111527,2.11427],...[-54.194491,2.163073]]]] }, "properties": { "name": "France" } }
Sau đây là tài liệu tham khảo về cách triển khai 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 ... }) ]
- Dọc theo một tuyến đường: Sử dụng deck.gl với TripsLayer để tạo Mặt nạ trên Air Quality TileLayer
Ô bản đồ nhiệt Chất lượng không khí trên một chuyến đi
Quản lý yêu cầu và chi phí API
Mặc dù hành vi mặc định của trình duyệt thường là lưu vào bộ nhớ đệm tất cả các ô đã tải trong bộ nhớ cục bộ (trong cùng một phiên), nhưng bạn có thể tối ưu hoá thêm:
- Hạn chế khu vực tải: tạo một hộp giới hạn (màu đỏ) và gán hộp đó cho lớp, chỉ các ô bản đồ nhiệt (màu xanh dương) bao phủ hộp giới hạn mới tải ở bất kỳ mức thu phóng nào
Hộp giới hạn (màu đỏ), ô bản đồ nhiệt (màu xanh dương)
// Heatmap Tile layer new TileLayer({ id: 'heatmap-tiles', extent: [minX, minY, maxX, maxY] // bounding box: southwest lat, southwest lng, northeast lat, northeast lng ... })
- Đặt kích thước ô hiển thị trực quan để bao phủ toàn bộ khung nhìn ở bất kỳ mức thu phóng nào; nên đặt trong khoảng từ 256 đến 1024.
Quan trọng: Các ô API vẫn ở độ phân giải 256x256 nhưng việc điều chỉnh hiển thị trực quan sẽ cho phép bạn tăng/giảm số lượng yêu cầu ô để bao phủ toàn bộ Khung nhìn bản đồ
(đảm bảo rằng các ô này hoạt động với minZoom và maxZoom của Google Maps, tức là:
tilesize:1024sẽ không tải các ô ở mức thu phóng 0 hoặc 1).
Khung nhìn có ô 256x256 pixel so với 512x512 pixel
// Heatmap Tile layer new TileLayer({ id: 'heatmap-tiles', tilesize:256, // <-- change to 512 for instance ... })
Đọc giá trị pixel
Cách hiển thị giá trị tương ứng trên thang màu
Bạn có thể sử dụng Luma.gl và phương thức readPixelsToArray của thư viện này trên một sự kiện onClick được gán làm prop cho lớp deck.gl.
Giá trị pixel: rgba(128,0,0,255)
THẤP
CAO
// 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); } } })
Kết luận
Bạn đã khám phá cách các điểm cuối API ô bản đồ nhiệt Chất lượng không khí và Phấn hoa có thể:
- được tải trên Google Maps trên web, đồng thời đảm bảo tuân thủ Điều khoản sử dụng
- được tối ưu hoá để phù hợp với trường hợp sử dụng của bạn
- đọc giá trị của ô
Các bước tiếp theo
Đề xuất đọc thêm:
Người đóng góp
Tác giả chính:
Thomas Anglaret | Kỹ sư giải pháp Google Maps Platform