Source code for s2d2.download_S2_L1C_sample

import os
import random
import shutil
import zipfile

from urllib.request import urlretrieve

[docs] ZEONDO_URL = 'https://zenodo.org/records/5221412/files/'
[docs] SAMPLES = ['beijing.zip', 'berlin.zip', 'bogota.zip', 'cairo.zip', 'dakar.zip', 'dhaka.zip', 'jakarta.zip', 'johannesburg.zip', 'la_paz.zip', 'las_vegas.zip', 'mexico_city.zip', 'moscow.zip', 'nairobi.zip', 'new_delhi.zip', 'new_york.zip', 'ottawa.zip', 'sao_paulo.zip', 'stockholm.zip', 'sydney.zip', 'tokyo.zip']
[docs] def get_random_sample_file() -> str: """ provide a random zip-file name of the collection Returns ------- str for example "beijing.zip" """ rand_int = random.randint(0, len(SAMPLES)-1) return SAMPLES[rand_int]
[docs] def _make_full_zenodo_url(region_name: str) -> str: assert isinstance(region_name, str), 'please provide a string' region_name = region_name.lower().strip() if not region_name.endswith('.zip'): region_name += '.zip' assert region_name in SAMPLES, print(f'{region_name} is not present') return ZEONDO_URL + region_name
[docs] def download_S2_L1C_scene(region_name: str, out_dir: str = None) -> str: if out_dir is None: out_dir = os.getcwd() full_url = _make_full_zenodo_url(region_name) file_name = os.path.basename(full_url) file_path = os.path.join(out_dir, file_name) # download data print('INFO: start downloading data') urlretrieve(full_url, file_path) print('INFO: downloading done') return file_path
[docs] def unpack_S2_L1C_scene(zip_path: str, delete_zip: bool = True) -> str: region_name = os.path.splitext(os.path.basename(zip_path))[0] print(f'INFO: unpacking data from: {region_name}') dat_dir = os.path.dirname(zip_path) with zipfile.ZipFile(zip_path, mode="r") as archive: for member in archive.namelist(): rel_path = os.path.join(*(member.split(os.path.sep)[1:])) file_name = os.path.basename(member) if not file_name: continue source = archive.open(member) new_path = os.path.join(dat_dir, rel_path) new_dir = os.path.dirname(new_path) os.makedirs(new_dir, exist_ok = True) os.chdir(new_dir) target = open(new_path, "wb") with source, target: shutil.copyfileobj(source, target) s2_dir = os.path.join(dat_dir, rel_path.split(os.path.sep)[0]) # delete zip-file if delete_zip: print('INFO: deleting zip-file') os.remove(zip_path) return s2_dir
[docs] def main() -> None: region_name = get_random_sample_file() dat_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) dat_dir = os.path.join(dat_dir, 'data') os.makedirs(dat_dir, exist_ok=True) zip_path = download_S2_L1C_scene(region_name, out_dir=dat_dir) s2_dir = unpack_S2_L1C_scene(zip_path) print(f"INFO: data is situated in this folder: {s2_dir}") return
if __name__ == '__main__': main()