0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【GEE入門】MODISの地表面温度(LST)データで時系列分析のグラフ作成

Posted at

はじめに

Google Earth Engine (GEE) を使った地表面温度(LST: Land Surface Temperature)分析は、気候変動の追跡、都市ヒートアイランド現象の評価、干ばつモニタリングなど、幅広い分野で活用される重要な指標です。

本記事では、MODIS衛星データに含まれるLSTデータを用いて、特定の地域における年間の地表面温度変動パターンをDOY(Day of Year)時系列プロットとして可視化する方法を詳しく解説していきます。

この記事で学べること

  • MODISとMOD11A2(地表面温度データ)の基本的な理解
  • LSTデータの特徴と活用方法
  • LSTデータの単位変換(Kelvin × 50 → Celsius)の方法
  • ui.Chart.image.doySeriesByYear()を使った時系列チャートの作成
    chart_lst_doy_timeseries_2019-2023_roi.png

対象読者

  • 衛星データを使った時系列分析に興味がある方
  • 地表面温度データの活用方法を学びたい方

本記事は、Udemy講座「Google Earth Engine Mega Course」の内容を参考に、筆者自身の学習過程で得たポイントを補足しながら作成しています。

MODISの概要

MODISとは?

MODIS(Moderate Resolution Imaging Spectroradiometer、モディス)はNASAが開発した地球観測センサーで、1999年打ち上げのTerra衛星と2002年打ち上げのAqua衛星に搭載されています。Google Earth Engine(GEE)で最もよく使われる衛星データの1つです。

MODISの特徴:

  • 広範囲観測: 1回の撮影で約2,300km幅をカバー(東京~沖縄の約2倍)
  • 高頻度観測: 全世界を1-2日おきに観測
  • 多様なデータ: 36種類の波長で地表・大気を観測

主なMODISデータの種類

データID データ種類 解像度 観測間隔
MOD11A2 地表面温度 1km 8日間隔
MOD13A1 植生指数 500m 6日間隔
MCD12Q1 土地被覆 500m 年1回
MOD10A1 積雪 500m 日次

MOD11A2データセットについて

基本情報:

項目 内容
正式名称 MOD11A2.061 Terra Land Surface Temperature and Emissivity 8-Day Global 1km
データID MODIS/061/MOD11A2
主な用途 地表面温度(LST)の時系列分析
空間解像度 1km
特徴 8日間の観測値を合成して雲の影響を軽減

公式ドキュメント

地表面温度(LST)の基礎知識

LSTとは?

地表面温度(Land Surface Temperature)とは、文字通り「地表の温度」のことです。太陽光で直接温められた地面や建物の表面温度を表します。

LSTと気温の違い:

  • LST: 地面の温度(衛星で測定)
  • 気温: 地上1.5-2mの大気温度(温度計で測定)

LSTデータの活用法:

  1. 都市環境: ヒートアイランド現象の解析
  2. 農業: 干ばつ監視
  3. 災害監視: 森林火災リスク対応

使用データセット

本記事では以下のデータセットを使用します:

項目 内容
データID MODIS/061/MOD11A2
対象期間 2019-2023年
使用バンド LST_Day_1km(昼間温度)
解像度 1km
対象地域 任意(スクリプト内でroi定義)

手順

スクリプト全体像

まず、Google Earth EngineのCode Editorに記述するスクリプトの全体像をご紹介します。

このスクリプトをCode Editorにコピー&ペーストし、マップ上でroi(関心領域)を定義すれば実行可能です。

// LST DOY 時系列プロット (MODIS LSTデータを使用)
// 1. MODIS 地表面温度 (LST) データを読み込む
var collection = ee.ImageCollection("MODIS/061/MOD11A2")
.select("LST_Day_1km")  // 日中のLSTバンドのみを選択
.filterDate("2019-01-01", "2023-08-31")
.filterBounds(roi);     // ROI = 関心領域
// 2. LSTをケルビン*50から摂氏に変換
var LSTDay = collection.map(function(img){
return img
.multiply(0.02)           // ケルビンに変換
.subtract(273.15)         // 摂氏に変換
.copyProperties(img, ["system:time_start", "system:time_end"]); // タイムスタンプを保持
});
// 3. 年間日次 (DOY) 時系列チャートを作成
var chart = ui.Chart.image.doySeriesByYear(LSTDay, "LST_Day_1km", roi, ee.Reducer.mean(), 1000)
.setOptions({
title: 'Seasonal Variation of Land Surface Temperature (2019-2023)',
hAxis: {
title: 'Day of Year (DOY)'
},
vAxis: {
title: 'Land Surface Temperature (°C)'
}
});
print(chart);

コードのステップ別解説

ここからは、上記のスクリプトを3つの主要な処理ブロックに分けて、各ステップで実行される処理を解説します。

1. データ読み込みと関心領域(roi)の定義

このブロックでは以下の処理を実行しています:

  • データセットの選択
  • バンド選択
  • 期間フィルタリング
  • 空間フィルタリング
var collection = ee.ImageCollection("MODIS/061/MOD11A2")
.select("LST_Day_1km")  
.filterDate("2019-01-01", "2023-08-31")
.filterBounds(roi);     
スクリプト抜粋 意味・目的
ee.ImageCollection("MODIS/061/MOD11A2") データセットMODIS/061/MOD11A2をImageCollectionとして読み込みます。
.select("LST_Day_1km") 昼間の地表面温度バンドのみを選択(夜間LSTは除外)
.filterDate("2019-01-01", "2023-08-31") 2019年〜2023年8月の期間でデータをフィルタリング
.filterBounds(roi) 関心領域(roi)内のデータのみを取得

データセットの読み込みに使用するImageCollection IDやバンド名は、Earth Engine Data Catalogで確認できます。

MODIS_Data_Catalog.png

関心領域(roi)の定義方法

関心領域roiは事前に定義する必要があります。以下の3つの方法があります:

// 例1:矩形領域で定義(経度・緯度の範囲指定)
var roi = ee.Geometry.Rectangle([139.0, 35.0, 140.0, 36.0]); // [経度1, 緯度1, 経度2, 緯度2]

// 例2:GEEのデータセットから国境を取得
var countries = ee.FeatureCollection("USDOS/LSIB_SIMPLE/2017"); // 国境データ取得
var roi = countries.filter(ee.Filter.eq('country_na', 'Japan')); // 'Japan'の箇所に国名を入力(先頭は大文字)

// 例3:手動で描画した図形を使用
// Code Editorの図形描画ツールで描画後、変数名を'roi'に変更

手動描画による関心領域の設定手順

マップ上でデータを取得したい領域を表示したら、

  1. 左上の四角いマーク(「長方形を描画」)をクリック
  2. ドラッグして関心領域を定義
  3. 関心領域が赤枠で表示され、レイヤーダイアログに追加されるので、レイヤー名右側の歯車ボタン(「Edit Layer Properties」)をクリック→レイヤー名を「roi」に変更→「OK」でレイヤー名をroiに変更。

ROI_Setting.png

2. LSTデータの単位変換

MODISのLSTデータは、データ容量を抑えるために「実際の地表面温度 × 50」の整数値で格納されています。そのため、このステップでは以下の2段階の処理で、LSTデータを物理的に意味のある値に変換します。

  1. スケーリング係数の適用: 格納されている整数値に0.02を乗じることで、実際のケルビン(絶対温度)値に変換します。
  2. 温度単位の変換: ケルビン値から273.15を引くことで、摂氏(°C)に変換します。これにより、より直感的に理解しやすい温度値が得られます。

また、時系列プロットには元画像の日付情報(メタデータ)が必要となるため、.copyProperties()関数を用いてタイムスタンプ情報を新しい画像に継承させます。

var LSTDay = collection.map(function(img){
  return img
    .multiply(0.02) 
    .subtract(273.15) 
    .copyProperties(img, ["system:time_start", "system:time_end"]);
});
スクリプト抜粋 意味・目的
.multiply(0.02) 数式:「生データ × 0.02」。生データは「Kelvin × 50」で格納されているため、50で割る(= 0.02を掛ける)ことでKelvin(絶対温度)に変換
.subtract(273.15) 数式:「Kelvin - 273.15」。Kelvin(絶対温度、0K = -273.15℃)からCelsius(摂氏)に変換
.copyProperties(img, [...]) 元画像のタイムスタンプ情報を新しい画像に継承(時系列解析に必須)

3. 時系列チャートの作成

このステップでは、前処理を終えた地表面温度データを用いて、年ごとのDOY(Day of Year)時系列チャートを作成します。

var chart = ui.Chart.image.doySeriesByYear(LSTDay, "LST_Day_1km", roi, ee.Reducer.mean(), 1000)
  .setOptions({
    title: 'Seasonal Variation of Land Surface Temperature (2019-2023)',
    hAxis: {
      title: 'Day of Year (DOY)'
    },
    vAxis: {
      title: 'Land Surface Temperature (°C)'
    }
  });

print(chart);
スクリプト抜粋 意味・目的
ui.Chart.image.doySeriesByYear() DOY(1〜366)ごとに年別の時系列チャートを生成する専用関数です。
LSTDay 変換済みの地表面温度データ(ImageCollection)を第1引数に指定します。
LST_Day_1km プロット対象となるバンド名(LST_Day_1km)を文字列で第2引数に指定します。
roi 統計計算を行う地理的範囲(関心領域)を第3引数に指定します。
ee.Reducer.mean() 領域内のピクセル値の平均を計算する統計手法を第4引数に指定します。
1000 第5引数にMODISデータの本来の空間解像度(1km = 1000m)を指定し、正確な統計値を取得します。

ui.Chart.image.doySeriesByYear()の詳細

この関数は、指定された画像コレクションからDOYごとの時系列データを抽出し、年別にプロットするチャートを生成します。

引数構成:

  • imageCollection (第1引数): 処理対象となる画像コレクション。
  • bandName (第2引数): チャートにプロットするバンドの名前(文字列)。
  • region (第3引数): 統計計算を行う地理的領域(ee.Geometryオブジェクト)。
  • reducer (第4引数): 指定した領域内のピクセル値を集計するための統計手法(例: ee.Reducer.mean()ee.Reducer.max())。
  • scale (第5引数): 統計計算を行う際の空間解像度(メートル単位)。データセットのネイティブ解像度と合わせるのが一般的です。

チャートオプション (.setOptions())の設定

.setOptions()メソッドを使用することで、生成されるチャートの見た目やラベルを細かくカスタマイズできます。

  • title: チャートのメインタイトルを設定します。
    • 例: Seasonal Variation of Land Surface Temperature (2019-2023)
  • hAxis.title: 横軸(X軸)のラベルを設定します。
    • 例: Day of Year (DOY)
  • vAxis.title: 縦軸(Y軸)のラベルと単位を設定します。
    • 例: Land Surface Temperature (°C)

これらの設定により、X軸にDOY(1〜366)、Y軸に摂氏(℃)の地表面温度を持つ線グラフが生成されます。各年のデータは異なる色の線で表示され、年間の変動パターンを視覚的に把握できます。

実行結果

スクリプトを実行すると、以下のような時系列チャートがGEEのコンソールに表示されます:

LST_DOY_Chart_Console.png

時系列チャートの右上をクリックすると全画面表示が可能です。

チャートの右上に表示されている「Download PNG」「Download SVG」「Download CSV」をクリックすることで、.png.svg.csvのファイル形式でダウンロードできます。

LST_DOY_Chart_Example.png

まとめ

本記事では、Google Earth EngineとMODIS地表面温度データを使用して、DOY時系列プロットを作成する手法を詳しく解説しました。

1. MODISとLSTデータ:

  • MODISは地球観測における重要なセンサー
  • MOD11A2は8日間合成により高品質なLSTデータを提供

2. データ処理:

  • MODISのLSTデータは適切な単位変換が必須
  • 時系列解析ではcopyProperties()関数を使用

参考資料

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?