mirror of
https://github.com/kuhyx/testsAndMisc.git
synced 2026-07-04 19:03:08 +02:00
207 lines
5.2 KiB
Python
207 lines
5.2 KiB
Python
|
|
"""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()
|