File size: 1,569 Bytes
a6ec964 69fd2b9 a6ec964 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | import os
import requests
def download_hotosm_data(iso3: str, feature_type: str = "populated_places", geometry: str = "points", save_dir: str = "./downloads"):
"""
Download HOTOSM data (e.g., populated_places, roads, etc.) as SHP zip.
Args:
iso3 (str): ISO3 country code (e.g., 'SSD').
feature_type (str): HOTOSM feature type (e.g., 'populated_places', 'roads').
geometry (str): Geometry type ('points', 'lines', 'polygons').
save_dir (str): Directory to save the downloaded file.
Returns:
str or None: Path to saved file, or None if failed.
"""
iso3_upper = iso3.upper()
iso3_lower = iso3.lower()
# Build filename
filename = f"hotosm_{iso3_lower}_{feature_type}_{geometry}_shp.zip"
url = f"https://s3.dualstack.us-east-1.amazonaws.com/production-raw-data-api/ISO3/{iso3_upper}/{feature_type}/{geometry}/{filename}"
local_filename = os.path.join(save_dir, filename)
try:
response = requests.get(url, stream=True)
if response.status_code != 200:
print(f"[{iso3_upper}] Failed to download HOTOSM {feature_type}/{geometry}. HTTP {response.status_code}")
return None
os.makedirs(save_dir, exist_ok=True)
with open(local_filename, 'wb') as f:
for chunk in response.iter_content(chunk_size=8192):
f.write(chunk)
print(f"[{iso3_upper}] Downloaded: {local_filename}")
return local_filename
except Exception as e:
print(f"[{iso3_upper}] Error: {e}")
return None
|