在 BigQuery 中使用 Earth Engine 處理影像資料

本文將說明如何使用 ST_REGIONSTATS 函式結合光柵和向量資料,該函式會呼叫 Google Earth Engine,在 BigQuery 中執行地理空間分析。

總覽

光柵是像素的二維格線,每個像素都會指派一個或多個稱為頻帶的值。舉例來說,每個像素可能對應地球表面的某個平方公里,並有平均溫度和平均降雨量的頻帶。影像資料包括衛星圖像和其他連續的格線資料,例如天氣預報和土地覆蓋率。許多常見的圖片格式 (例如 PNG 或 JPEG 檔案) 都是以光柵資料格式呈現。

一般來說,影像資料與向量資料相反,前者是透過線條或曲線描述資料,而非固定的矩形格線。舉例來說,您可以使用 BigQuery 中的 GEOGRAPHY 資料類型,描述國家/地區、城市或其他區域的邊界。

地理空間光柵和向量資料通常會使用區域統計資料作業進行結合,該作業會計算指定向量區域內所有光柵值的匯總值。舉例來說,您可能會想計算下列項目:

  • 您所在州各縣的平均空氣品質。
  • 一系列建築物多邊形的太陽能發電潛力。
  • 森林區域電線走廊的火災風險總覽。

BigQuery 擅長處理向量資料,Google Earth Engine 則擅長處理光柵資料。您可以使用 ST_REGIONSTATS 地理函式,將 Earth Engine 產生的點陣圖資料與儲存在 BigQuery 中的向量資料結合。

事前準備

  1. 如要在查詢中使用 ST_REGIONSTATS 函式,請啟用 Earth Engine API。

    啟用 API

  2. 選用:如要使用 ST_REGIONSTATS 函式訂閱並使用發布至 BigQuery sharing (原 Analytics Hub) 的資料,請啟用 Analytics Hub API。

    啟用 API

所需權限

如要取得呼叫 ST_REGIONSTATS 函式的必要權限,請要求管理員為您授予專案的下列 IAM 角色:

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

這些預先定義的角色包含呼叫 ST_REGIONSTATS 函式的必要權限。如要查看確切的必要權限,請展開「必要權限」部分:

所需權限

呼叫 ST_REGIONSTATS 函式時,必須具備下列權限:

  • earthengine.computations.create
  • serviceusage.services.use
  • bigquery.datasets.create

您或許還可透過自訂角色或其他預先定義的角色取得這些權限。

尋找光柵資料

ST_REGIONSTATS 函式中的 raster_id 參數是字串,可指定您影像資料的來源。以下各節將說明如何尋找及設定影像格式 ID。

BigQuery 圖片資料表

您可以使用 BigQuery sharing (原 Analytics Hub) 在 BigQuery 中探索及存取光柵資料集。如要使用 BigQuery 共用功能,您必須啟用 Analytics Hub API,並確保自己具備查看及訂閱項目的必要權限。

Google Earth Engine 會發布含有光柵資料的公開資料集。如要訂閱含有光柵資料的 Earth Engine 資料集,請按照下列步驟操作:

  1. 前往「分享 (Analytics Hub)」頁面。

    前往「分享」(Analytics Hub)

  2. 按一下 「搜尋商店資訊」

  3. 在「Search for listings」欄位中輸入 "Google Earth Engine"

  4. 按一下要訂閱的資料集。

  5. 按一下「訂閱」

  6. 選用步驟:更新「專案」或「已連結的資料集名稱」欄位。

  7. 按一下 [儲存]。系統會將已連結的資料集新增至專案。

資料集包含一個資料表,有時稱為圖像資料表,可根據 STAC 項目規格,為一系列光柵圖片儲存中繼資料。圖片資料表類似於 Earth Engine 圖片集合 (ImageCollection)。

表格中的每一列都對應單一光柵圖像。每張圖片的光柵 ID 都會儲存在 assets.image.href 欄中。如要尋找特定圖片,您可以依據 properties 欄中的圖片屬性進行篩選。您可以在表格說明中找到頻帶相關資訊。

舉例來說,ERA5-Land 資料集提供每日氣候變數統計資料,且可供大眾使用。climate 資料表包含多個光柵 ID。以下查詢會使用 properties.start_datetime 欄篩選圖片資料表,取得對應 2025 年 1 月 1 日圖片的迴轉 ID,並使用 temperature_2m 頻帶計算各個國家/地區的平均溫度:

WITH SimplifiedCountries AS (
  SELECT
    ST_SIMPLIFY(geometry, 10000) AS simplified_geometry,
    names.primary AS name
  FROM
    `bigquery-public-data.overture_maps.division_area`
  WHERE
    subtype = 'country'
)
SELECT
  sc.simplified_geometry AS geometry,
  sc.name,
  ST_REGIONSTATS(
    sc.simplified_geometry,
    (SELECT assets.image.href
     FROM `LINKED_DATASET_NAME.climate`
     WHERE  properties.start_datetime = '2025-01-01 00:00:00'),
    'temperature_2m'
  ).mean - 273.15 AS mean_temperature
FROM
  SimplifiedCountries AS sc
ORDER BY
  mean_temperature DESC;

Cloud Storage GeoTIFF

GeoTIFF 是儲存地理空間光柵資料的常見檔案格式。ST_REGIONSTATS 函式支援以 GeoTIFF 格式儲存在 Cloud Storage 值區 (位於 USus-central1 區域) 中的點陣資料。提供 Cloud Storage URI 做為影像 ID,例如 gs://bucket/folder/raster.tif

Earth Engine 圖片素材資源

ST_REGIONSTATS 函式支援為 raster_id 引數傳遞 Earth Engine 圖像資產路徑。Earth Engine 的迴紋資料可做為個別圖片或圖片集合使用。如要查看圖片的光柵 ID,請按照下列步驟操作:

  1. Earth Engine 資料目錄中搜尋感興趣的資料集。
  2. 如要開啟該項目的說明頁面,請按一下資料集名稱。Earth Engine 程式碼片段可用來描述單一圖片或圖片集合。

    如果 Earth Engine 程式碼片段的格式為 ee.Image('IMAGE_PATH'),則影像資訊 ID 為 'ee://IMAGE_PATH'

    如果 Earth Engine 程式碼片段的格式為 ee.ImageCollection('IMAGE_COLLECTION_PATH'),您可以使用 Earth Engine 程式碼編輯器ImageCollection 篩選為單一圖片。使用 ee.Image.get('system:id') 方法,將該圖片的 IMAGE_PATH 值印到控制台。這個光柵 ID 為 'ee://IMAGE_PATH'

像素權重

您可以為 ST_REGIONSTATS 函式中的 include 參數指定權重 (有時稱為遮罩值),以決定計算中每個像素的權重。權重值必須介於 0 到 1 之間。超出這個範圍的權重會設為最接近的限制值 (0 或 1)。

如果像素的權重大於 0,就會視為有效。權重為 0 表示無效像素。無效像素通常代表缺少或不可靠的資料,例如被雲遮蔽的區域、感應器異常、處理錯誤,或是位於定義邊界外的地點。

如果您未指定權重,系統會根據落在幾何圖形內的像素比例,自動為每個像素加權,以便在區域統計資料中按比例納入。

如果部分重疊的像素具有從 include 引數到 ST_REGIONSTATS 的權重,則 BigQuery 會使用該權重與重疊區域的像素比率的最小值。

權重值的精確度與 FLOAT64 值不同。實際上,這些值的實際值與計算中使用的值最多可能相差 1/256 (約 0.4%)。

您可以在 include 引數中使用 Earth Engine 圖像運算式語法提供運算式,根據光柵頻帶內的特定條件動態加權像素。舉例來說,下列運算式會將計算限制在 probability 頻帶超過 70% 的像素:

include => 'probability > 0.7'

如果資料集包含權重因子頻帶,您可以使用下列語法:

include => 'weight_factor_band_name'

像素大小和分析規模

地理空間算繪影像是指與地球表面某些位置相對應的像素格線。影像的像素大小 (有時稱為縮放) 是指格狀座標參考系統中,像素一側的標稱大小。舉例來說,解析度為 10 公尺的光柵,其像素大小為 10 公尺 x 10 公尺。原始回報的像素大小可能會因資料集而異,從 1 公尺到 20 公里以上都有。

使用 ST_REGIONSTATS 函式計算區域統計資料時,您必須特別考量影像資料的像素大小。舉例來說,在國家/地區區域中匯總高解析度的影像資料可能會耗用大量運算資源,且不必要地精細。相反地,如果對區域 (例如城市地塊) 進行低解析度資料匯總,可能無法提供足夠的詳細資料。

為從分析中取得有意義且有效的結果,建議您選擇適合多邊形大小和分析目標的像素大小。您可以在 BigQuery 共用功能中,透過圖片資料表的說明部分查看每個光柵資料集的像素大小。

變更像素大小會影響與特定地理區域相交的像素數量,進而影響結果和解讀方式。我們不建議您為正式版分析變更像素大小。不過,如果您要製作查詢原型,增加像素大小可以縮短查詢執行時間和成本,尤其是高解析度資料。

如要變更像素大小,請將 options 引數中的 scale 設為 ST_REGIONSTATS 函式。舉例來說,如要計算超過 1,000 公尺像素的統計資料,請使用 options => JSON '{"scale":1000}',這樣 Earth Engine 就會以要求的比例重新取樣圖像。如要進一步瞭解 Earth Engine 如何處理重新調整大小,請參閱 Google Earth Engine 說明文件中的「縮放」一節。

帳單

執行查詢時,由於 Earth Engine 會計算函式呼叫的結果,因此 ST_REGIONSTATS 函式的使用量會與其他查詢分開計費。無論您使用隨選結算或預留功能,我們都會依據 BigQuery 服務 SKU 下方的運算單元時數收取這項用量費用。如要查看向 Earth Engine 發出的 BigQuery 呼叫所產生的帳單金額,請查看帳單報表,並使用標籤篩選標籤鍵 goog-bq-feature-type,並設定值為 EARTH_ENGINE

成本因素

執行 ST_REGIONSTATS 函式時,下列因素會影響計算用量:

  • 輸入資料列數。
  • 您使用的光柵圖像。部分光柵是從 Earth Engine 資料目錄中的來源圖像集合建立的複合圖,產生複合圖的運算資源各不相同。
  • 圖片解析度。
  • 輸入地理區域的大小和複雜度、與地理區域相交的像素數量,以及 Earth Engine 讀取的圖塊和位元組數量。
  • 輸入地理位置在地球上的地點,相對於來源圖片、圖片的投影和解析度。

    • 圖片投影可能會扭曲像素,尤其是高緯度或遠離圖片預期涵蓋範圍的像素。
    • 對於組合算繪圖,與輸入地理區域相交的來源圖片數量可能會因地區和時間而異。舉例來說,某些衛星會根據其軌道和資料收集參數,在低緯度或高緯度產生更多圖像,或是根據變化的大氣條件省略圖像。
  • includeband_name 引數中使用公式,以及所涉及的頻帶數量。

  • 先前結果的快取。

控管費用

如要控管與 ST_REGIONSTATS 函式相關的費用,您可以調整配額,控管函式可使用的時段時間量。預設值為每天 350 個時段小時。查看配額時,請將「指標」清單篩選為 earthengine.googleapis.com/bigquery_slot_usage_time,即可查看與 BigQuery 呼叫相關聯的 Earth Engine 配額。詳情請參閱 Google Earth Engine 說明文件,瞭解 BigQuery 迴紋函式配額

限制

呼叫 ST_REGIONSTATS 函式的查詢必須在下列任一區域中執行:

  • US
  • us-central1
  • us-central2

後續步驟