Loading lib/Travelynx.pm +32 −6 Original line number Diff line number Diff line Loading @@ -479,6 +479,22 @@ qq{select * from pending_mails where email = ? and num_tries > 1;} } ); $self->helper( 'numify_skipped_stations' => sub { my ( $self, $count ) = @_; if ( $count == 0 ) { return 'INTERNAL ERROR'; } if ( $count == 1 ) { return 'Eine Station ohne Geokoordinaten wurde nicht berücksichtigt.'; } return "${count} Stationen ohne Geookordinaten wurden nicht berücksichtigt."; } ); $self->helper( 'get_departures' => sub { my ( $self, $station, $lookbehind ) = @_; Loading Loading @@ -1407,13 +1423,17 @@ qq{select * from pending_mails where email = ? and num_tries > 1;} ? $ref->{rt_arrival}->epoch - $ref->{rt_departure}->epoch : undef; $ref->{km_route} my ( $km, $skip ) = $self->get_travel_distance( $ref->{from_name}, $ref->{to_name}, $ref->{route} ); $ref->{km_beeline} $ref->{km_route} = $km; $ref->{skip_route} = $skip; ( $km, $skip ) = $self->get_travel_distance( $ref->{from_name}, $ref->{to_name}, [ $ref->{from_name}, $ref->{to_name} ] ); $ref->{km_beeline} = $km; $ref->{skip_beeline} = $skip; my $kmh_divisor = ( $ref->{rt_duration} // $ref->{sched_duration} // 999999 ) / 3600; Loading Loading @@ -1531,6 +1551,7 @@ qq{select * from pending_mails where email = ? and num_tries > 1;} my ( $self, $from, $to, $route_ref ) = @_; my $distance = 0; my $skipped = 0; my $geo = Geo::Distance->new(); my @route = after_incl { $_ eq $from } @{$route_ref}; @route = before_incl { $_ eq $to } @route; Loading @@ -1548,14 +1569,19 @@ qq{select * from pending_mails where email = ? and num_tries > 1;} for my $station_name (@route) { if ( my $station = get_station($station_name) ) { if ( $#{$prev_station} >= 4 and $#{$station} >= 4 ) { $distance += $geo->distance( 'kilometer', $prev_station->[3], $prev_station->[4], $station->[3], $station->[4] ); } else { $skipped++; } $prev_station = $station; } } return $distance; return ( $distance, $skipped ); } ); Loading lib/Travelynx/Command/database.pm +14 −0 Original line number Diff line number Diff line Loading @@ -123,6 +123,20 @@ my @migrations = ( } ); }, # v2 -> v3 # A bug in the journey distance calculation caused excessive distances to be # reported for routes covering stations without GPS coordinates. Ensure # all caches are rebuilt. sub { my ($dbh) = @_; return $dbh->do( qq{ delete from journey_stats; update schema_version set version = 3; } ); }, ); sub setup_db { Loading templates/journey.html.ep +21 −5 Original line number Diff line number Diff line Loading @@ -89,20 +89,36 @@ <tr> <th scope="row">Entfernung</th> <td> % if ($journey->{skip_route}) { <i class="material-icons right">gps_off</i> <%= numify_skipped_stations($journey->{skip_route}) %><br/> % } % if ($journey->{km_route} > 0.1) { ca. <%= sprintf('%.f', $journey->{km_route}) %> km % } (Luftlinie: <%= sprintf('%.f', $journey->{km_beeline}) %> km) % } % else { ? % } </td> </tr> <tr> <th scope="row">Geschwindigkeit</th> <td> % if ($journey->{skip_route}) { <i class="material-icons right">gps_off</i> <%= numify_skipped_stations($journey->{skip_route}) %><br/> % } % if ($journey->{km_route} > 0.1 and $journey->{kmh_route} > 0.01) { ∅ <%= sprintf('%.f', $journey->{kmh_route}) %> km/h (<%= sprintf('%.f', $journey->{kmh_beeline}) %> km/h) % if ($journey->{edited} & 0x0303) { ∗ % } % } % else { ? % } </td> </tr> <tr> Loading Loading
lib/Travelynx.pm +32 −6 Original line number Diff line number Diff line Loading @@ -479,6 +479,22 @@ qq{select * from pending_mails where email = ? and num_tries > 1;} } ); $self->helper( 'numify_skipped_stations' => sub { my ( $self, $count ) = @_; if ( $count == 0 ) { return 'INTERNAL ERROR'; } if ( $count == 1 ) { return 'Eine Station ohne Geokoordinaten wurde nicht berücksichtigt.'; } return "${count} Stationen ohne Geookordinaten wurden nicht berücksichtigt."; } ); $self->helper( 'get_departures' => sub { my ( $self, $station, $lookbehind ) = @_; Loading Loading @@ -1407,13 +1423,17 @@ qq{select * from pending_mails where email = ? and num_tries > 1;} ? $ref->{rt_arrival}->epoch - $ref->{rt_departure}->epoch : undef; $ref->{km_route} my ( $km, $skip ) = $self->get_travel_distance( $ref->{from_name}, $ref->{to_name}, $ref->{route} ); $ref->{km_beeline} $ref->{km_route} = $km; $ref->{skip_route} = $skip; ( $km, $skip ) = $self->get_travel_distance( $ref->{from_name}, $ref->{to_name}, [ $ref->{from_name}, $ref->{to_name} ] ); $ref->{km_beeline} = $km; $ref->{skip_beeline} = $skip; my $kmh_divisor = ( $ref->{rt_duration} // $ref->{sched_duration} // 999999 ) / 3600; Loading Loading @@ -1531,6 +1551,7 @@ qq{select * from pending_mails where email = ? and num_tries > 1;} my ( $self, $from, $to, $route_ref ) = @_; my $distance = 0; my $skipped = 0; my $geo = Geo::Distance->new(); my @route = after_incl { $_ eq $from } @{$route_ref}; @route = before_incl { $_ eq $to } @route; Loading @@ -1548,14 +1569,19 @@ qq{select * from pending_mails where email = ? and num_tries > 1;} for my $station_name (@route) { if ( my $station = get_station($station_name) ) { if ( $#{$prev_station} >= 4 and $#{$station} >= 4 ) { $distance += $geo->distance( 'kilometer', $prev_station->[3], $prev_station->[4], $station->[3], $station->[4] ); } else { $skipped++; } $prev_station = $station; } } return $distance; return ( $distance, $skipped ); } ); Loading
lib/Travelynx/Command/database.pm +14 −0 Original line number Diff line number Diff line Loading @@ -123,6 +123,20 @@ my @migrations = ( } ); }, # v2 -> v3 # A bug in the journey distance calculation caused excessive distances to be # reported for routes covering stations without GPS coordinates. Ensure # all caches are rebuilt. sub { my ($dbh) = @_; return $dbh->do( qq{ delete from journey_stats; update schema_version set version = 3; } ); }, ); sub setup_db { Loading
templates/journey.html.ep +21 −5 Original line number Diff line number Diff line Loading @@ -89,20 +89,36 @@ <tr> <th scope="row">Entfernung</th> <td> % if ($journey->{skip_route}) { <i class="material-icons right">gps_off</i> <%= numify_skipped_stations($journey->{skip_route}) %><br/> % } % if ($journey->{km_route} > 0.1) { ca. <%= sprintf('%.f', $journey->{km_route}) %> km % } (Luftlinie: <%= sprintf('%.f', $journey->{km_beeline}) %> km) % } % else { ? % } </td> </tr> <tr> <th scope="row">Geschwindigkeit</th> <td> % if ($journey->{skip_route}) { <i class="material-icons right">gps_off</i> <%= numify_skipped_stations($journey->{skip_route}) %><br/> % } % if ($journey->{km_route} > 0.1 and $journey->{kmh_route} > 0.01) { ∅ <%= sprintf('%.f', $journey->{kmh_route}) %> km/h (<%= sprintf('%.f', $journey->{kmh_beeline}) %> km/h) % if ($journey->{edited} & 0x0303) { ∗ % } % } % else { ? % } </td> </tr> <tr> Loading