diff --git a/backend/server/adventures/serializers.py b/backend/server/adventures/serializers.py index b31faacbe..64e50d293 100644 --- a/backend/server/adventures/serializers.py +++ b/backend/server/adventures/serializers.py @@ -806,7 +806,7 @@ def _parse_gpx_distance_km(self, gpx_file_field): total_meters += segment_length for route in gpx.routes: - route_length = route.length_3d() or route.length_2d() + route_length = route.length() if route_length: total_meters += route_length diff --git a/backend/server/adventures/utils/geojson.py b/backend/server/adventures/utils/geojson.py index 07e12178b..ac3ac303e 100644 --- a/backend/server/adventures/utils/geojson.py +++ b/backend/server/adventures/utils/geojson.py @@ -6,14 +6,25 @@ def _gpx_to_feature_collection(gpx): features = [] - for track in gpx.tracks: - track_name = track.name or 'GPX Track' - for segment in track.segments: - coords = [(point.longitude, point.latitude) for point in segment.points] + if gpx.tracks: + for track in gpx.tracks: + track_name = track.name or 'GPX Track' + for segment in track.segments: + coords = [(point.longitude, point.latitude) for point in segment.points] + if coords: + feature = geojson.Feature( + geometry=geojson.LineString(coords), + properties={'name': track_name} + ) + features.append(feature) + elif gpx.routes: + for route in gpx.routes: + route_name = route.name or 'GPX Route' + coords = [(point.longitude, point.latitude) for point in route.points] if coords: feature = geojson.Feature( geometry=geojson.LineString(coords), - properties={'name': track_name}, + properties={'name': route_name} ) features.append(feature)