diff options
| -rw-r--r-- | fietsboek/models/climb.py | 4 | ||||
| -rw-r--r-- | fietsboek/osm.py | 24 | ||||
| -rw-r--r-- | fietsboek/templates/details.jinja2 | 2 |
3 files changed, 21 insertions, 9 deletions
diff --git a/fietsboek/models/climb.py b/fietsboek/models/climb.py index 8fefa82..baa7a66 100644 --- a/fietsboek/models/climb.py +++ b/fietsboek/models/climb.py @@ -59,7 +59,7 @@ class Climb(Base): path = self.track.path() return Path(path.points[self.start_index : self.end_index]) - def display_name(self) -> str: + def display_name(self) -> str | None: """Returns the display name. If the given name (by the user) is set, returns this. Otherwise, return @@ -69,7 +69,7 @@ class Climb(Base): """ if self.given_name: return self.given_name - return self.automatic_name or "" + return self.automatic_name def bounds(self) -> tuple[tuple[float, float], tuple[float, float]]: """Returns the bounds of this climb. diff --git a/fietsboek/osm.py b/fietsboek/osm.py index e75bd11..436e033 100644 --- a/fietsboek/osm.py +++ b/fietsboek/osm.py @@ -1,7 +1,6 @@ """OSM related utilities for fietsboek.""" import logging -from urllib.parse import urljoin from xml.etree import ElementTree import requests @@ -10,7 +9,7 @@ from . import __VERSION__ from .geo import Path, Point LOGGER = logging.getLogger(__name__) -API_URL = "https://api.openstreetmap.org/" +OVERPASS_API_URL = "https://maps.mail.ru/osm/tools/overpass/api/interpreter" HEADERS = { "user-agent": f"Fietsboek/{__VERSION__}", "accept-encoding": "gzip;q=1.0, identity;q=0.5", @@ -22,7 +21,7 @@ MAX_DISTANCE_CITY = 750 MAX_DISTANCE_WATER = 750 -def find_name(path: Path) -> str: +def find_name(path: Path) -> str | None: """Attempt to find a name for the given path. :param path: Path to find a name for. @@ -39,13 +38,26 @@ def find_name(path: Path) -> str: max_lat += 0.001 max_lon += 0.0015 - LOGGER.debug("bbox=%s,%s,%s,%s", min_lon, min_lat, max_lon, max_lat) + bbox = f"[bbox:{min_lat},{min_lon},{max_lat},{max_lon}];" + LOGGER.debug("Requesting %s", bbox) - urlpath = f"api/0.6/map?bbox={min_lon},{min_lat},{max_lon},{max_lat}" - with session.get(urljoin(API_URL, urlpath)) as response: + overpass_script = f""" + {bbox}\n + (node;way;); + (._;>;); + out; + """ + with session.post(OVERPASS_API_URL, data={"data": overpass_script}) as response: + if response.status_code != 200: + LOGGER.info( + "Error response from overpass: %s %s", response.status_code, response.reason + ) + return None data = response.content + LOGGER.debug("Got %s bytes of OSM-XML data, parsing...", len(data)) tree = ElementTree.fromstring(data) + LOGGER.debug("Parsing complete!") name = _name_from_street(tree, path) if name is None: diff --git a/fietsboek/templates/details.jinja2 b/fietsboek/templates/details.jinja2 index a800998..748fc6f 100644 --- a/fietsboek/templates/details.jinja2 +++ b/fietsboek/templates/details.jinja2 @@ -200,7 +200,7 @@ {% for climb in track.climbs %} <div class="climb card"> <h5 class="card-header"> - {{ climb.display_name() }} + {{ climb.display_name() | default(_("page.details.climbs.climb"), true) }} {% if climb.category is not none %} <div class="climb-category climb-category-{{ climb.category }}"> {% if climb.category == 0 %} |
