BEEPAS-2 / api.py
youl's picture
New application
98e563e
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
#from haversine import haversine, Unit
#from xml.etree import ElementTree as et
import xmltodict
import json
import warnings
import shutil
from shapely.geometry import Point
from shapely.geometry.polygon import Polygon
warnings.filterwarnings('ignore')
##
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 find_good_tile(df, point):
for row in tqdm(df.itertuples(),total=len(df)):
tile_name = row.tiles
coordinate = row.coords
x = coordinate.replace(']','')
x = x.replace('[','')
x = x.replace("'",'')
tab = [[float(x.split(",")[i]),float(x.split(",")[i+1])] for i in range(0,len(x.split(",")),2)]
polygon = Polygon(tab)
result = polygon.contains(point)
if result:
print(tile_name)
return tile_name
return 404
##
def delete_tiles():
files = glob('*.zip')
folders1 = glob('*.SAFE')
folders2 = glob("*.tmp")
for f in files:
os.remove(f)
for fold in folders1:
shutil.rmtree(fold, ignore_errors=True)
for fold in folders2:
shutil.rmtree(fold, ignore_errors=True)