近年、地理情報を応用したデータ分析が多くの分野で注目されています。例えば、こちらの記事で軽く紹介したQGISなどの地理情報システム(GIS)ソフトウェアは、都市計画から環境保全、さらにはマーケティング戦略まで、多くの分野で使われています。また、GISとリモートセンシングを合わせた、より高度な分析も行われています。
この記事では、QGISのGoogle Earth Engine(GEE)プラグインを紹介します。このプラグインを使用すると、GEEを用いた地球規模の環境データの取得、分析結果をQGIS上に簡単に可視化することができます。
QGIS 3.28.11, GEE Plugin 0.0.6
QGISとは?
QGISは、地理情報システム(GIS)のためのオープンソースソフトウェアで、地理データの閲覧、編集、分析を行うことができます。QGISは多くのプラットフォーム(Windows、MacOS、Linux)に対応しており、商用GISソフトウェアと比較しても多機能でありながら無料で利用することができます。
主な特徴としては以下があげられます。
- 多機能かつ柔軟性が高い: QGISは、地理データのインポート・エクスポート、地図作成、空間解析など、多くのGISタスクを実行することができます。
- オープンソース: ソースコードが公開されているため、コミュニティの支援を受けつつ進化しています。また、カスタマイズや拡張が容易です。
- 豊富なプラグイン: サードパーティによって開発されたプラグインが多数あり、特定の機能を追加することができます。
GEEプラグインについて
今回紹介するGEEプラグインはQGIS上でAPIの操作を可能にするプラグインで、Pythonコンソールを利用すればこれまに紹介してきたGEEの処理がQGIS上で行えます。うまく利用すれば、以下のようなGEEの処理とGISでの処理を一元化することができます。
- 地球規模の多様な環境データの簡単な取得
- リアルタイムでの地理空間データ解析
- 複数のデータセットを組み合わせた複雑なクエリの実行
- インタラクティ���な地図の作成と共有
GEEプラグインの使い方
基本的な使い方
まずはGEEプラグインをインストールするため、メニューバーからPlugins > Manage and install Plugins
を選択します。
以下のようなウィンドウが開くので、検索バーにGoogle Earth Enigneと入力しGEE関連のプラグインを検索します。
複数の候補が引っ掛かってきますが、今回は「Google Earth Engine」というプラグインを選択します。選択したら右下のInstall Plugin
をクリックしインストールします。
インストールが完了すると以下のようにPluginsの配下にGoogle Earth Engine Pluginという項目が追加されます。User Guideを選択するとガイドとGitHubのリンクが記載されたホームページにアクセスします。使い方に迷ったら確認してみましょう。
さっそくプラグインを使用していきます。このGEEプラグインはQGIS上のPythonで操作します。右上のPythonのアイコンをクリックすると以下のようにPythonのコンソール画面が表示されます。
それではGEEプラグインのガイドにもある以下のコードを実行してみましょう。
import ee
from ee_plugin import Map
image = ee.Image('USGS/SRTMGL1_003')
Map.addLayer(image, {'palette': ['blue', 'red'], 'min': 0, 'max': 5000}, 'dem', True)
赤枠で囲ったShow Editor
をクリックすると右半分にスクリプトの編集画面が表示されるので、上記のコードをコピー&ペーストします。
次に緑の▶をクリックし、スクリプトを実行します。すると画像のようにGEEで取得した衛星画像が表示されます。
このコードを解説すると以下の通りです。
2行目from ee_plugin import Map
: ee_plugin
モジュールから Map
クラスをインポートします。この Map
クラスは、QGIS内で地理空間データを表示や操作するための地図ウィンドウを制御します。
3行目image = ee.Image('USGS/SRTMGL1_003')
: アメリカ地質調査所(USGS)が提供する標高(DEM)データを取得します。
4行目Map.addLayer(image, {'palette': ['blue', 'red'], 'min': 0, 'max': 5000}, 'dem', True)
: 取得したDEMデータ(image
)をQGISのマップ上にレイヤーとして追加します。
'palette': ['blue', 'red']
: 標高の低い地点を青色、高い地点を赤色で表示します。'min': 0, 'max': 5000
: 標高の表示範囲を0mから5000mに設定します。'dem'
: レイヤーの名前をdem
としています。True
: レイヤーを表示するかどうかを制御するフラグです。True
なので、レイヤーは表示されます。
NDVIを表示させる
こちらの記事ではFoliumを使ってSentinel-2で計算したNDVIを表示させました。
例えば以下のようにコードを修正することでQGIS上で表示させることもできます。
import ee
from ee_plugin import Map
# GEEの認証と初期化
ee.Initialize()
# 雲に覆われているピクセルの補正処理関数
def maskS2clouds(image):
qa = image.select('QA60')
cloudBitMask = 1 << 10
cirrusBitMask = 1 << 11
mask = qa.bitwiseAnd(cloudBitMask).eq(0).And(qa.bitwiseAnd(cirrusBitMask).eq(0))
return image.updateMask(mask).divide(10000)
# NDVIの計算用関数
def calc_ndvi(image):
return image.normalizedDifference(['B8', 'B4'])
# Sentinel-2のデータの収集
Sentinel2 = ee.ImageCollection('COPERNICUS/S2_SR')
# 冬と夏の情報を抽出
winter = Sentinel2.filterDate('2020-12-01','2021-02-28').filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',20)).map(maskS2clouds)
summer = Sentinel2.filterDate('2021-07-01','2021-09-30').filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',20)).map(maskS2clouds)
# NDVIと中央値の計算
ndvi_winter = winter.map(calc_ndvi).median()
ndvi_summer = summer.map(calc_ndvi).median()
# NDVIの夏と冬の値の差を計算
ndvi_diff = ndvi_summer.subtract(ndvi_winter)
# マップの中心に表示する緯度経度
lat, lon = 36.0, 140.0
center_point = ee.Geometry.Point([lon, lat])
# マップにレイヤーを追加
Map.centerObject(center_point, 10)
Map.addLayer(ndvi_winter, {'min': -1, 'max': 1, 'palette': ['red', 'yellow', 'green']}, 'NDVI Winter 2020')
Map.addLayer(ndvi_summer, {'min': -1, 'max': 1, 'palette': ['red', 'yellow', 'green']}, 'NDVI Summer 2021')
Map.addLayer(ndvi_diff, {'min': -1, 'max': 1, 'palette': ['red', 'yellow', 'green']}, 'NDVI Difference')
実行結果が以下の通りです。
こちらの記事ではFoliumで表示しましたが、QGIS上で表示させることができました。今回は動作を軽くするためにNDVI Difference
のみを表示させています。
最後に
今回はQGISのGoogle Earth Engine(GEE)プラグインに焦点を当てて紹介しました。このプラグインを使いこなすことで、衛星データの取得や表示がQGIS上でシームレスに行えるため、非常に便利です。
地理情報システム(GIS)解析は、高校の地理必修化に伴い、ますます注目を集めています。この流れに衛星データ解析を加えることで、さらに高度な地理空間分析が可能になります。
是非、いろいろな解析手法を試してみてください。