空氣品質和花粉指數動態磚

目標

空氣品質和花粉 API 提供絕佳機會,可為任何地點的行程或地圖新增更多 洞察資料。如要使用這些 API 提供的資料,有兩種方式:文字索引或熱視圖圖塊 (光柵圖片)。

alt_text

使用熱視圖圖塊 API 端點時,載入個別光柵圖塊可能會遇到一些問題,例如:

  • 如何在網頁版 Google 地圖上載入圖塊?(同時遵守 API 使用條款)
  • 如何管理體驗期間的要求數量?
  • 如何解讀圖塊值?

應用實例

您將看到範例用途,並嘗試回答上述問題。

  • 特定區域的空氣品質和花粉:以視覺化方式呈現一或多個自訂多邊形內的熱視圖圖塊 (目前情況) 光柵資料。
  • 路線沿途的空氣品質和花粉: 在路線航點上繪製熱視圖圖塊 (目前狀況) 點陣資料。

導入作業

您將瞭解有哪些圖塊可用,以及如何在網頁版體驗中載入這些圖塊。您也會瞭解在將圖塊載入地圖的情況下,如何管理要求數量。最後,我們會說明如何解讀動態磚。

依類型劃分的熱度圖資訊方塊

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:熱視圖類型會以圖形地圖呈現雜草指數。

在網頁版中顯示熱視圖方塊

載入圖塊並套用向量遮罩,只顯示地圖可視區域的所需區域。

載入資訊方塊

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 上建立遮罩。

alt_text

以下範例使用法國的多邊形集合 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,在空氣品質 TileLayer 上建立 遮罩

行程上的空氣品質熱視圖圖塊

alt_text

管理 API 要求和費用

瀏覽器的預設行為通常會將所有載入的圖塊快取到本機儲存空間 (在同一工作階段內),但您可以進一步最佳化:

  • 限制載入區域:建立定界框 (以紅色表示) 並指派給圖層,在任何縮放等級,系統只會載入涵蓋定界框的熱視圖圖塊 (以藍色表示)

定界框 (紅色)、熱視圖圖塊 (藍色)

alt_text

 // 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 解析度,但視覺顯示調整功能可讓您增加/減少圖塊要求數量,以涵蓋整個地圖可視區域

    (請確認這項設定與 Google 地圖的 minZoom 和 maxZoom 搭配運作,例如:tilesize:1024 不會在縮放等級 0 或 1 載入圖塊)。

可視區域與 256x256 像素和 512x512 像素圖塊

alt_text alt_text



    // 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)

alt_text

低 alt_text 高

  // 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);
    }
  }
  })

結論

您已瞭解如何透過下列方式,使用 空氣品質 和 Pollen 熱視圖圖塊 API 端點:

  • 載入網頁版 Google 地圖,並確保符合使用條款
  • 根據您的用途進行最佳化
  • 讀取動態磚值

後續行動

建議延伸閱讀:

Contributors

主要作者:

Thomas Anglaret | Google Maps Platform 解決方案工程師