見出し画像

衛星画像解析(GoogleEarthEngine)をやってみた

前提

・衛星画像とは人工衛星の観測データを画像化したもの

◇今回大変参考になったサイト
↓jkatagi's pages(Google Earth Engine入門 -ゼロから始める衛星画像解析-)

GoogleEarthEngineについて

ざっくり言うとパソコンやスマホがあれば誰でも人工衛星のデータを分析解析することができるオンラインのプラットフォームです。

◇詳しくはこちらの記事で紹介されています!
↓宙畑(衛星画像解析が変わる!? 「Google Earth Engine」の何がすごいのか)


衛星画像解析のテーマ

1.中田島砂丘の自然の変化
2.浜松球場の温度変化

「地球温暖化による北極の氷の減少について」みたいなテーマは自分にはまだ早いので、まずは地元浜松をテーマにGoogleEarthEngineを使って衛星画像の解析をしてみました。

◇中田島砂丘について
↓フリー百科事典『ウィキペディア(Wikipedia)』


1.中田島砂丘の自然の変化

小学生の頃に学校の授業で中田島砂丘の砂浜が年々小さくなっていると聞いたのを思い出したので衛星画像で昔と今を比較してみましたが…

画像1

画像2

//Landsat-7,8(地球観測衛星)が観測した画像を利用
//JavaScriptを使用

//衛星画像を取得した日付を指定
var start_old = ee.Date('2000-03-01');
var finish_old = ee.Date('2000-03-31');
var start_now = ee.Date('2019-03-01');
var finish_now = ee.Date('2019-03-31');

//経度と緯度を指定
var lon = 137.7439;
var lat = 34.66075;
var point = ee.Geometry.Point(lon, lat);

//Landsat-7の画像を読み込み、検索場所と検索期間を指定
var landsat7_img = ee.ImageCollection('LANDSAT/LE07/C01/T1_SR')
 .filterBounds(point)
 .filterDate(start_old, finish_old);

//Landsat-8の画像を読み込み、検索場所と検索期間を指定
var landsat8_img = ee.ImageCollection('LANDSAT/LC08/C01/T1_SR')
 .filterBounds(point)
 .filterDate(start_now, finish_now);

//表示する画像の中心座標とズームレベルを指定
Map.setCenter(lon, lat, 13);

//使用するbandsを指定{Red(B3),Green(B2),Blue(B1)}
//画像の最小値、最大値を指定
var vizParams_7 = {bands: ['B3', 'B2', 'B1'], min:0, max:2000};

//使用するbandsを指定{Red(B4),Green(B3),Blue(B2)}
//画像の最小値、最大値を指定
var vizParams_8 = {bands: ['B4', 'B3', 'B2'], min:0, max:2000};

//画像を表示
Map.addLayer(landsat7_img, vizParams_7);
Map.addLayer(landsat8_img, vizParams_8);

正直画像を比べるだけじゃわからないです笑
こういう時に砂丘や海の面積を抽出できたら比較しやすいと思うのでこれから勉強していきます!(ただ潮の満ち引きや波の大きさが違うからそもそもこの方法だと正確な分析はできなさそう)

2.浜松球場の温度変化

自分が丸刈坊主で野球をやってた頃も充分暑かったのですが、最近の夏の暑さはハンパないので熱赤外センサを使って地元の野球場の温度変化を調べてみました。(2000〜2019年の温度変化)

◇以下のコードを参考にしました

https://code.earthengine.google.com/0a99ee7f141ba9e4ea2269ea3e940e07

画像3

画像4

//Landsat-7(地球観測衛星)が観測した画像を利用
//浜松球場の地表面温度の時系列変化(2000~2019)
//JavaScriptを使用

//温度を調べる場所を指定(浜松球場の黒土)
var hamakyu = ee.Feature(    
   ee.Geometry.Rectangle(137.734233, 34.743539, 137.734651, 34.743266));
var Regions = new ee.FeatureCollection(hamakyu);

//温度を調べる場所をマップで表示(赤色範囲)
var COLOR = { c1: 'ff0000'};
Map.addLayer(hamakyu, {color: COLOR.c1});
Map.setCenter(137.73448, 34.743372, 17);

//2000年以降のLandsat-7熱赤外センサを選択
var landsat7Toa = ee.ImageCollection('LANDSAT/LE07/C01/T1_TOA');
var temps = landsat7Toa
 .filterDate('2000-01-01', '2019-01-01')
 .filterBounds(ee.Geometry.Point(137.734426, 34.743403))
 .select('B6_VCID_1');

//輝度温度を摂氏に変換
temps = temps.map(function(image) {
 return image.addBands(image.subtract(273.15).select([0], ['Temp']));
});

//温度の時系列変化のグラフを作成
var tempTimeSeries = ui.Chart.image.seriesByRegion({
 imageCollection: temps,
 regions: Regions,
 reducer: ee.Reducer.mean(),
 band: 'Temp',
 scale: 200,
 xProperty: 'system:time_start',
 seriesProperty: 'label'
});
tempTimeSeries.setChartType('ScatterChart');
tempTimeSeries.setOptions({
 title: 'Temporal sequence of surface temperature in the Himalayas',
 vAxis: {
   title: 'Temperature (Celsius)'
 },
 lineWidth: 1,
 pointSize: 4,
 series: {
   0: {color: COLOR.c1},
 }
});
print(tempTimeSeries);

グラフをのっけることで一気に解析っぽくなった気がします。
ただ、温度変化をグラフで見てみてもあんまり温度の変化は見られませんでした。(そもそも観測日の天気を考慮してないのでデータとしては適切ではなさそうですが…)(暑さの違いを比較したいなら夏場のデータを増やして比較するべき?)
また観測した場所と雲の位置が被ったのが原因なのかわかりませんが、グラフの所々で氷点下を下回っていました。

上記のプログラムのグラフを作成する部分ですが、まだまだ理解できてない部分が多いのでこれから勉強していきます。

最後に

今回、衛星画像解析と言ったわりに大したことは出来ませんでしたが、実際に自分でプログラムを書いて動作させることで初めてプログラミングが楽しいと思うことができました。
ただ勉強をするだけではプログラミングを学び続けるのは難しいのでこれからも目的を持って取り組んでいきたいと思います。

最後まで読んでいただきありがとうございました!

この記事が気に入ったらサポートをしてみませんか?