diff options
| -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( |
