The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Map::Tube::Bucharest - Interface to the Bucharest Metro Map.

SYNOPSIS

 use Map::Tube::Bucharest;

 my $obj = Map::Tube::Bucharest->new;
 my $routes_ar = $obj->get_all_routes($from, $to);
 my $line = $obj->get_line_by_id($line_id);
 my $line = $obj->get_line_by_name($line_name);
 my $lines_ar = $obj->get_lines;
 my $station = $obj->get_node_by_id($station_id);
 my $station = $obj->get_node_by_name($station_name);
 my $route = $obj->get_shortest_route($from, $to);
 my $stations_ar = $obj->get_stations($line);
 my $metro_name = $obj->name;
 my $xml_file = $obj->xml;

DESCRIPTION

It currently provides functionality to find the shortest route between the two given nodes.

For more information about Bucharest Map, click here.

METHODS

new

Constructor.

Returns instance of object.

get_all_routes [EXPERIMENTAL]

Get all routes from station to station.

Returns reference to array with Map::Tube::Route objects.

get_line_by_id

Get line object defined by id.

Returns Map::Tube::Line object.

get_line_by_name

Get line object defined by name.

Returns Map::Tube::Line object.

get_lines

Get lines in metro map.

Returns reference to unsorted array with Map::Tube::Line objects.

get_node_by_id

Get station node by id.

Returns Map::Tube::Node object.

get_node_by_name

Get station node by name.

Returns Map::Tube::Node object.

get_shortest_route

Get shortest route between $from and $to node names. Node names in $from and $to are case insensitive.

Returns Map::Tube::Route object.

get_stations

Get list of stations for concrete metro line.

Returns reference to array with Map::Tube::Node objects.

name

Get metro name.

Returns string with metro name.

xml

Get XML specification of Bucharest metro.

Returns string with XML.

EXAMPLE1

 use strict;
 use warnings;

 use Encode qw(decode_utf8 encode_utf8);
 use Map::Tube::Bucharest;

 # Object.
 my $obj = Map::Tube::Bucharest->new;

 # Get route.
 my $route = $obj->get_shortest_route(decode_utf8('Iancului'), decode_utf8('Aviatorilor'));

 # Print out type.
 print "Route: ".encode_utf8($route)."\n";

 # Output:
 # Route: Iancului (Linia M1), Obor (Linia M1), Ștefan cel Mare (Linia M1), Piața Victoriei (Linia M1,Linia M2), Aviatorilor (Linia M2)

EXAMPLE2

 use strict;
 use utf8;
 use warnings;

 use Map::Tube::Bucharest;

 # Object.
 my $obj = Map::Tube::Bucharest->new;

 # Get XML file.
 my $xml_file = $obj->xml;

 # Print out XML file.
 print "XML file: $xml_file\n";

 # Output like:
 # XML file: .*/bucharest-map.xml

EXAMPLE3

 use strict;
 use warnings;

 use Map::Tube::GraphViz;
 use Map::Tube::GraphViz::Utils qw(node_color_without_label);
 use Map::Tube::Bucharest;

 # Object.
 my $obj = Map::Tube::Bucharest->new;

 # GraphViz object.
 my $g = Map::Tube::GraphViz->new(
         'callback_node' => \&node_color_without_label,
         'driver' => 'neato',
         'tube' => $obj,
 );

 # Get graph to file.
 $g->graph('Bucharest.png');

 # Print file.
 system "ls -l Bucharest.png";

 # Output like:
 # -rw-r--r-- 1 skim skim 151426 Dec 24 12:03 Bucharest.png
Metroul din București

EXAMPLE4

 use strict;
 use warnings;

 use Encode qw(encode_utf8);
 use Map::Tube::Bucharest;

 # Object.
 my $obj = Map::Tube::Bucharest->new;

 # Get lines.
 my $lines_ar = $obj->get_lines;

 # Print out.
 map { print encode_utf8($_->name)."\n"; } sort @{$lines_ar};

 # Output:
 # Linia M1
 # Linia M2
 # Linia M3
 # Linia M4

EXAMPLE5

 use strict;
 use warnings;

 use Encode qw(encode_utf8);
 use Map::Tube::Bucharest;

 # Arguments.
 if (@ARGV < 1) {
         print STDERR "Usage: $0 line\n";
         exit 1;
 }
 my $line = $ARGV[0];

 # Object.
 my $obj = Map::Tube::Bucharest->new;

 # Get stations for line.
 my $stations_ar = $obj->get_stations($line);

 # Print out.
 map { print encode_utf8($_->name)."\n"; } @{$stations_ar};

 # Output:
 # Usage: __PROG__ line

 # Output with 'foo' argument.
 # Map::Tube::get_stations(): ERROR: Invalid Line Name [foo]. (status: 105) file __PROG__ on line __LINE__

 # Output with 'Linia M4' argument.
 # Gara de Nord 2
 # Basarab
 # Grivița
 # 1 Mai
 # Jiului
 # Parc Bazilescu

DEPENDENCIES

File::Share, Map::Tube, Moo, namespace::clean.

SEE ALSO

Map::Tube

Core library as Role (Moo) to process map data.

Task::Map::Tube

Install the Map::Tube modules.

Task::Map::Tube::Metro

Install the Map::Tube concrete metro modules.

REPOSITORY

https://github.com/michal-josef-spacek/Map-Tube-Bucharest

AUTHOR

Michal Josef Špaček mailto:skim@cpan.org

http://skim.cz

LICENSE AND COPYRIGHT

© 2014-2023 Michal Josef Špaček

Artistic License

BSD 2-Clause License

VERSION

0.11