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