久しぶりの Python
久しぶりすぎて忘れてる。特に配列の使いかた。
VMWareの ubuntu で試して,大丈夫そうなら本番環境へ。
ほとんど宙畑のコードのままだけど,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
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経由で取得してみた | 宙畑