Skip to content

Instantly share code, notes, and snippets.

@brwe
Created May 31, 2021 22:05

Revisions

  1. brwe created this gist May 31, 2021.
    56 changes: 56 additions & 0 deletions all_the_orbits.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,56 @@
    import requests
    from pathlib import Path
    from datetime import date, timedelta
    from requests.auth import HTTPBasicAuth
    import xml.etree.ElementTree as ET
    import os

    def save_all_orbits(date_str, platformnumber, producttype, result_path, session):

    base_url = f"https://scihub.copernicus.eu/gnss/search?q=platformname:Sentinel-1 AND platformnumber:{platformnumber} AND producttype:{producttype} AND beginposition:[{date_str}T00:00:000Z TO {date_str}T24:00:000Z]"
    start = 0
    rows = 10
    url = f'{base_url}&start={start}&rows={rows}'
    response = session.get(url, auth=HTTPBasicAuth('gnssguest', 'gnssguest'))
    root = ET.fromstring(str(response.text))
    num_results=root.findall('{http://a9.com/-/spec/opensearch/1.1/}totalResults')[0].text
    print(f"Found results for {platformnumber} {producttype} {date_str}: {num_results}")
    while start < int(num_results):
    url = f'{base_url}&start={start}&rows={rows}'
    response = session.get(url, auth=HTTPBasicAuth('gnssguest', 'gnssguest'))
    root = ET.fromstring(str(response.text))
    entries = root.findall('{http://a9.com/-/spec/opensearch/1.1/}totalResults')
    for elem in root.findall('{http://www.w3.org/2005/Atom}entry'):
    start = start +1
    title = elem.findall('{http://www.w3.org/2005/Atom}title')[0].text
    for at in elem:
    if at.tag == '{http://www.w3.org/2005/Atom}link':
    if 'rel' in at.attrib:
    continue
    href = at.attrib['href']
    local_filename = result_path/Path(producttype[4:len(producttype)])/Path(f'S1{platformnumber}')/Path(date_str[0:4])/Path(date_str[5:7])/Path(title).with_suffix('.EOF')
    local_filename.parent.mkdir(parents=True, exist_ok=True)
    with session.get(href, stream=True, auth=HTTPBasicAuth('gnssguest', 'gnssguest')) as r:
    r.raise_for_status()
    with open(local_filename, 'wb') as f:
    for chunk in r.iter_content(chunk_size=8192):
    f.write(chunk)



    home = os.environ['HOME']
    result_path = Path(f'{home}/.snap/auxdata/Orbits/Sentinel-1/')
    result_path.mkdir(parents=True, exist_ok=True)
    start_date = date(2021, 1, 1)
    end_date = date(2021, 5, 31)
    delta = timedelta(days=1)
    session = requests.session()
    while start_date <= end_date:

    date_str = start_date.strftime("%Y-%m-%d")
    save_all_orbits(date_str, "A", "AUX_RESORB", result_path, session)
    save_all_orbits(date_str, "B", "AUX_RESORB", result_path, session)
    save_all_orbits(date_str, "A", "AUX_POEORB", result_path, session)
    save_all_orbits(date_str, "B", "AUX_POEORB", result_path, session)
    start_date += delta