Skip to content
Snippets Groups Projects
Select Git revision
  • 2160154bf6905a2776953ff582078ae68775380d
  • 2023 default protected
2 results

eb_hooks.py

Blame
  • 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