Spaces:
Running
Running
| # Copyright (c) Meta Platforms, Inc. and affiliates. | |
| import json | |
| from http.client import responses | |
| from pathlib import Path | |
| from typing import Any, Dict, Optional | |
| import urllib3 | |
| from .. import logger | |
| from ..utils.geo import BoundaryBox | |
| OSM_URL = "https://api.openstreetmap.org/api/0.6/map.json" | |
| def get_osm( | |
| boundary_box: BoundaryBox, | |
| cache_path: Optional[Path] = None, | |
| overwrite: bool = False, | |
| ) -> Dict[str, Any]: | |
| if not overwrite and cache_path is not None and cache_path.is_file(): | |
| return json.loads(cache_path.read_text()) | |
| (bottom, left), (top, right) = boundary_box.min_, boundary_box.max_ | |
| query = {"bbox": f"{left},{bottom},{right},{top}"} | |
| logger.info("Calling the OpenStreetMap API...") | |
| result = urllib3.request("GET", OSM_URL, fields=query, timeout=10) | |
| if result.status != 200: | |
| error = result.info()["error"] | |
| raise ValueError(f"{result.status} {responses[result.status]}: {error}") | |
| if cache_path is not None: | |
| cache_path.write_bytes(result.data) | |
| return result.json() | |