[Google Earth Engine入門]衛星画像のロードと地図へのオーバーレイ
概要
特定の場所や、特定期間の衛星画像をロードしてMap Viewへオーバーレイする方法です。
位置を指定する
後ほど衛星画像を絞り込むのに使う、位置情報を先に設定しておきます。
1 2 3 4 5 |
//衛星画像を取得す位置を指定するためのジオメトリオブジェクトを生成する var point = ee.Geometry.Point([139.93595520544523,35.96862661420853]); //ジオメトリオブジェクトが中心にくるように地図を移動する Map.centerObject(point, 8) |
・ジオメトリツールを使う
緯度経度を調べてコード内に記述するのは手間ですが、Map Viewの右上にあるジオメトリーツールを使用すると簡単に地図上の緯度経度を取得することができます。
ジオメトリーツール
地図上にマーカーを設置
コードエディタにインポート
衛星データを参照するためのオブジェクトを生成する
LANDSAT 8号の衛星画像を参照するオブジェクト-イメージコレクションを生成します。
このイメージコレクションを通じて、Google が保持している2011年から現在までのLandsat 8号の衛星画像にアクセスすることができます。
1 2 |
//Landsat 8号の衛星画像を参照する var imageCollection = ee.ImageCollection('LANDSAT/LC08/C01/T1_TOA') |
print文を使用することでイメージコレクションの詳細情報をコンソールに出力できます。
(console.logみたいなもの)
1 |
print(imageCollection); |
ただし、データ量が多すぎる(5000エレメント以上)とコンソールに表示することができません。
sizeメソッドを使用することでイメージコレクションから参照できるエレメント-イメージの数を習得することができます。
1 |
print(imageCollection.size()); |
約83万枚の衛星画像がこのイメージコレクションの中に収められているのがわかります。
(この数は、日々増加しているのであくまで現時点での数です)
このままでは衛星画像の数が多すぎるので、条件をつけてフィルタリングします。
フィルタリングする
まずは、衛星画像が撮影された期間で絞り込みを行ってみます。
・期間で絞り込む
1 2 3 4 5 6 |
//Landsat 8号の衛星画像を参照する var imageCollection = ee.ImageCollection('LANDSAT/LC08/C01/T1_TOA') .filterDate('2017-01-01', '2017-12-31') //期間で絞り込む //コレクションに含まれる画像の枚数をコンソールに出力する print(imageCollection.size()) |
フィルタリングを行った結果をコンソールに出力してみると、約83万枚あった衛星画像が約15万まで絞り込まれているのがわかります。
・場所で絞り込む
さらに冒頭で作成したジオメトリオブジェクトを使って、特定位置の衛星画像だけに絞り込みます
1 2 3 4 5 6 7 |
//Landsat 8号の衛星画像を参照する var imageCollection = ee.ImageCollection('LANDSAT/LC08/C01/T1_TOA') .filterDate('2017-01-01', '2017-12-31') //期間で絞り込む .filterBounds(point) //場所で絞り込む //コレクションに含まれる画像の枚数をコンソールに出力する print(imageCollection.size()) |
期間と場所を指定することで、一気に15枚までに絞り込むことができました。
5000枚以下になったのでコンソールに詳細情報を出力することもできます。
1 2 |
//コレクションの詳細をコンソールに出力する print(imageCollection) |
コレクションから画像を取り出し地図にオーバーレイする
15枚までに絞り込んだイメージコレクションの中から、とりあえず先頭の一枚を取り出して地図上にオーバーレイしてみます。
1 2 3 4 5 6 7 8 9 |
//イメージコレクションから画像を取り出す var img = imageCollection .first() //コレクションから取り出した画像をの詳細をコンソールに出力する print(img) //画像を地図上にオーバーレイする Map.addLayer(img); |
衛星画像を地図上にオーバーレイすることができましたが、ほぼ真っ暗でなにも見えません。
これは、衛星の観測バンドの値が適切なRGB値として適用されていないためです。
次の項では、可視域のバンド値を使ってトゥルーカラーと呼ばれる可視化を行います。
参考:
よくみかける画像へ可視化する
ビジュアライズする
landsat 8号の場合、バンド(2、3、4)がそれぞれ(青、緑、赤)の波長データとなっているので、bandsオプションで[“B4”, “B3”, “B2”]をRGBに適用します。
1 2 3 4 5 6 7 8 9 10 |
//可視域のバンドを用いて画像化する var trueColor = { bands:["B4", "B3", "B2"], //RGBに適用するバンドを指定 min: 0.0, max: 0.4, }; //画像を地図上に表示する Map.addLayer(img, trueColor, 'True Color'); |
全サンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
ar point = ee.Geometry.Point([139.93595520544523,35.96862661420853]); //ジオメトリオブジェクトが中心にくるように地図を移動する Map.centerObject(point, 8) //Landsat 8号の衛星画像を参照する var imageCollection = ee.ImageCollection('LANDSAT/LC08/C01/T1_TOA') .filterDate('2017-01-01', '2017-12-31') //期間で絞り込む .filterBounds(point) //場所で絞り込む //コレクションに含まれる画像の枚数をコンソールに出力する print(imageCollection.size()) //コレクションの詳細をコンソールに出力する print(imageCollection) //イメージコレクションから画像を取り出す var img = imageCollection .sort('CLOUD_COVER', true) //雲の被覆率が低い順にならべかえる (true:昇順, false:降順) .first() //コレクションから取り出した画像をの詳細をコンソールに出力する print(img) //可視域のバンドを用いて画像化する var trueColor = { bands:["B4", "B3", "B2"], //RGBに適用するバンドを指定 min: 0.0, max: 0.4, }; //画像を地図上に表示する Map.addLayer(img, trueColor, 'True Color'); |
アドベントカレンダー
この記事は、Google Earth / Google Earth Engine Advent Calendar 2018への参加投稿です。
“[Google Earth Engine入門]衛星画像のロードと地図へのオーバーレイ” への2件の返信
現在コメントは受け付けていません。