5
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Sentinel2で衛星画像タイルを作成する(1)衛星画像ダウンロード編

Last updated at Posted at 2021-06-10

Sentinel2 の衛星画像を使い衛星画像タイルを作成してみたので、何回かに分けて書いてみます。

まずこの記事では衛星画像を取得する Python ライブラリの sentinelsat について解説します。

  1. sentinelsatで衛星画像をダウンロードしてみる。
  2. sentinelsatでの条件にあった衛星画像を取得するクエリの書き方。

sentinelsat で衛星画像ダウンロード

1. Copernicus Open Access Hub でユーザー登録

まず、衛星画像をダウンロードするために、Copernicus Open Access Hub にアクセスしユーザー登録をします。「Sign up」をクリックしてユーザー登録をして下さい。

https://scihub.copernicus.eu/dhus/#/home

スクリーンショット 2021-06-10 13.14.09.png

ユーザー名とパスワードを sentinelsat で指定して衛星画像をダウンロードするので、忘れないようにメモしておいて下さい。

Sentinel2のプラットフォームについて

ちなみにSentinel2の画像をダウンロードできるプラットフォームは色々ありますが、esa が運営しているプラットフォームは「Copernicus Open Access Hub」です。

「SentinelHub」など民間企業が運営している似たようなプラットフォームがあるので間違わないように気をつけて下さい。

2. sentinelsat で衛星画像をダウンロード

衛星画像のダウンロードに必要なライブラリをインストールします。

$ pip install sentinelsat
$ pip install matplotlib
$ pip install shapely

main.py を作成して 必要なライブラリをインポートして下さい。

# manin.py
import os
from sentinelsat import SentinelAPI, read_geojson, geojson_to_wkt 
import matplotlib.pyplot as plt
from shapely.geometry import MultiPolygon, Polygon

2.1. 衛星画像を取得したい範囲のGeoJSONを作成

衛星画像を取得したい範囲の緯度経度を取得し、GeoJSONを作成します。

キーン州立大学が公開しているツールを使い緯度経度を取得します。

https://www.keene.edu/campus/maps/tool/

スクリーンショット 2021-06-10 13.41.34.png

GeoJSONを作成します。

# manin.py
# 衛星画像取得する範囲を指定
AREA =  [
  [
    139.0240751,
    36.1879383
  ],
  [
    139.0570341,
    34.7880413
  ],
  [
    140.8093534,
    34.8060848
  ],
  [
    140.8642851,
    36.1591156
  ],
  [
    139.0240751,
    36.1879383
  ]
]

from geojson import Polygon
m=Polygon([AREA])

# GeoJSON ファイルを出力
object_name = 'Tokyo_Bay'
import json
with open(str(object_name) +'.geojson', 'w') as f:
    json.dump(m, f)
footprint_geojson = geojson_to_wkt(read_geojson(str(object_name) +'.geojson'))

2.2. 衛星画像をダウンロード

SentinelAPI.queryでパラメーターを指定して、衛星画像をダウンロードできます。

# manin.py
# Copernicus Open Access Hub のユーザー情報を設定
user = '自分のユーザー名を貼り付け' 
password = '自分のパスワードを貼り付け' 
api = SentinelAPI(user, password, 'https://scihub.copernicus.eu/dhus')

# 衛星画像を取得する条件を指定
products = api.query(footprint_geojson,
                     date = ('20200608', '20210608'), #取得希望期間の入力
                     platformname = 'Sentinel-2',
                     processinglevel = 'Level-2A', 
                     cloudcoverpercentage = (0,100)) #被雲率(0%〜100%)

# 衛星画像のメタデータ
product = list(products.values())[0]

# ダウンロード
api.download(product['uuid'])

上記のコードを main.pyに追加しターミナルで以下を実行すると、ダウンロードが始まります。

$ python main.py

クエリの指定の仕方

SentinelAPI.query で条件を指定してクエリを書くことが出来ます。

パラメーター

  • date: 検索する期間

    • yyyyMMdd
    • yyyy-MM-ddThh:mm:ss.SSSZ (ISO-8601)
    • yyyy-MM-ddThh:mm:ssZ
    • NOW
    • NOW-<n>DAY(S) (or HOUR(S), MONTH(S), etc.)
    • NOW+<n>DAY(S)
    • yyyy-MM-ddThh:mm:ssZ-<n>DAY(S)
    • NOW/DAY (or HOUR, MONTH etc.)
  • order_by

  • limit

その他にも以下のドキュメントにあるキーワードパラメーターとして使えます。

  • platformname: 衛星の名前
      • platformname:Sentinel-1
      • platformname:Sentinel-2
      • platformname:Sentinel-3
      • platformname:Sentinel-5 Precursor
  • cloudcoverpercentage: 被雲率(0%〜100%)
    • cloudcoverpercentage:95
    • cloudcoverpercentage:[0 TO 5]
  • processinglevel: 衛星画像の処理のレベル
    • Level-1C
    • Level-2A

詳しくは公式ドキュメントをご参考ください。

https://sentinelsat.readthedocs.io/en/stable/api_reference.html#sentinelsat.sentinel.SentinelAPI.query

processinglevel

クエリのパラメーターの中に、processinglevel がありました。耳慣れない言葉ですが、衛星画像の処理レベルのことです。

今回は 'Level-2A' を指定していますが、

ここで取得するSentinel-2のプロダクトレベルは,L1-2Aを要求しています.
これは,衛星画像の位置合わせを終えたL-1Cレベルに,大気のゆらぎ(モヤ)を補正した画像になります.

人工衛星(Sentinel-2)の観測画像をAPIを使って自動取得してみた. - Qiita より引用

詳しく、衛星画像の処理レベルについて知りたい場合は、以下をご参考ください。

まとめ

今回は衛星画像のダウンロードまでをやってみました。また、続編として指定した期間の中で、1番雲が少ない画像を取得する方法や、ダウンロードした画像をタイルに変換する方法を書こうと思います。

参考

5
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?