NAME

Map::Metro::Plugin::Map - How to make your own map

SYNOPSIS

# This is a modified part of the map from Map::Metro::Plugin::Map::Stockholm

--stations
Stadshagen
Fridhemsplan
Rådhuset
T-Centralen

# comments are possible
Gamla stan
Slussen
Medborgarplatsen
Skanstull
Gullmarsplan
Globen
Sergels torg
Nybroplan

--transfers
T-Centralen|Sergels torg|weight:4

--lines
10|T10|Blue line
11|T11|Blue line
19|T19|Green line
7|L7|Spårväg city

--segments
10->,11<-|Stadshagen|Fridhemsplan % Västermalmsgallerian
10,11|Fridhemsplan|Rådhuset % :Radhuset
10,11|Rådhuset|T-Centralen
10,11|T-Centralen|Kungsträdgården
19|T-Centralen|Gamla stan
19|Gamla stan|Slussen
19|Slussen|Medborgarplatsen
19|Medborgarplatsen|Skanstull
19|Skanstull|Gullmarsplan
19|Gullmarsplan|Globen
7|Sergels torg|Nybroplan

DESCRIPTION

It is straightforward to create a map file. It consists of four parts:

--stations

This is a list of all stations in the network. Currently only one value per line. Don't use | in station names.

--transfers

This is a list of Transfers. If two stations share at least one line they are not transfers. Three groups of data per line (delimited by |):

The first station.
The following station.
Optional options.

The options in turn is a comma separated list of colon separated key-value pairs. Currently the only supported option is:

weight. Integer. Set a custom weight for the 'cost' of making this transfer. Default value is 5. (Travelling between two stations on the same line cost 1, and changing lines at a station costs 3).

--lines

This is a list of all lines in the network. Three values per line (delimited by |):

Line id (only a-z, A-Z and 0-9 allowed). Used in segments.
Line name. This should preferably be short(ish) and a common name for the line.
Line description. This can be a longer common name for the line.

--segments

This is a list of all Segments in the network. (A segment is a pair of consecutive stations.) Three groups of data per line (delimited by |):

* A list of line ids (comma delimited). This references the line list above. The list of line ids represents all lines travelling between the two stations.

* The first station.

* The following station

In the synopsis, segments part starts like this:

10->,11<-|Stadshagen|Fridhemsplan % Västermalmsgallerian
10,11|Fridhemsplan|Rådhuset % :Radhuset

First, the arrow notation describes the direction of travel (the default is both ways, all three can be combined in one segment definition).

-> means that the line only travels from Stadshagen to Fridhemsplan.

<- means that the line only travels from Fridhemsplan to Stadshagen.

Second, the % notation makes it possible to attach more names to the station.

If the name begins with a : it is considered a search name. This mean that it is possible to search, but it is generally not displayed (eg. by the PrettyPrinter hook).

If the name doesn't begin with a : it is considered an alternative name. The PrettyPrinter hook displays them as "first given name/alternative name".

When to use what?

Alternative names are used when the same station is known as both names. This is not very common.

Search names can be used when 1) a station has changed names (keep the old name as a search name), or 2) when dealing with latin alphabet languages with diacritics so that international users can skip those.

Overriding station names through a hook (as Map::Metro::Plugin::Hook::Helsinki::Swedish does) can be a good way to present translations or transliterations of station names.

Just make sure that no names collide.

WHAT NOW?

Start a distribution called Map::Metro::Plugin::Map::$city.

Save the map file as map-$city.metro in the share directory.

Say we make a map for London; then Map::Metro::Plugin::Map::London would look like this:

package Map::Metro::Plugin::Map::London {

    use Moose;
    use File::ShareDir 'dist_dir';
    use Path::Tiny;
    with 'Map::Metro::Plugin::Map';

    has '+mapfile' => (
        default => sub { path(dist_dir('Map-Metro-Plugin-Map-London'))->child('map-london.metro')->absolute },
    );
}

1;

AUTHOR

Erik Carlsson <info@code301.com>

COPYRIGHT

Copyright 2014 - Erik Carlsson

LICENSE

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.