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::Singapore - Interface to the Singapore Metro Map.

SYNOPSIS

use Map::Tube::Singapore;
my $obj = Map::Tube::Singapore->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 Singapore Map, click here.

METHODS

new()
Constructor.
get_all_routes($from, $to) [EXPERIMENTAL]
Get all routes from station to station.
Returns reference to array with Map::Tube::Route objects.
get_line_by_id($line_id)
Get line object defined by id.
Returns Map::Tube::Line object.
get_line_by_name($line_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($station_id)
Get station node by id.
Returns Map::Tube::Node object.
get_node_by_name($station_name)
Get station node by name.
Returns Map::Tube::Node object.
get_shortest_route($from, $to)
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($line)
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 Singapore metro.
Returns string with XML.

EXAMPLE1

# Pragmas.
use strict;
use warnings;

# Modules.
use Map::Tube::Singapore;

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

# Get route.
my $route = $obj->get_shortest_route('Admiralty', 'Tampines');

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

# Output:
# Route: Admiralty (North South MRT Line), Sembawang (North South MRT Line), Canberra (North South MRT Line), Yishun (North South MRT Line), Khatib (North South MRT Line), Yio Chu Kang (North South MRT Line), Ang Mo Kio (North South MRT Line), Bishan (North South MRT Line), Bishan (Circle MRT Line), Lorong Chuan (Circle MRT Line), Serangoon (Circle MRT Line), Bartley (Circle MRT Line), Tai Seng (Circle MRT Line), MacPherson (Circle MRT Line), Paya Lebar (Circle MRT Line), Paya Lebar (East West MRT Line), Eunos (East West MRT Line), Kembangan (East West MRT Line), Bedok (East West MRT Line), Tanah Merah (East West MRT Line), Simei (East West MRT Line), Tampines (East West MRT Line)

EXAMPLE2

# Pragmas.
use strict;
use warnings;

# Modules.
use Map::Tube::Singapore;

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

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

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

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

EXAMPLE3

# Pragmas.
use strict;
use warnings;

# Modules.
use Map::Tube::GraphViz;
use Map::Tube::GraphViz::Utils qw(node_color_without_label);
use Map::Tube::Singapore;

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

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

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

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

# Output like:
# -rw-r--r-- 1 skim skim 341912 Oct 16 10:06 Singapore.png
Mass Rapid Transit

EXAMPLE4

# Pragmas.
use strict;
use warnings;

# Modules.
use Encode qw(encode_utf8);
use Map::Tube::Singapore;

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

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

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

# Output:
# Circle MRT Line
# Downtown MRT Line
# East West MRT Line
# North East MRT Line
# North South MRT Line

EXAMPLE5

# Pragmas.
use strict;
use warnings;

# Modules.
use Encode qw(encode_utf8);
use Map::Tube::Singapore;

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

# Object.
my $obj = Map::Tube::Singapore->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 'Circle MRT Line' argument.
# Dhoby Ghaut
# Bras Basah
# Esplanade
# Promenade
# Nicoll Highway
# Stadium
# Mountbatten
# Dakota
# Paya Lebar
# MacPherson
# Tai Seng
# Bartley
# Serangoon
# Lorong Chuan
# Bishan
# Marymount
# Caldecott
# Botanic Gardens
# Farrer Road
# Buona Vista
# one-north
# Kent Ridge
# Haw Par Villa
# Pasir Panjang
# Labrador Park
# Telok Blangah
# HarbourFront

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/tupinek/Map-Tube-Singapore

AUTHOR

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

http://skim.cz

LICENSE AND COPYRIGHT

© 2014-2017 Michal Josef Špaček
Artistic License
BSD 2-Clause License

VERSION

0.04