aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Schadt <kingdread@gmx.de>2025-12-24 12:58:26 +0100
committerDaniel Schadt <kingdread@gmx.de>2025-12-30 19:16:32 +0100
commit6527e5297d2c5ed1b6092284c0dc6f3406cc54a3 (patch)
tree543c760c6a5d7bfa73a0d67e46f47744571f3cc5
parent1829942015eca17fbcfa90328bed9a5f8d09f782 (diff)
downloadfietsboek-6527e5297d2c5ed1b6092284c0dc6f3406cc54a3.tar.gz
fietsboek-6527e5297d2c5ed1b6092284c0dc6f3406cc54a3.tar.bz2
fietsboek-6527e5297d2c5ed1b6092284c0dc6f3406cc54a3.zip
fix trackmap for empty tracks
-rw-r--r--fietsboek/trackmap.py16
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(