diff --git a/scripts/download_satellite.py b/scripts/download_satellite.py index d0f083c..518dea6 100755 --- a/scripts/download_satellite.py +++ b/scripts/download_satellite.py @@ -6,29 +6,36 @@ import os import urllib.request from PIL import Image +from concurrent.futures import ThreadPoolExecutor MAX_ZOOM=20 -current, total = 0, (4 ** (MAX_ZOOM - 11) - 1)//3 +def download_all(): + current, total = 0, (4 ** (MAX_ZOOM - 11) - 1)//3 + with ThreadPoolExecutor() as executor: + for z in range(12, MAX_ZOOM + 1): + scale = 2 ** (z - 12) + start_x = 985 * scale + start_y = 1432 * scale + for x in range(start_x, start_x + scale): + for y in range(start_y, start_y + scale): + executor.submit(download_image, z, x, y, total, current) + current += 1 -for z in range(12, MAX_ZOOM+1): - scale = 2 ** (z - 12) - start_x = 985 * scale - start_y = 1432 * scale - for x in range(start_x, start_x + scale): - for y in range(start_y, start_y + scale): - current += 1 - progress = f"[{current:0{len(str(total))}d}/{total}]" - url = f"https://svc.pictometry.com/Image/D2B06344-7A2D-5BD0-FC89-DFDDC9888C41/wmts/PICT-MNITAS23-EDVs7UTOVt/default/GoogleMapsCompatible/{z}/{x}/{y}.png" - file = os.path.normpath(os.path.join(os.path.dirname(__file__), f"../satellite/{z}/{x}/{y}.png")) - os.makedirs(os.path.dirname(file), exist_ok=True) - if os.path.isfile(file): - try: # does it already exist and look good? - Image.open(file).verify() # CRC check on PNGs; nothing on other file types? https://pillow.readthedocs.io/en/latest/_modules/PIL/PngImagePlugin.html#ChunkStream.verify - print(f"{progress} {file} already exists; skipping") - continue - except OSError as e: - print(f"{progress} replacing corrupt {file}") - else: - print(f"{progress} downloading {file}") - urllib.request.urlretrieve(url, file) +def download_image(z, x, y, total, current): + progress = f"[{current:0{len(str(total))}d}/{total}]" + url = f"https://svc.pictometry.com/Image/D2B06344-7A2D-5BD0-FC89-DFDDC9888C41/wmts/PICT-MNITAS23-EDVs7UTOVt/default/GoogleMapsCompatible/{z}/{x}/{y}.png" + file = os.path.normpath(os.path.join(os.path.dirname(__file__), f"../satellite/{z}/{x}/{y}.png")) + os.makedirs(os.path.dirname(file), exist_ok=True) + if os.path.isfile(file): + try: # does it already exist and look good? + Image.open(file).verify() # CRC check on PNGs; nothing on other file types? https://pillow.readthedocs.io/en/latest/_modules/PIL/PngImagePlugin.html#ChunkStream.verify + print(f"{progress} {file} already exists; skipping") + return + except OSError as e: + print(f"{progress} replacing corrupt {file}") + else: + print(f"{progress} downloading {file}") + urllib.request.urlretrieve(url, file) + +download_all()