diff options
author | Birte Kristina Friesel <derf@finalrewind.org> | 2025-07-27 17:52:41 +0200 |
---|---|---|
committer | Birte Kristina Friesel <derf@finalrewind.org> | 2025-07-27 17:52:41 +0200 |
commit | e54ddabe7f9f649812f6366eaa234ce0f38e7441 (patch) | |
tree | bc45ee8d3140000b6c544b0cfbd405b2bc8510da /lib/Travelynx/Model | |
parent | 6cab322100f88be57872dfec8575b3ceda9f0248 (diff) |
Fix polyline view in journey detail view for ring lines
Partially resolves #268 -- in map views that are not specific to a single
journey, the polyline will still be wrong.
Diffstat (limited to 'lib/Travelynx/Model')
-rwxr-xr-x | lib/Travelynx/Model/Journeys.pm | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/lib/Travelynx/Model/Journeys.pm b/lib/Travelynx/Model/Journeys.pm index c0ba2a9..9efa365 100755 --- a/lib/Travelynx/Model/Journeys.pm +++ b/lib/Travelynx/Model/Journeys.pm @@ -1296,7 +1296,7 @@ sub get_travel_distance { # Assumption: polyline entries are always [lat, lon] or [lat, lon, stop ID] %seen = (); - for my $entry ( @{$polyline_ref} ) { + for my $entry ( @{ $polyline_ref // [] } ) { if ( $entry->[2] ) { $seen{ $entry->[2] } //= 1; $entry->[3] = $seen{ $entry->[2] }; @@ -1311,17 +1311,19 @@ sub get_travel_distance { # Just like the route, the polyline may contain the same stop more than # once. So we need to select based on the seen counter. - my @polyline = after_incl { + my $poly_start = first_index { $_->[2] and $_->[2] == $from_eva and $_->[3] == $route[0][2]{n} } @{ $polyline_ref // [] }; - @polyline = before_incl { + my $poly_end = first_index { $_->[2] and $_->[2] == $to_eva and $_->[3] == $route[-1][2]{n} } - @polyline; + @{ $polyline_ref // [] }; - # ensure that before_incl matched -- otherwise, @polyline is too long - if ( @polyline and $polyline[-1][2] == $to_eva ) { + if ( defined $poly_start and defined $poly_end ) { + $journey->{poly_dep_index} = $poly_start; + $journey->{poly_arr_index} = $poly_end; + my @polyline = @{$polyline_ref}[ $poly_start .. $poly_end ]; my $prev_station = shift @polyline; for my $station (@polyline) { $distance_polyline += $geo->distance_metal( |