Are you getting enough sleep?

いつも眠い.これが睡眠負債というやつか.

Sentinelsat で Sentinel-1 のデータをダウンロードしたい

久しぶりの Python

久しぶりすぎて忘れてる。特に配列の使いかた。
VMWareubuntu で試して,大丈夫そうなら本番環境へ。

ほとんど宙畑のコードのままだけど,Sentinel-1に関するところはもちろん変更。
本職ではないので,間違っているところがあればご容赦ください。
結局は自分メモなので。

環境の準備から

注意点の説明。独自仕様があるので要確認。
ユーザーディレクトリにいれるか,いつも通りの /usr/local/lib にいれるか,ですね。

pip: Python環境構築ガイド - python.jp

sentinelhub のインストール方法を確認してみた。pip でいれるので,注意点は上記の通り。

Installation — Sentinel Hub 3.7.0 documentation


anaconda をつかうことにしたので,conda install であることに注意。

Conda と Pip: Python環境構築ガイド - python.jp


結局,下記の通りなので仮想マシンを再構成して,apt でいれることにした。
pip は極力使わないほうがいいみたいだし。
また,anaconda の conda で geopands いれようと思ったら入らないし。

pip: Python環境構築ガイド - python.jp

sentinelsat,geopandas,folium を python3-? でいれた。
anaconda で spyder をつかったので,どうせならと apt で spyder もいれた。

コードの説明

参考した宙畑ではimportがたくさんあったけど,結局使ってない。

注意点というかメモを列挙。

  • よくわかってないのがダメなんだけど, orbitnumber で指定できるのかと思ったけどできなかった。
  • 場所を AREA で指定するけど,重なる場合もあるので relativeorbitnumber で指定すればよいと思った。
  • products の中身は,Open Access Hub を参考に。
  • S1AとS1Bをどう区別すればよいのかわからなかった。Search Keywords にも無いし。そこで,orbitdirection と relativeorbitnumber で指定してみた。
  • 日付が新しい順にsort して,最も新しい日付だけを download することにした。毎日 cron でまわすなら,1個とればよいかと。
import folium 

from sentinelsat import SentinelAPI, read_geojson, geojson_to_wkt
import geopandas as gpd

import sys
import datetime

dt_now = datetime.datetime.now()

AREA = [ [ x1, y1 ],  [ x2, y2 ], [ x3, y3 ], [ x4, y4 ], [ x5, y5] ]

for i in range(len(AREA)):
    AREA[i][0] = AREA[i][0] +360
from geojson import Polygon
m=Polygon([AREA]) 

object_name = 'NAME'

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'))

user = 'USER'
password = 'PASS'
api = SentinelAPI(user, password, 'https://scihub.copernicus.eu/dhus')

m = folium.Map([(AREA[0][1]+AREA[len(AREA)-1][1])/2,(AREA[0][0]+AREA[len(AREA)-1][0])/2], zoom_start=10)

folium.GeoJson(str(object_name) +'.geojson').add_to(m)
m

products = api.query(footprint_geojson,
                     platformname = 'Sentinel-1',
                     producttype = 'SLC',
                     orbitdirection = 'Ascending',
                     polarisationmode = 'VV VH',
                     sensoroperationalmode = 'IW',
                     relativeorbitnumber = '83',
                     date = (dt_now.strftime('%Y%m%d'), dt_now.strftime('%Y%m%d'))
                     )

if len(products) == 0:
    sys.exit()
else:
    products_gdf = api.to_geodataframe(products)
    products_gdf_sorted = products_gdf.sort_values(['beginposition'], ascending=[False])
    index = products_gdf_sorted.index[0]
    api.download(index)
リンク関係

APIなど

Sentinelsat — Sentinelsat 1.1.1 documentation

Open Access Hub

Getting Started — GeoPandas 0.11.0+0.g1977b50.dirty documentation

衛星に関すること

User Guides - Sentinel-1 SAR - Sentinel Online - Sentinel Online

Sentinel-1A / 1B / 1C / 1D | 一般財団法人リモート・センシング技術センター

プログラムの参考

【コード付き】Sentinelの衛星データをAPI経由で取得してみた | 宙畑

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

OpenCVの使い方 | Tellus

GeoJSONファイルを可視化(地図上表示) - Qiita