summaryrefslogtreecommitdiff
path: root/lib/Travelynx
diff options
context:
space:
mode:
authorBirte Kristina Friesel <derf@finalrewind.org>2025-08-30 16:59:20 +0200
committerBirte Kristina Friesel <derf@finalrewind.org>2025-08-30 17:00:58 +0200
commitc5cbaa0f76ea5197ba6a2696af0c12fed07970e6 (patch)
treebd2bb5167b830ecb4810237865cef1e421ea7960 /lib/Travelynx
parentd86fb39729754d87170ee997049003356eee7f4c (diff)
Polyline import: Improve handling of duplicate stops on a single trip
Closes #292
Diffstat (limited to 'lib/Travelynx')
-rwxr-xr-xlib/Travelynx/Controller/Traveling.pm25
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;
}