Skip to content
Extraits de code Groupes Projets
Valider 2116da7c rédigé par hieda_kyuko@hpr's avatar hieda_kyuko@hpr
Parcourir les fichiers

Create metadata frame

parent 94b516c7
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -39,52 +39,6 @@ sub get_destination ...@@ -39,52 +39,6 @@ sub get_destination
->{'ekimei'}; ->{'ekimei'};
} }
sub get_patterns_at_sta
{
my ($master, $rosen_id, $eki) = @_;
my $rosen = MasterUtils::get_rosen_frame $master, $rosen_id;
my $pos_down = MasterUtils::get_eki_position $master, $rosen_id, $eki;
my $pos_up = $rosen->{'eki_num'} - $pos_down - 1;
my @services_down = @{ $rosen->{'dia'}->{'kudari'} };
my @services_up = @{ $rosen->{'dia'}->{'nobori'} };
my %stopping_patterns;
foreach my $ressya (@services_down)
{
my @jikoku = @{ $ressya->{'jikoku'} };
my $pos = 0;
while ($pos != $pos_down) { shift @jikoku; $pos++; }
if (!defined $jikoku[0]) { next; }
my $ts = $jikoku[0];
my $time = $ts->{'hatsu'};
# Timestamp has no dep time (only arrival time for ex)
if (!defined $time) { next; }
# This service does not stop here
if ($ts->{'mode'} != 1) { next; }
$stopping_patterns{$ressya->{'syubetsu'}}++;
}
foreach my $ressya (@services_up)
{
my @jikoku = @{ $ressya->{'jikoku'} };
my $pos = 0;
while ($pos != $pos_up) { shift @jikoku; $pos++; }
if (!defined $jikoku[0]) { next; }
my $ts = $jikoku[0];
my $time = $ts->{'hatsu'};
# Timestamp has no dep time (only arrival time for ex)
if (!defined $time) { next; }
# This service does not stop here
if ($ts->{'mode'} != 1) { next; }
$stopping_patterns{$ressya->{'syubetsu'}}++;
}
return scalar keys %stopping_patterns;
}
sub hassya_hyou sub hassya_hyou
{ {
my $master = $_[0]; my $master = $_[0];
......
...@@ -141,4 +141,71 @@ sub get_routes ...@@ -141,4 +141,71 @@ sub get_routes
@res ? return @res : Log::e "$id has no routes"; @res ? return @res : Log::e "$id has no routes";
} }
sub get_patterns_at_sta
{
my ($master, $rosen_id, $eki) = @_;
my $rosen = get_rosen_frame $master, $rosen_id;
my $pos_down = get_eki_position $master, $rosen_id, $eki;
my $pos_up = $rosen->{'eki_num'} - $pos_down - 1;
my @services_down = @{ $rosen->{'dia'}->{'kudari'} };
my @services_up = @{ $rosen->{'dia'}->{'nobori'} };
my %stopping_patterns;
foreach my $ressya (@services_down)
{
my @jikoku = @{ $ressya->{'jikoku'} };
my $pos = 0;
while ($pos != $pos_down) { shift @jikoku; $pos++; }
if (!defined $jikoku[0]) { next; }
my $ts = $jikoku[0];
my $time = $ts->{'hatsu'};
# Timestamp has no dep time (only arrival time for ex)
if (!defined $time) { next; }
# This service does not stop here
if ($ts->{'mode'} != 1) { next; }
$stopping_patterns{$ressya->{'syubetsu'}}++;
}
foreach my $ressya (@services_up)
{
my @jikoku = @{ $ressya->{'jikoku'} };
my $pos = 0;
while ($pos != $pos_up) { shift @jikoku; $pos++; }
if (!defined $jikoku[0]) { next; }
my $ts = $jikoku[0];
my $time = $ts->{'hatsu'};
# Timestamp has no dep time (only arrival time for ex)
if (!defined $time) { next; }
# This service does not stop here
if ($ts->{'mode'} != 1) { next; }
$stopping_patterns{$ressya->{'syubetsu'}}++;
}
return scalar keys %stopping_patterns;
}
sub build_metadata
{
my ($master) = @_;
my $metadata = {};
foreach my $rosen (keys %{ $master->{'rosen'} })
{
my $frame = {};
# Add number of stopping patterns for each station / route
my $patterns = {};
foreach my $eki (@{ $master->{'rosen'}->{$rosen}->{'eki'} })
{
$patterns->{$eki} = get_patterns_at_sta $master, $rosen, $eki;
}
$frame->{'stopping_patterns'} = $patterns;
$metadata->{$rosen} = $frame;
}
$master->{'metadata'} = $metadata;
}
1; 1;
...@@ -194,7 +194,7 @@ sub Raptor_simple ...@@ -194,7 +194,7 @@ sub Raptor_simple
# This will most likely save a lot of time on routes with a great amount of stops / services (e.g. high-frequency lines) # This will most likely save a lot of time on routes with a great amount of stops / services (e.g. high-frequency lines)
my $all_patterns = MasterUtils::get_patterns $master, $r; my $all_patterns = MasterUtils::get_patterns $master, $r;
# TODO maybe move these computations to a "metadata" frame # TODO maybe move these computations to a "metadata" frame
my $stopping_patterns = FrameUtils::get_patterns_at_sta $master, $r, $pi; my $stopping_patterns = $master->{'metadata'}->{$r}->{$pi};
if ($stopping_patterns < 2 && $all_patterns >= 3) if ($stopping_patterns < 2 && $all_patterns >= 3)
{ {
$mark = 0; $mark = 0;
......
...@@ -416,6 +416,8 @@ foreach my $frame (values %{ $master{'rosen'} }) ...@@ -416,6 +416,8 @@ foreach my $frame (values %{ $master{'rosen'} })
$frame->{'eki'} = \@new_ekis; $frame->{'eki'} = \@new_ekis;
} }
MasterUtils::build_metadata \%master;
# Parse transfer times # Parse transfer times
my $recce = Marpa::R2::Scanless::R->new( my $recce = Marpa::R2::Scanless::R->new(
{ {
...@@ -449,11 +451,11 @@ $master{'transfer_times'} = $transfers; ...@@ -449,11 +451,11 @@ $master{'transfer_times'} = $transfers;
# FrameUtils::hassya_hyou \%master, 'sekihoku1_28'; # FrameUtils::hassya_hyou \%master, 'sekihoku1_28';
my $d = MasterUtils::search_eki \%master, '石北大通'; my $d = MasterUtils::search_eki \%master, '帯広';
my $a = MasterUtils::search_eki \%master, '一区下'; my $a = MasterUtils::search_eki \%master, '釧路';
sub eki { return MasterUtils::search_eki \%master, $_[0]; } sub eki { return MasterUtils::search_eki \%master, $_[0]; }
Navi::Raptor_simple \%master, $d, $a, 1120; Navi::Raptor_simple \%master, $d, $a, 525;
# FrameUtils::hassya_hyou \%master, (eki '古瀬'); # FrameUtils::hassya_hyou \%master, (eki '古瀬');
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter