diff options
author | Birte Kristina Friesel <derf@finalrewind.org> | 2025-08-30 16:59:20 +0200 |
---|---|---|
committer | Birte Kristina Friesel <derf@finalrewind.org> | 2025-08-30 17:00:58 +0200 |
commit | c5cbaa0f76ea5197ba6a2696af0c12fed07970e6 (patch) | |
tree | bd2bb5167b830ecb4810237865cef1e421ea7960 /lib/Travelynx | |
parent | d86fb39729754d87170ee997049003356eee7f4c (diff) |
Polyline import: Improve handling of duplicate stops on a single trip
Closes #292
Diffstat (limited to 'lib/Travelynx')
-rwxr-xr-x | lib/Travelynx/Controller/Traveling.pm | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/lib/Travelynx/Controller/Traveling.pm b/lib/Travelynx/Controller/Traveling.pm index 5110c00..0ddc9fc 100755 --- a/lib/Travelynx/Controller/Traveling.pm +++ b/lib/Travelynx/Controller/Traveling.pm @@ -2575,6 +2575,7 @@ sub edit_journey { ); } +# Taken from Travel::Status::DE::EFA::Trip#polyline sub polyline_add_stops { my ( $self, %opt ) = @_; @@ -2584,36 +2585,42 @@ sub polyline_add_stops { my $distance = GIS::Distance->new; my %min_dist; + my $route_i = 0; for my $stop ( @{$route} ) { for my $polyline_index ( 0 .. $#{$polyline} ) { my $pl = $polyline->[$polyline_index]; my $dist = $distance->distance_metal( $stop->[2]{lat}, $stop->[2]{lon}, $pl->[1], $pl->[0] ); - if ( not $min_dist{ $stop->[1] } - or $min_dist{ $stop->[1] }{dist} > $dist ) + my $key = $route_i . ';' . $stop->[1]; + if ( not $min_dist{$key} + or $min_dist{$key}{dist} > $dist ) { - $min_dist{ $stop->[1] } = { + $min_dist{$key} = { dist => $dist, index => $polyline_index, }; } } + $route_i += 1; } + $route_i = 0; for my $stop ( @{$route} ) { - if ( $min_dist{ $stop->[1] } ) { - if ( defined $polyline->[ $min_dist{ $stop->[1] }{index} ][2] ) { + my $key = $route_i . ';' . $stop->[1]; + if ( $min_dist{$key} ) { + if ( defined $polyline->[ $min_dist{$key}{index} ][2] ) { return sprintf( 'Error: Stop IDs %d and %d both map to lon %f, lat %f', - $polyline->[ $min_dist{ $stop->[1] }{index} ][2], + $polyline->[ $min_dist{$key}{index} ][2], $stop->[1], - $polyline->[ $min_dist{ $stop->[1] }{index} ][0], - $polyline->[ $min_dist{ $stop->[1] }{index} ][1] + $polyline->[ $min_dist{$key}{index} ][0], + $polyline->[ $min_dist{$key}{index} ][1] ); } - $polyline->[ $min_dist{ $stop->[1] }{index} ][2] + $polyline->[ $min_dist{$key}{index} ][2] = $stop->[1]; } + $route_i += 1; } return; } |