GEE利用事例

海水面温度の分布を見てみよう:黒潮大蛇行について

海水面温度分布を見てみよう


例年と比較して黒潮が本州から離れて分布する黒潮大蛇行という現象が、2017年以降観測されています。
JAMSTECリンク:https://www.jamstec.go.jp/j/pr/topics/column-20220331/

この現象は人工衛星データでも観測されており実際にJAXAひまわりモニタ・海中天気予報の水温分布でも蛇行の様子が表れていることが確認されています。
地球が見えるリンク:https://earth.jaxa.jp/ja/earthview/2022/08/31/7197/index.html

この黒潮大蛇行の様子を、GEEにアップロードされているしきさい(GCOM-C)の海水面温度(Sea Surface Temperature: SST)データからも確認してみましょう。

GEEのPlatformのコンソール画面を立ち上げたら、まずはSSTプロダクトの前処理を行う関数を定義します。
詳しくは、チュートリアル「ImageCollectionのマップ表示」ページの「③ QAフラグでのマスク」・「④ Slope、Offsetの計算」をご覧ください。


function preprocessing_sst(img){
         var sst    = img.select('SST').float();
         var qa    = img.select('QA_flag').int();

         var mask_score = ee.Number.parse(img.get('SST_Mask_for_statistics')).int();
         sst            = sst.updateMask(qa.bitwiseAnd(mask_score).eq(0))

         var sst_slope  = ee.Number.parse(img.get('SST_Slope')).float();
         var sst_offset = ee.Number.parse(img.get('SST_Offset')).float();

         var sst_col    = sst.multiply(sst_slope).add(sst_offset);

         return sst_col
}
              

その後、GEE上のGCOM-C SSTプロダクトをロードし、先ほど定義したpreprocessing_sst関数をImage_Collection内の各Imageに適用していきます。
またロード時点で、「地球が見える」に掲載されている2022/08のデータに絞っておきます。
詳しくは、チュートリアル「ImageCollectionのマップ表示」ページの「①GEE上のデータ(ImageCollection)をロードする」をご覧ください。


// GCOM-C SSTをロードする
var sst_collection = ee.ImageCollection("projects/ee-gcomsgli/assets/SSTDQ")
                       .filterDate('2022-08-01', '2022-09-01');

// preprocessing_sst関数をImageに適用する
var sst_collection_col = sst_collection.map(preprocessing_sst);
              

Slope/Offsetやマスクの前処理後、平均値を計算します。
sst_collection_colは、2022/8のSSTプロダクトをロードして前処理したものになるため、このコード内で計算しているsst_meanは2022/08の月平均SSTに相当します。


// 月平均を計算する
var sst_mean = sst_collection_col.mean();
              

その後視覚化パラメータを設定し、マップ表示します。
この視覚化パラメータは、「データ一覧」内の「海水面温度 Sea Surface Temperature (SST)」サンプルスクリプトで設定したものと同じものです。


// 視覚化パラメータ
var minSST = +10.0;
var maxSST = +40.0;

// 低温部分は青で表示し、温度が上がるにつれて緑・橙・赤へと変化する設定
// 16進数カラーコードで、palette内の色を設定
var visSST = {
  bands:  ['SST'],
  palette: [ '3500a8','0800ba','003fd6','00aca9','77f800','ff8800','b30000','920000','880000' ],
  min:minSST, max:maxSST,};

// 表示位置の中心を設定して、マップ表示する。
Map.setCenter(136, 33.5, 6.5);
Map.addLayer(sst_mean, visSST, 'sst_202208_ave');
              
図1:2022年8月の月平均SGLI/SST画像(水温 10~40度の範囲で色付け; GEE表示画像に加筆)

海水面温度分布については、マップ表示させることに成功しました。
ただ夏季ということもあり全体的に水温が高く、黒潮の分布を確認することが難しい状況です。

そのため、もう少し水温が低いと考えられる、春(2022/03)で同様のマップ表示を行ってみます。
また、カラーパレットについても最大値を+30.0として、より水温の境界が分かるようにします。
Image_Collectionをロードする際のfilterDateとmaxSSTを変更するのみで、他の手順についてはこれまでと同様に実施します。

図2:2022年3月の月平均SGLI/SST画像(水温 10~30度の範囲で色付け; GEE表示画像に加筆)

黒潮と考えられる、水温の境界が確認できました。

現在の前処理関数を用いて、GEE上に公開されている過去のGCOM-C SSTデータを3月に限定して画像化していくと、2020年ではより水温の境界が本州から離れていることが分かります。

図3:2020年3月の月平均SGLI/SST画像(水温 10~30度の範囲で色付け; GEE表示画像に加筆)

補足 黒潮大蛇行が開始前の海水面温度分布を見てみよう:他衛星データとの比較

冒頭にとりあげたJAMSTEC解説記事によると、今回確認した黒潮大蛇行は2017年8月より始まったものとのことです。

GCOM-Cは2017年12月に打ち上げ、2018年1月分から観測データを公開しているため、GCOM-Cのデータだけでは、大蛇行開始前後の海水面温度分布の比較が出来ません。

しかし、GEEにはGCOM-Cだけではなく、多種多様な衛星・プロダクトが公開されています。
これら他衛星が観測した過去の海水面温度分布と比較してみましょう。
(複数衛星の比較には衛星センサ間の違いなど考慮すべき部分は多くありますが、今回は大まかな傾向をとらえることを目的として、これら考慮事項については割愛させていただきます。)

今回取り上げるデータは、NOAA/AVHRRの「NOAA AVHRR Pathfinder Version 5.3 Collated Global 4km Sea Surface Temperature」です。
GCOM-C SSTプロダクトと同様に、前処理用の関数を定義し、期間を指定してロードしたImage_Collectionに前処理関数を適用します。
今回取り扱うNOAAの水温は単位がK(ケルビン)のため、273.15度を引くことで摂氏温度に変換します。
Image_Collectionをロードする期間は、黒潮大蛇行が始まる前の2014年3月とします。


// SSTを前処理する関数:NOAA
function preprocessing_sst_avhrr(img){
        var sst     = img.select('sea_surface_temperature');
        var quality = img.select('quality_level');

        sst         = sst.updateMask(quality.gt(4));

        var slope   = ee.Number.parse(img.get('sea_surface_temperature_scale')).float();
        var offset  = ee.Number.parse(img.get('sea_surface_temperature_offset')).float();

        var offset_KtoC = -273.15;

        var sst_col = sst.multiply(slope).add(offset).add(offset_KtoC);

        return sst_col
}

// NOAA:AVHRR SSTをロードする
var sst_collection_avhrr = ee.ImageCollection('NOAA/CDR/SST_PATHFINDER/V53')
                          .filter(ee.Filter.date('2014-03-01', '2014-03-31'));

// preprocessing_sst関数をImageに適用する
var sst_collection_col_avhrr = sst_collection_avhrr.map(preprocessing_sst_avhrr);

// 月平均を計算する
var sst_mean_avhrr = sst_collection_col_avhrr.mean();

// 視覚化パラメータを設定する
var minSST = +10.0;
var maxSST = +40.0;

var visSST_avhrr = {
  bands:   ['sea_surface_temperature'],
  palette: [ '3500a8','0800ba','003fd6','00aca9','77f800','ff8800','b30000','920000','880000' ],
  min:minSST, max:maxSST,
};

// 表示位置の中心を設定して、マップ表示する
Map.setCenter(136, 33.5, 6.5);
Map.addLayer(sst_mean_avhrr, visSST_avhrr, 'sst_svhrr_201403_ave');
            
図4:2014年3月の月平均AVHRR/SST画像(水温 10~30度の範囲で色付け; GEE表示画像に加筆)

今回使用したAVHRR SSTプロダクトは解像度が4 kmのため、GCOM-Cよりも画像がやや粗いですが、同様に黒潮と考えられる海水面温度分布を確認することが出来ました。

2020年3月のGCOM-C SSTデータと比較すると、より海水面温度分布の違いを確認できます。

図5:AVHRR/SSTとSGLI/STTの表示結果比較(水温 10~30度の範囲で色付け)