testsAndMisc/python_pkg/geo_data/__init__.py

207 lines
5.2 KiB
Python
Raw Permalink Normal View History

"""Shared geographic data module for Warsaw and Poland Anki generators.
This module handles downloading and caching geographic data from various sources:
- OpenStreetMap via Overpass API
- Geofabrik OSM extracts
- GitHub repositories with pre-processed GeoJSON
All data is cached locally to avoid repeated downloads.
"""
from __future__ import annotations
import shutil
import sys
from python_pkg.geo_data._common import (
CACHE_DIR,
MAX_RETRIES,
MIN_LAKE_AREA_KM2,
MIN_LINE_COORDS,
MIN_PEAK_ELEVATION,
MIN_RING_COORDS,
MIN_RIVER_LENGTH_KM,
OVERPASS_ENDPOINTS,
POLSKA_GEOJSON_BASE,
REQUEST_TIMEOUT,
RETRY_DELAY,
WIKIDATA_SPARQL,
)
from python_pkg.geo_data._poland_admin import (
get_poland_boundary,
get_polish_gminy,
get_polish_powiaty,
get_polish_wojewodztwa,
)
from python_pkg.geo_data._poland_nature import (
get_polish_forests,
get_polish_landscape_parks,
get_polish_mountain_peaks,
get_polish_mountain_ranges,
get_polish_national_parks,
get_polish_nature_reserves,
)
from python_pkg.geo_data._poland_water import (
get_polish_coastal_features,
get_polish_islands,
get_polish_lakes,
get_polish_rivers,
get_polish_unesco_sites,
)
from python_pkg.geo_data._warsaw import (
get_vistula_river,
get_warsaw_boundary,
get_warsaw_bridges,
get_warsaw_districts,
get_warsaw_metro_stations,
get_warsaw_osiedla,
)
from python_pkg.geo_data._warsaw_places import get_warsaw_landmarks, get_warsaw_streets
__all__ = [
"CACHE_DIR",
"MAX_RETRIES",
"MIN_LAKE_AREA_KM2",
"MIN_LINE_COORDS",
"MIN_PEAK_ELEVATION",
"MIN_RING_COORDS",
"MIN_RIVER_LENGTH_KM",
"OVERPASS_ENDPOINTS",
"POLSKA_GEOJSON_BASE",
"REQUEST_TIMEOUT",
"RETRY_DELAY",
"WIKIDATA_SPARQL",
"clear_cache",
"download_all_poland_data",
"download_all_warsaw_data",
"get_poland_boundary",
"get_polish_coastal_features",
"get_polish_forests",
"get_polish_gminy",
"get_polish_islands",
"get_polish_lakes",
"get_polish_landscape_parks",
"get_polish_mountain_peaks",
"get_polish_mountain_ranges",
"get_polish_national_parks",
"get_polish_nature_reserves",
"get_polish_powiaty",
"get_polish_rivers",
"get_polish_unesco_sites",
"get_polish_wojewodztwa",
"get_vistula_river",
"get_warsaw_boundary",
"get_warsaw_bridges",
"get_warsaw_districts",
"get_warsaw_landmarks",
"get_warsaw_metro_stations",
"get_warsaw_osiedla",
"get_warsaw_streets",
]
def download_all_warsaw_data() -> None:
"""Download and cache all Warsaw geographic data.
Call this once to pre-populate the cache.
"""
sys.stdout.write("Downloading all Warsaw geographic data...\n")
sys.stdout.write("=" * 60 + "\n")
sys.stdout.write("\n1. Warsaw boundary...\n")
get_warsaw_boundary()
sys.stdout.write("\n2. Vistula river...\n")
get_vistula_river()
sys.stdout.write("\n3. Warsaw bridges...\n")
get_warsaw_bridges()
sys.stdout.write("\n4. Metro stations...\n")
get_warsaw_metro_stations()
sys.stdout.write("\n5. Major streets...\n")
get_warsaw_streets()
sys.stdout.write("\n6. Landmarks...\n")
get_warsaw_landmarks()
sys.stdout.write("\n7. Osiedla...\n")
get_warsaw_osiedla()
sys.stdout.write("\n" + "=" * 60 + "\n")
sys.stdout.write("All Warsaw data cached successfully!\n")
def download_all_poland_data() -> None:
"""Download and cache all Poland geographic data.
Call this once to pre-populate the cache.
"""
sys.stdout.write("Downloading all Poland geographic data...\n")
sys.stdout.write("=" * 60 + "\n")
sys.stdout.write("\n1. Województwa...\n")
get_polish_wojewodztwa()
sys.stdout.write("\n2. Powiaty...\n")
get_polish_powiaty()
sys.stdout.write("\n3. Gminy (this may take a while)...\n")
get_polish_gminy()
sys.stdout.write("\n4. Poland boundary...\n")
get_poland_boundary()
sys.stdout.write("\n" + "=" * 60 + "\n")
sys.stdout.write("All Poland data cached successfully!\n")
def clear_cache() -> None:
"""Clear all cached data."""
if CACHE_DIR.exists():
shutil.rmtree(CACHE_DIR)
sys.stdout.write("Cache cleared.\n")
else:
sys.stdout.write("Cache directory does not exist.\n")
if __name__ == "__main__":
import argparse
parser = argparse.ArgumentParser(description="Manage geographic data cache")
parser.add_argument(
"--download-warsaw",
action="store_true",
help="Download all Warsaw data",
)
parser.add_argument(
"--download-poland",
action="store_true",
help="Download all Poland data",
)
parser.add_argument(
"--download-all",
action="store_true",
help="Download all data",
)
parser.add_argument(
"--clear-cache",
action="store_true",
help="Clear cached data",
)
args = parser.parse_args()
if args.clear_cache:
clear_cache()
elif args.download_warsaw:
download_all_warsaw_data()
elif args.download_poland:
download_all_poland_data()
elif args.download_all:
download_all_warsaw_data()
download_all_poland_data()
else:
parser.print_help()