Ridge-iのエンジニアのwhataです。 今回は無料で世界中の「今」を知れる衛星データ取得方法について解説します。
はじめに
近年衛星の打ち上げ数が増えており、それに伴い、衛星データの利用が拡大しております。 例えば、[1]では、農業、森林伐採、漁業や株価予測まで様々なところで衛星データが利用されていると書かれております。
一方で、どのように取得すればよいかわからない。衛星データは高価であるためなかなか手が出しにくいといった声も聞かれます。そこで、今回は無料で手に入れることができる衛星Sentinelの取得方法についてまとめたいと思います。
この記事では、衛星データで簡単に確認できればよいというビジネス界隈の方と、取得を自動化したいというエンジニア界隈の方どちらのニーズの方にも対応しておりますので、参考にしていただければと思います。
Sentinelとは
Sentinelとは、コペルニクス計画[2]の一部としてESA (Europe Space Agency)が打ち上げ、運用する衛星群の名称です。 2022年現在までに、Sentinel-1(SAR衛星)が2機(うち1機は故障により運用終了)、Sentinel-2(光学衛星)が2機、Sentinel-3(光学衛星)が2機、Sentinel-5P(光学衛星)が1機、Sentinel-6(光学衛星)が1機打ち上げられています。 利用のすそ野を広げるために、研究用途及び商用利用のいずれも許可されている稀有な衛星となります。
上記の衛星のうち、Sentinel-1とSentinel-2に関しては、取得頻度も高く(同一地点最大2週間に1回程度)、分解能も他と比べて高い(約10m程度)ことから実ビジネスでの適用性も高いと考えられます。
取得のハードルも下がったとはいえ、いろいろな場所で公開されており、それぞれにメリットデメリットあるため、この記事で詳細にまとめたいと思います。
取得方法
取得方法は用途に応じて下記の3種類あります。
- EO browser経由で取得(ビジネスの方におすすめ)
- Sentinel hubからダウンロード
- AWS経由でダウンロード(エンジニアの方におすすめ)
- Google Earth Engine経由でダウンロード(エンジニアの方におすすめ)
- その他のソース
それぞれについて詳しく見ていきましょう
1. EO browser経由で取得する方法
EO browserは、Sentinelの画像を簡単に可視化できるプラットフォームです。可視化の際にも、簡単な解析コードを書いてオリジナルの可視化画面を作成することもできますし、時系列の変化もムービーで出力することが可能です。こちらの記事(英語)[3]やこちらの記事(日本語)[4]に詳細な利用方法が記載されています。
詳細は参考の記事にお任せし、本記事では、画像のダウンロードに絞ってご紹介します。
- 左のコントロールパネルから、検索したい衛星と期間を選択し
Search
ボタンを押下します
- 所望の画像を検索し、
Visualize
ボタンを押下します
- 右の画像ダウンロードボタンを押下します
- Analyticalタブに移動します
- Image formatをTIFF形式にします(16bitでも構いません)
- Image resolutionをお好みのサイズにします
- Coordinate systemはお好みの座標系にします
- ダウンロードしたいバンドを選択します
上記のプロセスを踏むと、画像がダウンロードでき、QGISに重畳すると以下の通りとなります。
注意点としては、EO browserの仕様上、ダウンロードできる画像の最大の幅もしくは高さは2500pixと決められているため、表示している縮尺次第で、Sentinelの分解能である10mには届かないケースが出てきます。そのため、10m分解能が欲しい場合には、画像ダウンロードボタンを押下する前に所望の解像度まで近づけて押下することが必要です。
まとめると、EO browser経由で画像を取得する方法の利点と欠点は以下の通りです。
利点:
- GUIベースで好きなband帯をダウンロードできます
- 操作が簡単です
欠点:
- 高分解能を広範囲で一括取得することが難しい(画面内の範囲のみダウンロードが可能です。(最大一辺2500pix程度))
2. Sentinel open access hubからダウンロード
Copernicus open access hubは、Rawデータに近いデータ(SARデータではSLC形式等)も保存されており、干渉SARなどにも対応できる点が魅力的です。
- 上図の丸を付けた部分から入ることができます
- 左上の赤丸で囲んだ3本線の箇所をクリックし、フィルターを作成します
- 画面上で画像を取得したい部分を右クリックを押して指定(最後は右ダブルクリックでポリゴン作成完了)
- 赤枠と赤丸部分を選択し、観測の期間と衛星を選択します
- 衛星データの一覧が取得されるので、好きな画像を選んでダウンロードします
利点と欠点は以下の通りです。
利点:
- RAWデータに近いデータをダウンロードできます
- GUIベースで操作がしやすいです
欠点:
- オフラインのデータに関しては、取得までに数日かかります
- 1日にダウンロードできる箇所が4か所までに限られています
3. AWS経由でダウンロード
1、2の手法は手動であるため、処理を自動化するという観点では修正が必要でした。自動取得という視点では、AWS経由でダウンロードする方が簡単です。詳しい説明は[5]にて紹介されています。
利点:
- コードを一度書くと他のデータを取得する際にも再利用がしやすいです
- 一度に大量のデータをダウンロードすることが可能です
欠点:
- CLIを使う際に若干コーディングの知識が必要
- タイルをまたがる形でAoI(Area of Interest: 関心領域)を設定すると大量のデータをダウンロードしなければならない(Sentinelは合計10バンド以上有した衛星で、一つのタイルで約1GB程度する場合があります)
4. Google Earth Engine[6]経由でダウンロード
Google Earth EngineはGoogle社から提供されているサービスであり、付属のIDEを用いて様々な衛星データを用いた解析をクラウド上で実施することが可能です。さらに、Google Earth Engine Appを用いると簡単にウェブアプリケーションを提供することができます。GRASP EARTHもこのプラットフォームを利用しています。ただし、商用利用にはライセンスが必要なので注意が必要です。
AWSを用いたデータのダウンロードでは、関心領域を定めたとしても、画像をタイルごとにダウンロードしなければならず、時間が非常に多くかかってしまうことが問題でした。Google Earth Engineを用いるとAoI(Area of Interest: 関心領域)に絞って画像をダウンロードすることが可能です。
Google Earth Engineの簡単なチュートリアルはこちら[7]から確認することができます。
東京都心の画像(2022年1月1日周辺)を取得することを例にご紹介します。 code editorのコードの部分に以下を貼り付けることで、都心部のカラー画像(Sentinel-2のB2: 青, B3: 緑, B4: 赤のバンド)のtif画像がGoogle Driveのマイドライブ直下に取得できます。
geometry
部分を任意の形状に設定することで、見たい箇所の画像を取得することができます。
var date = ee.Date('2022-01-01'); var sentinel2 = ee.ImageCollection('COPERNICUS/S2_SR') .filterDate(date, date.advance(2, 'day')) .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 100)) .select(['B2', 'B3', 'B4']) .mean(); var geometry = ee.Geometry.Rectangle([139.705, 35.723, 139.812, 35.629]); var projection = sentinel2.select(['B2', 'B3', 'B4']).projection().getInfo(); Export.image.toDrive({ image: sentinel2, description: 'imageToDriveExample_transform', crs: projection.crs, // crsTransform: projection.transform, region: geometry, scale: 10 });
このコードの中で、肝となるのが以下のパートです。
var sentinel2 = ee.ImageCollection('COPERNICUS/S2_SR') .filterDate(date, date.advance(2, 'day')) .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 100)) .select(['B2', 'B3', 'B4']) .mean();
filterDate
の部分で、設定した日時からどれくらいのインターバルを設けて画像を取得するか(今回の場合には2022/1/1から2022/1/3(2日 advance)の間の画像を取得しています)を設定でき、filter
部分で許容できる雲量の割合を指定し、select
で取得したいバンドを指定しています。一般的に、衛星がある地点を撮影したかどうかは情報を見に行かないとわからないですが、filterDate
を広めに設定しておくと、その中のどこかで撮影されていた場合にはユーザーが意識することなく取得することが可能ですので、非常に有用です。
幅広い期間を設定してしまうと、複数枚取得される場合があるため、最後のmean
部分で、複数取得された場合にはピクセルごとに平均化して一枚の画像を生成してくれます。ここでは、他にもmedian
なども指定することができるので、お好みで設定してみてください。
取得できた画像は以下の通りです。(可視化のために、QGIS上でOpen street map上に重畳させています)
今回は、Google Driveに保存する形式でご紹介しましたが、Google Cloud Storageにもほぼ同様の方法で取得することができるので、大量のデータをプロジェクトごとに整理して保存したい場合には有用です。
5. その他
その他のデータソースとして、Sentinel-1の画像であれば、ASF [8]からダウンロードすることが可能です。
さいごに
いかがだったでしょうか。 Ridge-iでは様々なポジションで積極採用中です。カジュアル面談も可能ですのでご興味がある方は是非ご連絡ください。