This repository has been archived by the owner on Dec 5, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
sentinel_1data download.py
112 lines (105 loc) · 4.94 KB
/
sentinel_1data download.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# -*- coding: utf-8 -*-
'''
@author: LongChaohuo
@contact: 460958592@qq.com
@software: PyCharm
@file: Sentinel2_Download
@time: 2022/07/12 下午 14:12
'''
# 导入相应的模块
from sentinelsat import SentinelAPI, read_geojson, geojson_to_wkt
from datetime import date
import time
import datetime
import os
import pathlib
# sentinel-1数据下载函数
def sentinel_1_data(user_name,user_password,sentinel_url,start_date,end_date,platformname):
'''
:param user_name: 哥白尼数据访问中心账号
:param user_password:哥白尼数据访问中心账号密码
:param sentinel_url: 哥白尼数据访问中心URL
:param start_date: 数据搜索起始时间
:param end_date: 数据搜索结束时间
:param platformname: 卫星(sentinel卫星)
'''
# 获取文件下全部json文件(绝对路径)
# 兴趣区(https://geojson.io/)
while True:
areas = list(pathlib.Path(path).glob('*.geojson'))
print(areas)
#遍历json文件
for AOI in areas:
# 拼接路径
filename = os.path.join(path, AOI)
print(f'兴趣区路径为:{filename}')
#获取兴趣区名称
out_file = filename.split(".geojson")[0]
print(f'输出路径为:{out_file}')
# 根据文件名创建文件夹
if not os.path.exists(out_file):
os.makedirs(out_file)
download_area = geojson_to_wkt(read_geojson(filename))
# 设置连接sentinel数据中心的相关参数
sentinel_API = SentinelAPI(user_name,user_password,sentinel_url)
sentinel_products = sentinel_API.query(
area=download_area,#下载兴趣区域
date=(start_date,end_date),#时间间隔
platformname= platformname, #卫星
producttype = producttype,#数据等级
# polarisationmode= polarisationmode
)
print(f'共有产品{len(sentinel_products)}个')
#遍历查询列表的每一个数据产品
for product in sentinel_products:
#根据产品元数据字典
product_dict = sentinel_API.get_product_odata(product)
#获取产品id
product_ID = product_dict['id']
# 获取产品文件title
product_title = product_dict['title']
print(f'产品名称为{product_title}')
#通过产品id查询产品
product_info = sentinel_API.get_product_odata(product_ID)
#获取产品的在线及离线状态信息
product_online = product_info['Online']
#判断产品是否在线
if product_online: #在线
print(f'产品为{product_title}在线')
#判断本地是否有完整产品
if not os.path.isfile(out_file + os.sep + product_title + ".zip"):
print(f'本地无 {product_title}.zip 的完整文件')
#通过产品id下载产品
sentinel_API.download(product_ID,directory_path= out_file)
else:#产品不在线
print(f'产品为{product_title}不在线')
# 判断本地是否有完整产品
if not os.path.isfile(out_file + os.sep + product_title + ".zip"):
print(f'本地无{product_title}.zip 的完整文件,尝试触发 LongTermArchive 库')
try: # 尝试触发
sentinel_API.download(product_info['id'], directory_path= out_file)
sentinel_API.trigger_offline_retrieval(product_ID)
break #成功则跳出
except Exception as e:
print(f'[错误]请求失败,休眠 15分钟后重试(当前时间:{datetime.datetime.now()}')
# 每隔15min才能提交一次请求
time.sleep(60 * 15)
if __name__ == '__main__':
# 存放数据地址(.geojson文件所在的文件夹)及保存路径
path = r'C:\Users\1\Desktop\思维导图\脚本(杂)\哨兵数据下载\research area'
# 账号及密码
user_name="longchaohuo6"
user_password = "5720389a"
# 哥白尼数据访问URL
sentinel_url = 'https://scihub.copernicus.eu/dhus'
# 时间间隔
start_date ='20220128'
end_date ='20220728'
# 下载Sentinel卫星
platformname = 'Sentinel-1'
# 极化方式(S1 SAR 仪器的有效极化有:HH、VV、HV、VH、HH HV、VV VH)
# polarisationmode = 'VV'
# 数据类型:https://scihub.copernicus.eu/twiki/do/view/SciHubUserGuide/FullTextSearch?redirectedfrom=SciHubUserGuide.3FullTextSearch
producttype = 'GRD'#可选: SLC,GRD, OCN,
sentinel_1_data(user_name, user_password, sentinel_url, start_date, end_date, platformname
)