From 9be283944a72019ee0d151011c049fc21ca7e718 Mon Sep 17 00:00:00 2001 From: Daniel Schadt Date: Sun, 19 Oct 2025 22:28:20 +0200 Subject: have trackmap's be rendered on geo.Path --- fietsboek/actions.py | 2 +- fietsboek/trackmap.py | 12 ++++++------ fietsboek/views/detail.py | 3 +-- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/fietsboek/actions.py b/fietsboek/actions.py index 9c1142b..0e2284b 100644 --- a/fietsboek/actions.py +++ b/fietsboek/actions.py @@ -109,7 +109,7 @@ def add_track( dbsession.add(track.cache) LOGGER.debug("Building preview image for %s", track.id) - preview_image = trackmap.render(gpx, layer, tile_requester) + preview_image = trackmap.render(track.path(), layer, tile_requester) image_io = io.BytesIO() preview_image.save(image_io, "PNG") manager.set_preview(image_io.getvalue()) diff --git a/fietsboek/trackmap.py b/fietsboek/trackmap.py index 584bf72..a850051 100644 --- a/fietsboek/trackmap.py +++ b/fietsboek/trackmap.py @@ -3,9 +3,9 @@ import io import math -from gpxpy.gpx import GPX from PIL import Image, ImageDraw +from . import geo from .config import TileLayerConfig from .views.tileproxy import TileRequester @@ -44,7 +44,7 @@ class TrackMapRenderer: def __init__( self, - track: GPX, + track: geo.Path, requester: TileRequester, size: tuple[int, int], layer: TileLayerConfig, @@ -73,7 +73,7 @@ class TrackMapRenderer: min_x, max_x = 2**zoom * TILE_SIZE, 0 min_y, max_y = 2**zoom * TILE_SIZE, 0 - for point in self.track.walk(only_points=True): + for point in self.track.points: x, y = to_web_mercator(point.latitude, point.longitude, zoom) min_x = min(min_x, x) max_x = max(max_x, x) @@ -112,7 +112,7 @@ class TrackMapRenderer: def _draw_lines(self, image, zoom, start_x, start_y): coords = ( to_web_mercator(point.latitude, point.longitude, zoom) - for point in self.track.walk(only_points=True) + for point in self.track.points ) coords = [(x - start_x, y - start_y) for x, y in coords] @@ -120,10 +120,10 @@ class TrackMapRenderer: draw.line(coords, fill=self.color, width=self.line_width, joint="curve") -def render(track: GPX, layer: TileLayerConfig, requester: TileRequester) -> Image.Image: +def render(track: geo.Path, layer: TileLayerConfig, requester: TileRequester) -> Image.Image: """Shorthand to construct a :class:`TrackMapRenderer` and render the preview. - :param track: Parsed track to render. + :param track: Track to render. :param layer: The tile layer to take the map tiles from. :param requester: The requester which will be used to request the tiles. :return: The image containing the rendered preview. diff --git a/fietsboek/views/detail.py b/fietsboek/views/detail.py index e0ac87a..2f2d887 100644 --- a/fietsboek/views/detail.py +++ b/fietsboek/views/detail.py @@ -274,8 +274,7 @@ def track_map(request: Request): loader: ITileRequester = request.registry.getUtility(ITileRequester) layer = request.config.public_tile_layers()[0] - parsed_gpx = gpxpy.parse(manager.decompress_gpx()) - track_image = trackmap.render(parsed_gpx, layer, loader) + track_image = trackmap.render(track.path(), layer, loader) imageio = io.BytesIO() track_image.save(imageio, "png") -- cgit v1.2.3