##概要
こんにちは。
衛星画像を解析する上では、対象領域(以下ROI)の特定が必要な場合が多いです。特に近年高解像化が進む衛星画像はとんでもなくデータ容量を食う(一枚数百MB~数GB)ため、これを毎回全部扱っていてはメモリとSSDがいくらあっても足りません。ですので、特定領域だけ切り抜いて処理した方が計算時間と財布に優しいことが殆どです。
ROIを指定するのには色々な方法がありますが、Polygonの形で保持するのが一般的かと思います。特にGeopandasのGeoDataFrameはマップに表示したりする上でも非常に使い勝手が良く、よく使われています。
ROIのGeoDataFrameへの取り込みは、Shapefile(.shpの拡張子のモノ)を使うやり方がよく使われています。Shapefileの取り込みや、GeoDataFrameについての説明はここが詳しいです。
行政区画等はShapefileで配布されてることが多いのですが、自分は代替としてGeoJSONファイルによってROIを指定し、それをGeoDataFrameへと取り込む手法を使っています。本記事では、Google earth Engine(以下GEE)を使って描いたROIをGeoJSON形式で出力し、pythonへ取り込んで地図と重ねて表示する方法をご紹介したいと思います。
##前提条件
- GEEのアカウントを作成済みであること(アカウントが無い方はこちらからサインアップしてください)
- Google Colabで実行 (記事執筆時点でのバージョンはpython 3.6.9)
##コード等(GEE)
今回の例として、JAXAの種子島宇宙センター・ロケット発射場をROIとして見てみます。GEEのCode Editorを開いたら、自分の注目したい領域についてズームします。
左上にある小さいマークの中から、図形を描画を選択して、クリックしながらROIを描いていってください。最後に始点となった点をクリックすることで、PolygonとしてROIが描かれます。
ROIを描き終わったら、以下のコードを打ち込んでください。打ち込んでからコンソール上のrunボタンを押すことで、コードが実行されます。ファイル名を指定したければ、'vectorsToDriveExample'の部分をお好みの名前に編集してください。
var polygon=geometry;
var polyFeature = ee.FeatureCollection(polygon);
Export.table.toDrive({
collection: polyFeature,
description:'vectorsToDriveExample',
fileFormat: 'GeoJSON'
});
ここからが絶妙に分かりにくいのですが、コードを実行すると右上のtaskボタンがオレンジ色になっています。これを選択して、runを押すことによってGeoJSONファイルがGoogle drive上に書き出されます(正確にはrunを押すと保存先指定等のダイアログが出ると思いますが、保存先がdriveになっていることさえ確認しておけば大丈夫です)。
driveを確認すると、無事にGeoJSONファイルが出力されていました。
##コード(python)
作成したGeoJSONファイルをpythonへと取り込み、マップ上で表示してみたいと思います。geopandasをインポートしましょう。インポートできない場合には、pip insall geopandasでインストールしてください。地図を表示するためにfoliumも同時にインポートしています。
import geopandas as gpd
import folium
あとはGeoDataFrameへ先ほどのGeoJSONを取り込み、マップへと表示してみましょう!
polygon=gpd.read_file('/content/drive/MyDrive/Colab Notebooks/GeoJson/vectorsToDriveExample.geojson')
m=folium.Map([30.40,130.9576],zoom_start=14) #マップで表示するおおよその緯度・経度とズーム倍率の指定
folium.GeoJson(polygon).add_to(m)
m