Select Git revision
eb_hooks.py
hls.py 3.12 KiB
import os
import pandas as pd
import requests
import rasterio as rio
import matplotlib.pyplot as plt
from datetime import datetime
from shapely.geometry import Polygon
import xml.etree.ElementTree as ET
from all_functions import parse_kml_to_tiles
from all_functions import search_hls_granules_by_tile
from all_functions import acquisition_download_links_to_csv
from all_functions import plot_union_polygon
kml_file_path = './hls_tiles.kml'
output_file_name = "amazon-download-links.csv"
date_from = "2020-01-01"
date_to = "2024-12-31"
cloud_coverage_step = 10
ifPlot = False
tile_id_list = list(pd.read_csv("amazon-dlr-tile-ids.csv", header=None)[0])
total_number_of_tiles = len(tile_id_list)
# tile_id_list = ["T17LRJ"]
# tile_id_list = ["T21MYS"]
tile_index = 0
if os.path.isfile(output_file_name): os.remove(output_file_name)
for tile_id in tile_id_list:
ifComplete = False
tile_index += 1
counter_message = f" ({tile_index}/{total_number_of_tiles})."
polygon_surface_relative_diff_percent = 100
tile_polygon, tile_coords = parse_kml_to_tiles(kml_file_path, target_tile_id=tile_id)
# granules = search_hls_granules_by_tile(["HLSL30"], tile_id, date_from, date_to, cloud_coverage_threshold)
needed_number_of_acquisitions = 0
for cloud_coverage_threshold in range(0,101,cloud_coverage_step):
granules = search_hls_granules_by_tile(["HLSL30", "HLSS30"], tile_id, date_from, date_to, cloud_coverage_threshold, cloud_coverage_step)
union_polygon = Polygon([])
for acquisition in granules:
needed_number_of_acquisitions += 1
# print(acquisition['title'][15:-5])
coord_tmp = acquisition['polygons'][0][0].split()
acquisition_coords = [[float(coord_tmp[i+1]),float(coord_tmp[i])] for i in range(0,int(len(coord_tmp)),2)]
acquisition_polygon = Polygon(acquisition_coords)
union_polygon = union_polygon.union(acquisition_polygon)
union_polygon = tile_polygon.intersection(union_polygon)
polygon_surface_relative_diff_percent = (tile_polygon.area - union_polygon.area) / tile_polygon.area*100
if polygon_surface_relative_diff_percent < 1e-1:
ifComplete = True
# plot_union_polygon(union_polygon, tile_polygon)
break
if polygon_surface_relative_diff_percent < 1e-1:
status_message = f"{tile_id}, cloud coverage: {cloud_coverage_threshold}, complete in {needed_number_of_acquisitions} acquisitions."
else:
status_message = f"{tile_id}, cloud coverage: {cloud_coverage_threshold}, incomplete in {needed_number_of_acquisitions} acquisitions."
print(status_message, counter_message, end="\r")
# if polygon_surface_relative_diff_percent > 1e-1:
# status = f"{tile_id} is incomplete, surface diff: {polygon_surface_relative_diff_percent}%. Number of acquisitions: {len(granules)}."
# if ifPlot:
acquisition_download_links_to_csv(tile_id, output_file_name, acquisitions=granules[0:needed_number_of_acquisitions], ifComplete=ifComplete)
if ifComplete:
break
# break