diff options
| author | Daniel Schadt <kingdread@gmx.de> | 2025-12-24 12:58:26 +0100 |
|---|---|---|
| committer | Daniel Schadt <kingdread@gmx.de> | 2025-12-30 19:16:32 +0100 |
| commit | 6527e5297d2c5ed1b6092284c0dc6f3406cc54a3 (patch) | |
| tree | 543c760c6a5d7bfa73a0d67e46f47744571f3cc5 | |
| parent | 1829942015eca17fbcfa90328bed9a5f8d09f782 (diff) | |
| download | fietsboek-6527e5297d2c5ed1b6092284c0dc6f3406cc54a3.tar.gz fietsboek-6527e5297d2c5ed1b6092284c0dc6f3406cc54a3.tar.bz2 fietsboek-6527e5297d2c5ed1b6092284c0dc6f3406cc54a3.zip | |
fix trackmap for empty tracks
| -rw-r--r-- | fietsboek/trackmap.py | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/fietsboek/trackmap.py b/fietsboek/trackmap.py index 994b3dd..4cb13aa 100644 --- a/fietsboek/trackmap.py +++ b/fietsboek/trackmap.py @@ -11,6 +11,12 @@ from .views.tileproxy import TileRequester TILE_SIZE = 256 +# This is arbitrarily set to provide some image in case a render is requested +# for a track without points. I've arbitrarily chosen Berlin as the represented +# area. +DEFAULT_ZOOM = 9 +DEFAULT_BBOX = (70062, 70611, 42824, 43179) + def to_web_mercator(lat: float, lon: float, zoom: int) -> tuple[int, int]: """Convert a pari of latitude/longitude coordinates to web mercator form. @@ -69,6 +75,9 @@ class TrackMapRenderer: return image def _find_zoom(self) -> tuple[int, tuple[int, int, int, int]]: + if not self.track.points: + return DEFAULT_ZOOM, DEFAULT_BBOX + for zoom in range(self.maxzoom or 19, 0, -1): min_x, max_x = 2**zoom * TILE_SIZE, 0 min_y, max_y = 2**zoom * TILE_SIZE, 0 @@ -85,7 +94,7 @@ class TrackMapRenderer: else: return zoom, (min_x, max_x, min_y, max_y) - return 1, (0, 512, 0, 512) + return DEFAULT_ZOOM, DEFAULT_BBOX def _draw_base(self, image, zoom, bbox): min_x, max_x, min_y, max_y = bbox @@ -115,8 +124,9 @@ class TrackMapRenderer: ) coords = [(x - start_x, y - start_y) for x, y in coords] - draw = ImageDraw.Draw(image) - draw.line(coords, fill=self.color, width=self.line_width, joint="curve") + if coords: + draw = ImageDraw.Draw(image) + draw.line(coords, fill=self.color, width=self.line_width, joint="curve") def render( |
