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 is mostly useful when a station has changed names (keep the old name as a search name)

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;

By default, station names with diacritics get their un-diacritic form added as a search name. If this causes problems with a map file, add this to the module definition and it is turned off:

has '+do_undiacritic' => (
    default => 0,
);

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.