| from sentinelsat import SentinelAPI, read_geojson, geojson_to_wkt |
| from datetime import datetime, timedelta,date |
| import zipfile |
| import rasterio |
| from rasterio.plot import show |
| from PIL import Image |
| import matplotlib.pyplot as plt |
| import numpy as np |
| import pandas as pd |
| import os |
| from glob import glob |
| from tqdm import tqdm |
| |
| |
| import xmltodict |
| import json |
| import warnings |
| import shutil |
| warnings.filterwarnings('ignore') |
|
|
| |
| def map_number(number): |
| return str(0)+str(number) if len(str(number))==1 else str(number) |
|
|
| |
| def download(cordinate): |
| |
| GEOMAP = read_geojson('data/map.geojson') |
|
|
| lon,lat = cordinate[0],cordinate[1] |
| A,B,C,D = [lon-0.01,lat+0.01],[lon-0.01,lat-0.01],[lon+0.01,lat-0.01],[lon+0.01,lat+0.01] |
| area_of_study = [[A,B,C,D,A]] |
| GEOMAP["features"][0]["geometry"]["coordinates"] = area_of_study |
|
|
| N_DAYS_AGO = 30 |
| today = datetime.now() |
| current_year_today,current_month_today,current_day_today = today.year, today.month, today.day |
| n_days_ago = today - timedelta(days=N_DAYS_AGO) |
| current_year_n_days_ago,current_month_n_days_ago,current_day_n_days_ago = n_days_ago.year, n_days_ago.month, n_days_ago.day |
| day_format = date(current_year_today,current_month_today,current_day_today) |
| n_days_ago_format = str(current_year_n_days_ago)+map_number(current_month_n_days_ago)+map_number(current_day_n_days_ago) |
|
|
| |
| with open('credentials.json', 'r') as openfile: |
| |
| credentials = json.load(openfile) |
|
|
| user = credentials["user"] |
| pwd = credentials["pwd"] |
|
|
| api = SentinelAPI(user, pwd, 'https://apihub.copernicus.eu/apihub') |
| |
| |
| footprint = geojson_to_wkt(GEOMAP) |
| products = api.query(footprint, |
| date=(n_days_ago_format, day_format), |
| platformname='Sentinel-2', |
| producttype = "S2MSI2A") |
| |
| |
| api.download_all(products) |
|
|
| |
| def unzip(): |
| files = glob('*.zip') |
| for file in files: |
| with zipfile.ZipFile(file, 'r') as zip_ref: |
| zip_ref.extractall() |
|
|
|
|
| |
| def select_best_cloud_coverage_tile(): |
| tile_names = {} |
| cld_prob = [] |
| folders = glob('*.SAFE') |
| for fold in folders: |
| metadata_path = fold+"/MTD_MSIL2A.xml" |
| xml_file=open(metadata_path,"r") |
| xml_string=xml_file.read() |
| python_dict=xmltodict.parse(xml_string) |
| cld = float(python_dict["n1:Level-2A_User_Product"]["n1:Quality_Indicators_Info"]["Cloud_Coverage_Assessment"]) |
| tile_names[cld] = fold |
| cld_prob.append(cld) |
| name = tile_names[min(cld_prob)] |
| dates = name.split('_')[2][:8] |
| acquisition_date = datetime.strptime(dates, "%Y%m%d") |
| today = datetime.now() |
| delta = (today - acquisition_date) |
| days_ago = delta.days |
| return name,min(cld_prob),days_ago |
|
|
|
|
| |
| def delete_tiles(): |
| files = glob('*.zip') |
| folders = glob('*.SAFE') |
| for f in files: |
| os.remove(f) |
| for fold in folders: |
| shutil.rmtree(fold, ignore_errors=True) |
|
|
|
|
|
|
|
|
|
|