วัตถุประสงค์
Air Quality และ Pollen API เป็นโอกาสที่ยอดเยี่ยมในการเพิ่ม ข้อมูลเชิงลึก เกี่ยวกับการเดินทางหรือแผนที่ในสถานที่ใดก็ตาม คุณใช้ข้อมูลที่ได้จาก API เหล่านี้ได้ 2 วิธี ได้แก่ ดัชนีเป็นข้อความหรือการ์ดแผนที่ความหนาแน่นเป็นรูปภาพแรสเตอร์

ขณะใช้ปลายทาง API ของการ์ดแผนที่ความหนาแน่น heatmap tiles คุณอาจพบความท้าทาย 2-3 อย่างขณะโหลดการ์ดแรสเตอร์แต่ละรายการ เช่น
- วิธีโหลดการ์ดใน Google Maps บนเว็บ (รวมถึงการปฏิบัติตามข้อกำหนดในการให้บริการของ API)
- วิธีจัดการจำนวนคำขอระหว่างประสบการณ์การใช้งาน
- วิธีอ่านค่าการ์ด
กรณีการใช้งานตัวอย่าง
คุณจะเห็นกรณีการใช้งานตัวอย่างเพื่อพยายามตอบคำถามข้างต้น
- คุณภาพอากาศและละอองเกสร ในพื้นที่: แสดงข้อมูลแรสเตอร์ของการ์ดแผนที่ความหนาแน่น (สภาพปัจจุบัน) ภายในรูปหลายเหลี่ยมที่กำหนดเองอย่างน้อย 1 รูป
- คุณภาพอากาศและละอองเกสร ตามเส้นทาง: แสดงข้อมูลแรสเตอร์ของการ์ดแผนที่ความหนาแน่น (สภาพปัจจุบัน) ที่แมปกับจุดอ้างอิงของเส้นทาง
การใช้งาน
คุณจะได้ทราบว่ามีการ์ดใดบ้างที่ใช้ได้และวิธีโหลดการ์ดเหล่านั้นในประสบการณ์การใช้งานบนเว็บ นอกจากนี้ คุณจะได้เห็นสิ่งที่ทำได้เพื่อจัดการจำนวนคำขอในสถานการณ์ที่โหลดการ์ดลงในแผนที่ และสุดท้าย คุณจะได้ทราบวิธีอ่านการ์ด
การ์ดแผนที่ความหนาแน่นที่ใช้ได้ตามประเภท
Air Quality API
- UAQI_RED_GREEN (UAQI, จานสีแดง-เขียว): ดัชนีคุณภาพอากาศสากล จานสีแดง-เขียว
- UAQI_INDIGO_PERSIAN (UAQI, จานสีคราม-เปอร์เซีย): ดัชนีคุณภาพอากาศสากล จานสีคราม-เปอร์เซีย
- PM25_INDIGO_PERSIAN: ดัชนี PM2.5 จานสีคราม-เปอร์เซีย
- GBR_DEFRA: จานสีดัชนีคุณภาพอากาศรายวัน (สหราชอาณาจักร)
- DEU_UBA: จานสีดัชนีคุณภาพอากาศในพื้นที่ของเยอรมนี
- CAN_EC: จานสีดัชนีคุณภาพอากาศและสุขภาพของแคนาดา
- FRA_ATMO: จานสีดัชนีคุณภาพอากาศของฝรั่งเศส
- US_AQI: จานสีดัชนีคุณภาพอากาศของสหรัฐอเมริกา
Pollen API
- TREE_UP: ประเภทแผนที่ความหนาแน่นจะแสดงแผนภูมิของดัชนีต้นไม้
- GRASS_UPI: ประเภทแผนที่ความหนาแน่นจะแสดงแผนภูมิของดัชนีหญ้า
- WEED_UPI: ประเภทแผนที่ความหนาแน่นจะแสดงแผนภูมิของดัชนีวัชพืช
แสดงการ์ดแผนที่ความหนาแน่นในเว็บ
โหลดการ์ดและใช้มาสก์เวกเตอร์เพื่อแสดงเฉพาะพื้นที่ที่ต้องการของวิวพอร์ตของแผนที่
การโหลดการ์ด
- ใช้ Maps JavaScript API เพื่อโหลดแผนที่ฐานของ Google และโหลดไลบรารี deckgl เพื่อเตรียมพร้อมสำหรับการโหลดรูปภาพการ์ดแรสเตอร์
- ใช้ deck.gl TileLayer เพื่อโหลดการ์ดแผนที่ความหนาแน่น ของคุณภาพอากาศ ซึ่งจะแสดงป้ายกำกับแผนที่ฐานของ Google Maps ไว้ด้านบนของการ์ดแผนที่ความหนาแน่น (ต่างจากภาพซ้อนทับที่กำหนดเองของ 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;
การใช้มาสก์เวกเตอร์
คุณสามารถซ่อนหรือแสดงส่วนใดก็ได้ของการ์ดแผนที่ความหนาแน่น สำคัญ: คุณจะต้องรับข้อมูลที่จะใช้สร้างมาสก์เวกเตอร์ที่ใช้กับการ์ดแผนที่ความหนาแน่น
- ในพื้นที่:
ใช้ deck.gl GeoJson เพื่อสร้างมาสก์ เหนือ Air Quality TileLayer
ตัวอย่างด้านล่างใช้ geojson แบบหลายรูปหลายเหลี่ยมของฝรั่งเศส
// geojson sample { "type": "Feature", "geometry": { "type": "MultiPolygon", "coordinates": [[[[-54.111527,2.11427],...[-54.194491,2.163073]]]] }, "properties": { "name": "France" } }
นี่คือข้อมูลอ้างอิงสำหรับการใช้งาน 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 ... }) ]
- ตามเส้นทาง: ใช้ deck.gl กับ TripsLayer เพื่อสร้าง มาสก์ เหนือ Air Quality TileLayer
การ์ดแผนที่ความหนาแน่นของคุณภาพอากาศเหนือการเดินทาง
จัดการคำขอ API และค่าใช้จ่าย
แม้ว่าลักษณะการทำงานเริ่มต้นของเบราว์เซอร์มักจะแคชการ์ดที่โหลดทั้งหมดไว้ในพื้นที่เก็บข้อมูลในเครื่อง (ภายในเซสชันเดียวกัน) แต่คุณยังเพิ่มประสิทธิภาพได้อีกดังนี้
- จำกัดพื้นที่การโหลด: สร้างกรอบล้อมรอบ (สีแดง) และกำหนดให้กับเลเยอร์ โดยระบบจะโหลดเฉพาะการ์ดแผนที่ความหนาแน่น (สีน้ำเงิน) ที่ครอบคลุมกรอบล้อมรอบในระดับการซูมที่กำหนด
กรอบล้อมรอบ (สีแดง), การ์ดแผนที่ความหนาแน่น (สีน้ำเงิน)
// Heatmap Tile layer new TileLayer({ id: 'heatmap-tiles', extent: [minX, minY, maxX, maxY] // bounding box: southwest lat, southwest lng, northeast lat, northeast lng ... })
- ตั้งค่าขนาดการ์ดที่แสดงผลให้ครอบคลุมวิวพอร์ตทั้งหมดในระดับการซูมที่กำหนด โดยขนาดที่แนะนำคือระหว่าง 256 ถึง 1024
สำคัญ: การ์ด API จะยังคงมีความละเอียด 256x256 แต่การปรับการแสดงผลจะช่วยให้คุณเพิ่ม/ลดจำนวนคำขอการ์ดเพื่อครอบคลุมวิวพอร์ตของแผนที่ทั้งหมดได้
(ตรวจสอบว่าการ์ดทำงานร่วมกับ minZoom และ maxZoom ของ Google Maps ได้ เช่น
tilesize:1024จะไม่โหลดการ์ดที่ระดับการซูม 0 หรือ 1)
วิวพอร์ตที่มีการ์ดขนาด 256x256 พิกเซลเทียบกับ 512x512 พิกเซล
// Heatmap Tile layer new TileLayer({ id: 'heatmap-tiles', tilesize:256, // <-- change to 512 for instance ... })
อ่านค่าพิกเซล
วิธีแสดงค่าที่เกี่ยวข้องในสเกลสี
คุณสามารถใช้ Luma.gl และเมธอด readPixelsToArray ในเหตุการณ์ onClick ที่กำหนดเป็นพร็อพให้กับเลเยอร์ deck.gl
ค่าพิกเซล: rgba(128,0,0,255)
ต่ำ
สูง
// 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); } } })
บทสรุป
คุณได้ทราบวิธีใช้ปลายทาง API ของการ์ดแผนที่ความหนาแน่นของ Air Quality และ Pollen ดังนี้
- โหลดใน Google Maps บนเว็บ รวมถึงตรวจสอบว่าการ์ดเป็นไปตามข้อกำหนดในการให้บริการ
- เพิ่มประสิทธิภาพให้ตรงกับกรณีการใช้งานของคุณ
- อ่านค่าการ์ด
การดำเนินการถัดไป
เนื้อหาที่แนะนำให้อ่านเพิ่มเติม
ผู้ร่วมให้ข้อมูล
ผู้เขียนหลัก
Thomas Anglaret | วิศวกรโซลูชัน Google Maps Platform