jiku log

データサイエンスの核心を掴む : 学びと発見の記録

「Pythonで学ぶ衛星データ解析基礎」を読む ~第3章 衛星データ解析準備 ①衛星データを取得する~

はじめに

宮﨑浩之 監修「Pythonで学ぶ衛星データ解析基礎―環境変化を定量的に把握しよう」は,Pythonを用いた衛星データ解析の基礎から実践までを網羅的に解説しており,製造業の競争力強化と持続可能な社会の実現にとって重要な,環境モニタリングやインフラ管理への応用に資する知識を提供すると考えている。本書を読むことを通じて,衛星データ解析を基礎を学ぶ。

本記事は,「第3章 衛星データ解析準備」における,衛星データの取得に関する読書メモである。

本記事を読むことで得られること

本記事を読むことで得られることは,主に以下の内容である。

  • 衛星データの取得方法と,サンプルコード実行時につまずいた点

第3章 衛星データ解析準備

本章では,衛星データの取得方法や,解析を行なう前に実行する前処理を紹介している。

3-1 衛星データを取得する

本章では,

の3種類のデータダウンロード方法を紹介している。

Sentinel-2

Sentinel-2は,陸域観測を主目的とした光学衛星であり,以下の特徴がある。

  • 可視光・近赤外を含む12種類の異なる波長帯で観測を行なう
  • 回帰日数は10日だが,同じ設計の衛星2機を運用することで,5日に1回,同一地点を観測する

Sentinel-2の詳細は,以下のサイトに記載されている。
参考 : Sentinel-2 | Copernicus Data Space Ecosystem

なお,2025年7月現在,Sentinel-2シリーズは3機打ち上げられており,2028年に4機目が打ちあがる予定とのことである。
参考 : Sentinel-2A / 2B / 2C / 2D | 一般財団法人リモート・センシング技術センター

Copernicus Browser からのダウンロード

本書では,Copernicus Open Access Hubからデータをダウンロードするために,https://scihub.copernicus.eu/dhus/ にアクセスすることが説明されているが,2025年7月現在,こちらにはアクセスできない。そのため,以下のサイトを参考に,Copernicus Browserからのデータ取得を試みた。
qiita.com

検索条件の設定

Copernicus Browser を開き,画面左側の「SEARCH」をクリックすると,検索条件の設定画面が現れる。ここで,雲量や衛星の種類,期間を選ぶことができる。

検索条件を設定して検索すると以下のようになる。

APIでSentilnel-2の画像を取得する

本項ではsentinelsatパッケージを用いたAPI経由でのダウンロード方法について説明されている。
しかし,2023年10月にCopernicus Open Access Hubは閉鎖され,それに伴い以前のAPIが利用できなくなった。そのため本書のサポートページでは,新たなデータダウンロード方法が説明されていた(作成日は2024年4月)。
github.com

このNotebookを,手元のGoogle Colab環境で動作させてみた。

データの提供元

データの提供元は,Copernicus Data Space Ecosystem (CDSE)に更新されている。
CDSEは,

  • データカタログの閲覧
  • 衛星データプロダクトのダウンロー

などをAPIを介して提供している。

DataCubeの取得

データは,DataCubeとして取得する。データは,Network Common Data Form (NetCDF)形式(拡張し : .nc)で保存する。
読み込むときは,xarrayとして読み込む。

データの形式

読み込んだデータは,以下の3つの軸,すなわち時間軸・X軸(緯度)・Y軸(経度)を持つ。

  • t: time (datetime64[ns])
  • x: latitude (float64)
  • y: longitude (float64)

また,Data variables として,B04・B03・B02といったバンドの情報を持つ。
参考 : Sentinel-2 Bands | Sentinel Hub custom scripts

またData variables には,SCL(Scene Classification Layer)が含まれており,これには雲や植生などの情報が含まれる。

SpatioTemporal Asset Catalog (STAC)を利用する

STAC(https://stacspec.org/)は,地理空間データカタログの構築に推奨される仕様を提供している。仕様が共通になることで,時空間データに共通のメタデータAPIを与えることにより,利用者がデータを容易に扱えるようになる。

以下に,サンプルコードを実行したときにつまずいた点を整理した。

パッケージインストール時のエラー

STAC関連のパッケージをインストールするために,以下のコマンドを実行した。

# STACを利用するために、改めてライブラリのインストールを行います
# Colab利用時にはインストール後ランタイムを再起動してください
# !pip install cartopy
!pip install pygeos
!pip install rtree
!pip install sat-search
!pip install pystac-client

このとき,以下のようなエラーが表示された。

エラーメッセージを確認すると,python-dateutil 2.7.5 の依存関係が干渉を起こしていたようだった。
sat-search は古いバージョンのpython-dateutilを使用しているため,このエラーが出ないよう,以下のコマンドに修正し,その後ランタイムを再起動した。

!pip install pygeos
!pip install rtree
!pip install sat-search --no-deps  # ←依存関係を無視してインストール
!pip install pystac-client
!pip install "python-dateutil>=2.8.2"  # 念のため依存を正す
fionaのインストール
# ライブラリのインポート
import os, json
os.environ['USE_PYGEOS'] = '0'
from shapely.geometry import MultiPolygon, Polygon, box
from fiona.crs import from_epsg
... 

というコードブロックを実行したところ,fionaがないというメッセージが出たので,上記のコードブロックを実行する前に,fionaのインストールを行なった。

!pip install fiona

まとめと感想

今回は,「第3章 衛星データ解析準備」における,衛星データの取得についてまとめた。

データの取得や管理については,STACを用いるのが良いということが理解できた。
本書が執筆されたのは2022年だが,その後データの提供元が変わっていた。またPythonコードもアップデートがかかるので,サンプルコードを動かす際には,最新情報に気を付けたい。

本記事を最後まで読んでくださり,どうもありがとうございました。