The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

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

VERSION

Version 0.2405, released 2016-07-23.

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|color:#79c142
    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.

* Optional options, a comma separated list of colon separated key-value pairs:

    * color. Hexadecimal, preceeded by '#'. Can be used by visualization tools to give lines their regular colours.

    * width. Integer. Can be used by visualization tools to give lines different widths, for example differentiate different types of transport.

--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.

With Dist::Zilla

The easiest way to do that is to use Dist::Zilla with Dist::Zilla::MintingProfile::MapMetro::Map. See also Task::MapMetro::Dev.

    $ dzil new -P MapMetro::Map  Map::Metro::Plugin::Map::TheCity

Without Dist::Zilla

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:

    use strict;

    package Map::Metro::Plugin::Map::London;

    our $VERSION = 0.01;

    use Moose;
    with 'Map::Metro::Plugin::Map';

    has '+mapfile' => (
        default => 'map-london.metro',
    );
    sub map_version {
        return $VERSION;
    }
    sub map_package {
        return __PACKAGE__;
    }

    1;

Diacritics?

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,
    );

SOURCE

https://github.com/Csson/p5-Map-Metro

HOMEPAGE

https://metacpan.org/release/Map-Metro

AUTHOR

Erik Carlsson <info@code301.com>

COPYRIGHT AND LICENSE

This software is copyright (c) 2016 by Erik Carlsson.

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