チュートリアル
Tutorial ImageCollectionのマップ表示 (バンドデータから物理量を求める)
GCOM-C/SGLIの複数バンドデータ(ImageCollection)を使用して物理量を算出し、マップ表示するまでのチュートリアルとなります。
Google Earth Engine(GEE)にユーザ登録の上、ご利用ください。
GCOM-C/SGLIのデータからは様々な物理量を求めることが出来ます。
こちらのページでは例として、RSRFから植生指数(NDVI、EVI)を算出し、マップに表示する方法を記載します。
RSRFは定常的にデータをアップしておりませんが、定常的にアップしているL1Bデータを利用すると大気上端反射率からNDVI、EVIを算出することが可能です。(ただし大気の影響を含みます)
RSRFのデータは、本チュートリアル内に記載の2022/08のパキスタン付近をサンプルとしてアップロードしております。
Slope、Offsetの計算やQA_flagを使用したマスクなど、マップ表示の基礎はImageCollectionのマップ表示をご確認ください。
GEEにアップロードされているGCOM-C/SGLIのImageCollectionについては、こちらの一覧もご確認ください。
目次
① GEE上のデータ(ImageCollection)をロードする。
ee.ImageCollection('ImageCollection名')で、ロードすることができます。
GCOM-CのImageCollectionは「'projects/ee-gcomsgli/assets/[プロダクト名]Q'」となります。
今回はRSRFDQをロードします。
var imageCollection = ee.ImageCollection('projects/ee-gcomsgli/assets/RSRFDQ');
上記では、全期間のImageCollectionとなるため、必要な期間に絞り込みます。
先ほどのee.ImageCollectionとつなげて「.filterDate('開始日', '終了日')」を記載します。日付は「yyyy-mm-ddThh:mm:ss」形式とします。
var imageCollection = ee.ImageCollection('projects/ee-gcomsgli/assets/RSRFDQ')
.filterDate('2022-08-01T00:00:00', '2022-08-05T23:59:59');
② ImageCollectionの情報を取得する。
printで、ImageCollectionの情報確認します。
print('All metadata:', imageCollection);
Scriptの上にある、SaveとRunボタンを実行後、Consoleの部分にバンド名が表示されます。
植生指数(NDVI、EVI)の算出に必要なバンドを確認します。
以下の計算に必要なVN03、VN08、VN11を取得します。
NDVI = (RNIR - Rred) / (RNIR + Rred)
EVI = G * (RNIR - Rred) / (RNIR + C1 * Rred - C2 * Rblue + L)
・RNIR : Rs_VN11
・Rred : Rs_VN08
・Rblue : Rs_VN03
③ QA_flagでのマスク
Imageに格納されたQAフラグの値で、Image内の品質の悪い画素をマスクすることが出来ます。
QAフラグはbit毎に品質の情報を示し、「Mask_for_statistics」と「QA_flag」でAND演算を行い、統計値算出に使用する画素を判別します。
mapを使用して、ImageCollection内の全てのImageに、処理をします。
②で確認したバンド名で、imgからVNxxとQAフラグをそれぞれ取得します。
以下の例ではRs_VN03を記載していますが、必要なすべてのバンドについて同様に実施してください。
var imgVN03 = imgVN03.map(function(img){
var VN03=img.select("Rs_VN03");
var QA_flag=img.select("QA_flag");
});
※[ImageCollection].map(function(img){ 処理 }):ImageCollection内の全てに{}内の処理をします。
()内の変数名imgが{}内の処理をする際のImage名となります。
returnで処理後のImageCollectionを、変数imgVNxxに返します。
VNxxからMask_for_statistics、QA_flagからQA_ErrDNを取得します。プロパティ名は②の出力結果の「properties」から確認してください。
※物理量によって、バンド名とプロパティの命名規則が異なることがありますのでご注意ください。
var imgVN03 = imgVN03.map(function(img){
var CHLA=img.select("CHLA");
var QA_flag=img.select("QA_flag");
// QA flag
var QA_ErrDN = ee.Number.parse(QA_flag.get('RSR_QA_flag_Error_DN'));
var Mask_for_statistics = ee.Number.parse(VN03.get('Rs_VN03_Mask_for_statistics')).int();
});
※ee.Number.parse(プロパティの値).int():プロパティの値は文字列のため、数値(int)に変換して取得します。
※img.get('プロパティ名'):Consoleで確認したプロパティ名を指定し、プロパティの値を取得します。
bitのAND演算はGoogle Earth engineではbitwiseAndを使用します。
bitwiseAndの結果でuppdareMaskすることで、品質の悪い画素をマスクします。
var imgVN03 = imgVN03.map(function(img){
var VN03=img.select("Rs_VN03");
var QA_flag=img.select("QA_flag");
// QA flag
var QA_ErrDN = ee.Number.parse(QA_flag.get('RSR_QA_flag_Error_DN'));
var Mask_for_statistics = ee.Number.parse(CHLA.get('Rs_VN03_Mask_for_statistics')).int();
// mask
var img_mask=VN03.updateMask(QA_flag.bitwiseAnd(Mask_for_statistics).eq(0));
});
④ Slope、Offset計算
ImageにはDN値が格納されているため、物理量とするために「DN*slope+offset」の計算が必要となります。
Imageのプロパティから、計算に使用するSlope、Offsetの値を確認します。
先ほどのConsoleから、propertiesを開き、Slope、Offsetのプロパティ名を確認してください。
いずれか1つのImageのプロパティを確認すれば問題ありません。
※物理量によって、バンド名とプロパティの命名規則が異なりますのでご注意ください。
mapを使用して、ImageCollection内の全てのImageに、SlopeとOffsetの計算をします。
(例としてVN03を記載していますが、必要なバンドについてすべて同様に処理してください)
var imgVN03 = imgVN03.map(function(img){
var VN03=img.select("Rs_VN03");
var QA_flag=img.select("QA_flag");
// QA flag
var QA_ErrDN = ee.Number.parse(QA_flag.get('RSR_QA_flag_Error_DN'));
var Mask_for_statistics = ee.Number.parse(CHLA.get('Rs_VN03_Mask_for_statistics')).int();
// mask
var img_mask=VN03.updateMask(QA_flag.bitwiseAnd(Mask_for_statistics).eq(0));
// Slope Offset
var VN03_slope = ee.Number.parse(img.get('Rs_VN03_Slope')).float();
var VN03_offset = ee.Number.parse(img.get('Rs_VN03_Offset')).float();
return img.multiply(VN03_slope).add(VN03_offset);
});
※[ImageCollection].map(function(img){ 処理 }):ImageCollection内の全てに{}内の処理をします。
()内の変数名imgが{}内の処理をする際のImage名となります。
returnで処理後のImageCollectionを、変数image_XXXXに返します。
※ee.Image.get('プロパティ名'):プロパティ名を指定し、プロパティの値を取得します。
※ee.Number.parse(プロパティの値).float():プロパティの値は文字列のため、数値(float)に変換して取得します。
※ee.Image.multiply(slope):プロパティから取得したSlopeの値をImageの各値に乗算します。
※ee.Image.add(offset):プロパティから取得したOffsetの値をImageの各値に加算します。
⑤ NDVIの算出
QA_flagによるマスク、Slope・Offset計算をしたimgVNxxを使用して、NDVIを算出します。
植生指数(NDVI、EVI)のATBDより、以下の計算式を使用します。
NDVI = (RNIR - Rred) / (RNIR + Rred)
・RNIR : Rs_VN11
・Rred : Rs_VN08
var imageNDVI = image_VN11.subtract(image_VN08).divide(image_VN11.add(image_VN08)).rename('NDVI');
※add():Imageの値にカッコ内の値を加算します。
※subtract():Imageの値をカッコ内の値で減算します。
※multiply():Imageの値をカッコ内の値で乗算します。
※divide():Imageの値をカッコ内の値で除算します。
※rename():Image名をカッコ内のものに変更します
⑥ EVIの算出
QA_flagによるマスクとSlope・Offset計算をしたimgVNxxを使用して、EVIを算出します。
植生指数(NDVI、EVI)のATBDより、以下の計算式
を使用します。
EVI = G * (RNIR - Rred) / (RNIR + C1 * Rred - C2 * Rblue + L)
・RNIR : Rs_VN11
・Rred : Rs_VN08
・Rblue : Rs_VN03
定数(G, C1, C2, L)については、Huete et al, 1994 [*1]より、以下の値を使用します。
・G=2.5
・C1=6.0
・C2=7.5
・L=1.0
[*1]
JAXA adopts the values proposed by Huete et al. (1994) as the coefficients L, C1, C2, and G.
A Huete, C Justice, H Liu (1994), Development of vegetation and soil indices for MODIS-EOS, Remote Sensing of Environment, 49(3), 224-234, doi:10.1016/0034-4257(94)90018-3
var G = 2.5;
var C1 = 6.0;
var C2 = 7.5;
var L = 1.0;
var RNIR_Rred = image_VN11.subtract(image_VN08);
var RNIR_C1 = image_VN08.multiply(C1);
var Rred_C2 = image_VN03.multiply(C2);
var RNIR_Rred_Rblue = image_VN11.add(RNIR_C1).subtract(Rred_C2).add(L);
var imageEVI = RNIR_Rred.multiply(G).divide(RNIR_Rred_Rblue).rename('EVI');
※add():Imageの値にカッコ内の値を加算します。
※subtract():Imageの値をカッコ内の値で減算します。
※multiply():Imageの値をカッコ内の値で乗算します。
※divide():Imageの値をカッコ内の値で除算します。
※rename():Image名をカッコ内のものに変更します
⑦ 視覚化のパラメータを指定する。
マップ表示時のパラメータを指定します。
var imageVisParamNDVI = {
"min":0,
"max":1.0,
"palette":["B18611","E2B947","EDE758","D3FE4E","A7FF35","73F61B","48DE07","28B900","168E00","106B00","0C3A03"]
};
var imageVisParamEVI = {
"min":0,
"max":1.0,
"palette":["B18611","E2B947","EDE758","D3FE4E","A7FF35","73F61B","48DE07","28B900","168E00","106B00","0C3A03"]
};
⑧ マップ上に表示する。
ImageCollection、パラメータ、Image名を指定して、マップ表示します。
Map.addLayer(imageEVI, imageVisParamEVI, 'EVI');
Map.addLayer(imageNDVI, imageVisParamNDVI, 'NDVI');
⑨ マップの表示位置を指定する。
GCOM-CのImageCollectionは日本域のため、日本付近を指定します。
Map.setCenter(経度, 緯度, ズームレベル);
Map.setCenter(140.0, 40.0, 3);
Scriptの上にある、SaveとRunボタンを実行すると、下のマップにImageCollectionが表示されます。
マップ右側のLayersから表示するImageを選択できます。
NDVIの表示
EVIの表示


