summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2016-05-26 21:51:36 +0200
committerDaniel Friesel <derf@finalrewind.org>2016-05-26 21:51:36 +0200
commitb27286f572030bc84e19003e66b04a43f5f9b851 (patch)
treef0c093634dfd844be2f7b382900d50fa7bb40339 /scripts
parent8a161efb92caffc77435ba39100c329956b57335 (diff)
update acronyms.pl helper script with DS100 fixups etc.
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/acronyms.pl1888
1 files changed, 1862 insertions, 26 deletions
diff --git a/scripts/acronyms.pl b/scripts/acronyms.pl
index 124034e..60fba04 100755
--- a/scripts/acronyms.pl
+++ b/scripts/acronyms.pl
@@ -14,11 +14,16 @@ use warnings;
use 5.014;
use utf8;
+use Geo::Distance;
use List::Util qw(min);
use List::UtilsBy qw(uniq_by);
use List::MoreUtils qw(firstval pairwise);
use Text::LevenshteinXS qw(distance);
+# TODO Geo::Distance is kinda deprecated, it is recommended to use GIS::Distance
+# instead. However, since GIS::Distance is not packaged for Debian, I'll stick
+# with Geo::Distance for now (which works fine enough here)
+
# TODO switch to Text::Levenshtein::XS once AUR/Debian packages become available
our $VERSION = '1.05';
@@ -26,17 +31,23 @@ our $VERSION = '1.05';
my @stations = (
EOF
-my $csv = Text::CSV->new({binary => 1, sep_char => q{;}});
-while (my $line = <STDIN>) {
-# chomp $line;
-# $line = decode('UTF-8', $line);
+my $csv = Text::CSV->new(
+ {
+ binary => 1,
+ sep_char => q{;}
+ }
+);
+while ( my $line = <STDIN> ) {
+
+ # chomp $line;
+ # $line = decode('UTF-8', $line);
my $status = $csv->parse($line);
my @fields = $csv->fields;
- my ($uic, $station, $name, $mot, $longitute, $latitude) = @fields;
+ my ( $uic, $station, $name, $mot, $longitute, $latitude ) = @fields;
- if ($station eq 'DS100' or $station eq q{}) {
+ if ( $station eq 'DS100' or $station eq q{} ) {
next;
}
@@ -46,10 +57,1776 @@ while (my $line = <STDIN>) {
$name =~ s{\s+}{ }g;
$name =~ s{'}{\\'}g;
- printf("\t['%s','%s',%s,%s,%s],\n", encode('UTF-8', $station), encode('UTF-8', $name), $uic, $longitute, $latitude);
+ $station =~ s{ ^ EBLA $ }{EBP}x;
+ $station =~ s{ ^ EBTHP $ }{EBTH}x;
+ $station =~ s{ ^ EDO \s N $ }{EDO}x;
+ $station =~ s{ ^ FBUSS $ }{FBUS}x;
+ $station =~ s{ ^ FH \s\s N$ }{FH}x;
+ $station =~ s{ ^ KAREP $ }{KARE}x;
+ $station =~ s{ ^ KBR \s P $ }{KBR}x;
+ $station =~ s{ ^ KDDH $ }{KDD}x;
+ $station =~ s{ ^ KDFFH $ }{KDFF}x;
+ $station =~ s{ ^ KDN \s P $ }{KDN}x;
+ $station =~ s{ ^ KRY \s P $ }{KRY}x;
+
+ printf(
+ "\t['%s','%s',%s,%s,%s],\n",
+ encode( 'UTF-8', $station ),
+ encode( 'UTF-8', $name ),
+ $uic, $longitute, $latitude
+ );
}
say <<'EOF';
+
+ [ 'XNTH', '`t Harde' ],
+ [ 'XBAAL', 'Aalter' ],
+ [ 'XSA', 'Aarau' ],
+ [ 'XSABO', 'Aarburg-Oftring' ],
+ [ 'XFAH', 'Achiet' ],
+ [ 'XSAA', 'Affoltern Albis' ],
+ [ 'XFAG', 'Agde' ],
+ [ 'XSAL', 'Aigle' ],
+ [ 'XFAM', 'Aime-la-Plagne' ],
+ [ 'XIAE', 'Airole' ],
+ [ 'XSAI', 'Airolo' ],
+ [ 'XFAX', 'Aix-en-Prov TGV' ],
+ [ 'XFAI', 'Aix-les-Bains' ],
+ [ 'XIAO', 'Alassio' ],
+ [ 'XUAI', 'Alba Iulia' ],
+ [ 'XIAT', 'Albate Camerlata' ],
+ [ 'XIAB', 'Albenga' ],
+ [ 'XFAL', 'Albertville' ],
+ [ 'XFALN', 'Alencon' ],
+ [ 'XFALE', 'Ales' ],
+ [ 'XBAE', 'Alken BE' ],
+ [ 'XNAL', 'Alkmaar' ],
+ [ 'XAAH', 'Allerheiligenh' ],
+ [ 'XNAO', 'Almelo' ],
+ [ 'XNAOO', 'Almere Oostvaard' ],
+ [ 'XNAR', 'Alphen a d Rijn' ],
+ [ 'XSADF', 'Altdorf' ],
+ [ 'XSAD', 'Altendorf' ],
+ [ 'XAAL', 'Altenmarkt i.P.' ],
+ [ 'XSAT', 'Altnau' ],
+ [ 'XSAS', 'Altstätten SG' ],
+ [ 'XFAE', 'Amberieu' ],
+ [ 'XNAMV', 'Amersf Vathorst' ],
+ [ 'XNAM', 'Amersfoort' ],
+ [ 'XNAS', 'Amst Sloterdijk' ],
+ [ 'XNAB', 'Amsterd Bijlmer' ],
+ [ 'XNAC', 'Amsterdam C' ],
+ [ 'XNAZ', 'Amsterdam Zuid' ],
+ [ 'XNAA', 'Amsterdam-Amstel' ],
+ [ 'XAAS', 'Amstetten' ],
+ [ 'XSANF', 'Andelfingen' ],
+ [ 'XSAN', 'Andermatt' ],
+ [ 'XAAD', 'Andorf' ],
+ [ 'XBAL', 'Angleur' ],
+ [ 'XFANG', 'Angouleme' ],
+ [ 'XBANS', 'Ans' ],
+ [ 'XFAN', 'Antibes' ],
+ [ 'XBAC', 'Antwerpen-Centr' ],
+ [ 'XBAZ', 'Antwerpen-Zuid' ],
+ [ 'XFAP', 'Apach' ],
+ [ 'XNAE', 'Apeldoorn' ],
+ [ 'XNAP', 'Appingedam' ],
+ [ 'XUA', 'Arad' ],
+ [ 'XSAB', 'Arbon' ],
+ [ 'XSABS', 'Arbon S' ],
+ [ 'XIAZ', 'Arezzo' ],
+ [ 'XFAR', 'Argeles sur Mer' ],
+ [ 'XFARL', 'Arles' ],
+ [ 'XBAR', 'Arlon' ],
+ [ 'XNAH', 'Arnhem' ],
+ [ 'XAAR', 'Arnoldstein' ],
+ [ 'XSAO', 'Arosa' ],
+ [ 'XFAS', 'Arras' ],
+ [ 'XFAY', 'Artenay' ],
+ [ 'XSAG', 'Arth-Goldau' ],
+ [ 'XFARV', 'Arvant' ],
+ [ 'XTAS', 'As' ],
+ [ 'XKA', 'Ashford' ],
+ [ 'XKAI', 'Ashford Int' ],
+ [ 'XBASS', 'Asse' ],
+ [ 'XAAT', 'Attnang-Puchheim' ],
+ [ 'XSAU', 'Au SG' ],
+ [ 'XSAZ', 'Au ZH' ],
+ [ 'XFAU', 'Aulnoye' ],
+ [ 'XFAUM', 'Aumale' ],
+ [ 'XFAUN', 'Auneau' ],
+ [ 'XBAU', 'auvelais' ],
+ [ 'XIAV', 'Aversa' ],
+ [ 'XFAVN', 'Avesnes' ],
+ [ 'XFAV', 'Avignon Centre' ],
+ [ 'XFAVV', 'Avignon-TGV' ],
+ [ 'XTBY', 'Babylon' ],
+ [ 'XSBAE', 'Bäch' ],
+ [ 'XABA', 'Bad Aussee' ],
+ [ 'XABB', 'Bad Blumau' ],
+ [ 'XABG', 'Bad Gastein' ],
+ [ 'XABH', 'Bad Hofgastein' ],
+ [ 'XAIS', 'Bad Ischl' ],
+ [ 'XSRA', 'Bad Ragaz' ],
+ [ 'XASBW', 'Bad Schall-Wall' ],
+ [ 'XAVN', 'Bad Vigaun' ],
+ [ 'XSZZ', 'Bad Zurzach' ],
+ [ 'XSBA', 'Baden CH' ],
+ [ 'XFBX', 'Baisieux' ],
+ [ 'XSBAL', 'Balerna' ],
+ [ 'XRBJ', 'Banova Jaruga' ],
+ [ 'XFBH', 'Bantzenheim' ],
+ [ 'XFBAY', 'Banyuls sur Mer' ],
+ [ 'XEBS', 'Barcelona-S Andr' ],
+ [ 'XNBA', 'Barendrecht' ],
+ [ 'XFBD', 'Bar-le-Duc' ],
+ [ 'XLBA', 'Bascharange-San' ],
+ [ 'XSB', 'Basel SBB' ],
+ [ 'XSBP', 'Basel SBB Dreisp' ],
+ [ 'XSBJ', 'Basel St Johann' ],
+ [ 'XSBD', 'Bassersdorf' ],
+ [ 'XIBT', 'Battipaglia' ],
+ [ 'XDBH', 'Baunhoej' ],
+ [ 'XFBY', 'Bayonne' ],
+ [ 'XBBE', 'Beernem' ],
+ [ 'XMBS', 'Bekescsaba' ],
+ [ 'XTBPB', 'Bela p Bezdezem' ],
+ [ 'XFBF', 'Belfort' ],
+ [ 'XFBA', 'Bellegarde (Ain)' ],
+ [ 'XFBV', 'Belleville' ],
+ [ 'XSBZ', 'Bellinzona' ],
+ [ 'XSBEP', 'Belp' ],
+ [ 'XLBUL', 'Belval-Lycee' ],
+ [ 'XLBR', 'Belval-Redange' ],
+ [ 'XLBUN', 'Belval-Universit' ],
+ [ 'XLBS', 'Belvaux-Soleuvre' ],
+ [ 'XTBP', 'Benesov n Plouc' ],
+ [ 'XFBTR', 'Benestroff' ],
+ [ 'XFBEF', 'Benfeld' ],
+ [ 'XFBE', 'Bening' ],
+ [ 'XJB', 'Beograd' ],
+ [ 'XBBC', 'Berchem' ],
+ [ 'XLBC', 'Berchem Hp LU' ],
+ [ 'XSBRG', 'Berg CH' ],
+ [ 'XNBZ', 'Bergen op Zoom' ],
+ [ 'XFBER', 'Bergues' ],
+ [ 'XSBN', 'Bergün/Bravuogn' ],
+ [ 'XSBLG', 'Berlingen' ],
+ [ 'XSBLS', 'Berlingen S' ],
+ [ 'XSBE', 'Bern' ],
+ [ 'XFBEY', 'Bernay' ],
+ [ 'XTBU', 'Beroun' ],
+ [ 'XFBTM', 'Berthelming' ],
+ [ 'XLBG', 'Bertrange-Strass' ],
+ [ 'XBBX', 'Bertrix' ],
+ [ 'XFB', 'Besancon' ],
+ [ 'XFBI', 'Besancon Viotte' ],
+ [ 'XLXBB', 'Bettembg Gr FR' ],
+ [ 'XLB', 'Bettembourg' ],
+ [ 'XSBW', 'Bettwiesen' ],
+ [ 'XLBZ', 'Betzdorf (LUX)' ],
+ [ 'XIBVA', 'Bevera' ],
+ [ 'XNBK', 'Beverwijk' ],
+ [ 'XSBX', 'Bex' ],
+ [ 'XFBZ', 'Beziers' ],
+ [ 'XFBR', 'Biarritz' ],
+ [ 'XSBC', 'Biasca' ],
+ [ 'XSBBS', 'Biberist RBS' ],
+ [ 'XSBB', 'Biberist RM' ],
+ [ 'XABIA', 'Bichlbach-Almk' ],
+ [ 'XABI', 'Bichlbach-Berw.' ],
+ [ 'XSBL', 'Biel/Bienne' ],
+ [ 'XBBA', 'Bierset-Awans' ],
+ [ 'XTBI', 'Bilina' ],
+ [ 'XDBL', 'Billum' ],
+ [ 'XSBT', 'Bilten' ],
+ [ 'XTBKN', 'Bily Kostel n.N.' ],
+ [ 'XSBM', 'Birmensdorf' ],
+ [ 'XABO', 'Bischofshofen' ],
+ [ 'XFBLV', 'Blainville-D' ],
+ [ 'XUBL', 'Blaj' ],
+ [ 'XFBLM', 'Blanc Mesnil' ],
+ [ 'XSBS', 'Blausee-Mitholz' ],
+ [ 'XNBL', 'Blerick' ],
+ [ 'XABD', 'Blindenmarkt' ],
+ [ 'XABL', 'Bludenz' ],
+ [ 'XABS', 'Böckstein' ],
+ [ 'XNBD', 'Bodegraven' ],
+ [ 'XSBOD', 'Bodio' ],
+ [ 'XFBN', 'Boen' ],
+ [ 'XABC', 'Böheimkirchen' ],
+ [ 'XTBO', 'Bohumin' ],
+ [ 'XPBOL', 'Boleslawiec' ],
+ [ 'XFBOW', 'Bollwiller' ],
+ [ 'XIBC', 'Bologna C' ],
+ [ 'XIBZ', 'Bolzano/Bozen' ],
+ [ 'XBBDL', 'Boondael/Boondaa' ],
+ [ 'XFBJ', 'Bordeaux-St-J' ],
+ [ 'XIBD', 'Bordighera' ],
+ [ 'XIBOD', 'Borgo S Dalmazzo' ],
+ [ 'XNBO', 'Born' ],
+ [ 'XDBOP', 'Borup' ],
+ [ 'XSBOH', 'Bottighofen' ],
+ [ 'XDBV', 'Boulevarden' ],
+ [ 'XFBB', 'Bourg-en-Bresse' ],
+ [ 'XFBGS', 'Bourges' ],
+ [ 'XFBM', 'Bourg-St Maurice' ],
+ [ 'XFBZV', 'Bouzonville' ],
+ [ 'XDBM', 'Bramming' ],
+ [ 'XUBS', 'Brasov' ],
+ [ 'XYB', 'Bratislava hl.st' ],
+ [ 'XYBZ', 'Bratislava-Petra' ],
+ [ 'XABR', 'Braunau a Inn' ],
+ [ 'XTBE', 'Breclav' ],
+ [ 'XTXBE', 'Breclav Gr AT' ],
+ [ 'XNBR', 'Breda' ],
+ [ 'XDBR', 'Bredebro' ],
+ [ 'XAB', 'Bregenz' ],
+ [ 'XABHF', 'Bregenz See' ],
+ [ 'XFBRY', 'Breil sur Roya' ],
+ [ 'XIBN', 'Brennero/Brenner' ],
+ [ 'XIBCA', 'Brescia' ],
+ [ 'XIBX', 'Bressan./Brixen' ],
+ [ 'XBBS', 'Bressoux' ],
+ [ 'XFBRT', 'Brest FR' ],
+ [ 'XTBD', 'Breziny u Decina' ],
+ [ 'XSBG', 'Brig' ],
+ [ 'XABT', 'Brixen im Thale' ],
+ [ 'XABX', 'Brixlegg' ],
+ [ 'XTBR', 'Brno hl.n.' ],
+ [ 'XDBN', 'Broens' ],
+ [ 'XSBRH', 'Bronschhofen' ],
+ [ 'XABM', 'Bruck a. d. Mur' ],
+ [ 'XABK', 'Bruck a.d.Leitha' ],
+ [ 'XABF', 'Bruck-Fusch' ],
+ [ 'XSBRU', 'Brugg AG' ],
+ [ 'XBBR', 'Brugge' ],
+ [ 'XFBAH', 'Brumath' ],
+ [ 'XIBB', 'Brunico/Bruneck' ],
+ [ 'XSBNN', 'Brunnen' ],
+ [ 'XBBME', 'Brux M Eurostar' ],
+ [ 'XBBL', 'Bruxelles-Centr' ],
+ [ 'XBBLX', 'Bruxelles-Lux' ],
+ [ 'XBB', 'Bruxelles-Midi' ],
+ [ 'XBBNL', 'Bruxelles-N-Aero' ],
+ [ 'XBBN', 'Bruxelles-Nord' ],
+ [ 'XSBU', 'Buchs SG' ],
+ [ 'XUBN', 'Bucuresti Nord' ],
+ [ 'XMBK', 'Budapest-Keleti' ],
+ [ 'XMBN', 'Budapest-Nyugati' ],
+ [ 'XNBP', 'Buitenpost' ],
+ [ 'XSBH', 'Bülach' ],
+ [ 'XFBG', 'Bully-Grenay' ],
+ [ 'XDBU', 'Bur' ],
+ [ 'XABU', 'Burgfried' ],
+ [ 'XSBGL', 'Bürglen' ],
+ [ 'XEBU', 'Burgos' ],
+ [ 'XFBS', 'Busigny' ],
+ [ 'XSBUS', 'Bussnang' ],
+ [ 'XIBU', 'Busto Arsizio' ],
+ [ 'XPBY', 'Bydgoszcz Gl' ],
+ [ 'XICIG', 'C.Isarco/Gossens' ],
+ [ 'XSCZ', 'Cadenazzo' ],
+ [ 'XFCK', 'Calais Ville' ],
+ [ 'XFFE', 'Calais-Frethun' ],
+ [ 'XECM', 'Caldas de M.' ],
+ [ 'XICTF', 'Campo d Tr/Freif' ],
+ [ 'XFCA', 'Cannes' ],
+ [ 'XFCB', 'Cannes la Bocca' ],
+ [ 'XLCP', 'Capellen' ],
+ [ 'XSCR', 'Capolago-Riva S' ],
+ [ 'XFCAB', 'Carbonne' ],
+ [ 'XFCN', 'Carcassonne' ],
+ [ 'XICAR', 'Carimate' ],
+ [ 'XFCNO', 'Carnoules' ],
+ [ 'XICB', 'Casteld./Ehrenb.' ],
+ [ 'XFCAN', 'Castelnaudary' ],
+ [ 'XSCA', 'Castione-Arbedo' ],
+ [ 'XFCAV', 'Cavaillon' ],
+ [ 'XICTL', 'Centallo' ],
+ [ 'XLCS', 'Cents-Hamm' ],
+ [ 'XFCE', 'Cerbere' ],
+ [ 'XTCC', 'Cernovice u Ch' ],
+ [ 'XTCKA', 'Ceska Kamenice' ],
+ [ 'XTC', 'Ceska Kubice' ],
+ [ 'XTCL', 'Ceska Lipa hl.n.' ],
+ [ 'XTCLS', 'Ceska Lipa Strel' ],
+ [ 'XTTR', 'Ceska Trebova' ],
+ [ 'XTCB', 'Ceske Budejovice' ],
+ [ 'XTCV', 'Ceske Velenice' ],
+ [ 'XFCM', 'Chalons en Champ' ],
+ [ 'XFCS', 'Chalon-sur-Saone' ],
+ [ 'XFCY', 'Chambery' ],
+ [ 'XFCG', 'Champigneulles' ],
+ [ 'XBCH', 'Charleroi-Sud' ],
+ [ 'XFCAR', 'Chat Arnoux St A' ],
+ [ 'XFCD', 'Chateau-du-Loir' ],
+ [ 'XFCX', 'Chateauroux' ],
+ [ 'XFCT', 'Chateau-Thierry' ],
+ [ 'XBCL', 'Chatelet' ],
+ [ 'XFCH', 'Chauny' ],
+ [ 'XTCH', 'Cheb' ],
+ [ 'XTCS', 'Cheb-Skalka' ],
+ [ 'XFCSG', 'Chelles-Gournay' ],
+ [ 'XFCGG', 'Chenay-Gagny' ],
+ [ 'XBCE', 'Chenee' ],
+ [ 'XFCHB', 'Cherbourg' ],
+ [ 'XSCH', 'Chiasso' ],
+ [ 'XICK', 'Chiusa/Klausen' ],
+ [ 'XICU', 'Chiusi-Chianci.T' ],
+ [ 'XTCD', 'Chodov' ],
+ [ 'XPCJ', 'Chojnow' ],
+ [ 'XTCO', 'Chomutov' ],
+ [ 'XTCM', 'Chomutov Mesto' ],
+ [ 'XTCY', 'Chotyne' ],
+ [ 'XTCR', 'Chrastava' ],
+ [ 'XTCA', 'Chrastava-And H' ],
+ [ 'XTCHR', 'Chribska' ],
+ [ 'XSC', 'Chur' ],
+ [ 'XFCIG', 'Cintegabelle' ],
+ [ 'XFCLE', 'Clermont-Ferrand' ],
+ [ 'XFCL', 'Clerval' ],
+ [ 'XLCV', 'Clervaux' ],
+ [ 'XNCV', 'Coevorden' ],
+ [ 'XFCLL', 'Collioure' ],
+ [ 'XFC', 'Colmar' ],
+ [ 'XFCQ', 'Combs la Ville-Q' ],
+ [ 'XIC', 'Como S.G.' ],
+ [ 'XFCP', 'Compiegne' ],
+ [ 'XICGL', 'Conegliano' ],
+ [ 'XFCF', 'Conflans-Jarny' ],
+ [ 'XFCOM', 'Corbehem' ],
+ [ 'XFCOE', 'Corbeil-Essones' ],
+ [ 'XSCO', 'Cornaux' ],
+ [ 'XFCOS', 'Cosne' ],
+ [ 'XSCS', 'Cossonay' ],
+ [ 'XFCOL', 'Coulommiers' ],
+ [ 'XFCSN', 'Courcelles s N' ],
+ [ 'XFCOU', 'Coutras' ],
+ [ 'XFCR', 'Creil' ],
+ [ 'XFCU', 'Culmont-Chalind' ],
+ [ 'XFCZ', 'Culoz' ],
+ [ 'XICUN', 'Cuneo' ],
+ [ 'XUCU', 'Curtici' ],
+ [ 'XPCD', 'Czechowice-Dzied' ],
+ [ 'XPCW', 'Czerwiensk' ],
+ [ 'XSDA', 'Dachsen' ],
+ [ 'XSDS', 'Dagmersellen' ],
+ [ 'XSDN', 'Däniken' ],
+ [ 'XSDD', 'Davos Dorf' ],
+ [ 'XSDP', 'Davos Platz' ],
+ [ 'XFDX', 'Dax' ],
+ [ 'XNDE', 'De Eschmarke' ],
+ [ 'XMD', 'Debrecen' ],
+ [ 'XTD', 'Decin hl.n.' ],
+ [ 'XTDV', 'Decin vychod' ],
+ [ 'XTD Z', 'Decin zapad.n.' ],
+ [ 'XTDC', 'Decin-Certova V' ],
+ [ 'XTDPR', 'Decin-Priper' ],
+ [ 'XTDP', 'Decin-Prost Zleb' ],
+ [ 'XNDD', 'Delden' ],
+ [ 'XSDE', 'Delemont' ],
+ [ 'XNDT', 'Delft' ],
+ [ 'XNDZ', 'Delfzijl' ],
+ [ 'XNDH', 'Den Haag C' ],
+ [ 'XNDHH', 'Den Haag HS' ],
+ [ 'XNDL', 'Den Helder' ],
+ [ 'XBDL', 'Denderleeuw' ],
+ [ 'XTDS', 'Desenice' ],
+ [ 'XIDS', 'Desenzano G S' ],
+ [ 'XIDE', 'Desio' ],
+ [ 'XFDEE', 'Dettwiller' ],
+ [ 'XUD', 'Deva' ],
+ [ 'XNDV', 'Deventer' ],
+ [ 'XYDN', 'DevinskaNovaVes' ],
+ [ 'XIDM', 'Diano Marina' ],
+ [ 'XFDM', 'Diemeringen' ],
+ [ 'XBDBK', 'Diepenbeek' ],
+ [ 'XSDH', 'Diessenhofen' ],
+ [ 'XSDHS', 'Diessenhofen S' ],
+ [ 'XSD', 'Dietlikon' ],
+ [ 'XFDI', 'Dieulouard' ],
+ [ 'XLDI', 'Differdange' ],
+ [ 'XFD', 'Dijon' ],
+ [ 'XFDN', 'Dijon PN' ],
+ [ 'XLDR', 'Dippach-Reckange' ],
+ [ 'XIDT', 'Dobbiaco/Toblach' ],
+ [ 'XZD', 'Dobova' ],
+ [ 'XZXDO', 'Dobova Gr HR' ],
+ [ 'XDDS', 'Doestrup Sdrj' ],
+ [ 'XTDK', 'Doksy' ],
+ [ 'XFDO', 'Dole' ],
+ [ 'XBDG', 'Dolhain-Gileppe' ],
+ [ 'XTDH', 'Dolni Habartice' ],
+ [ 'XTDD', 'Dolni Podluzi' ],
+ [ 'XTDA', 'Dolni Poustevna' ],
+ [ 'XTDL', 'Dolni Zleb' ],
+ [ 'XTDZ', 'Dolni Zleb zast' ],
+ [ 'XTDO', 'Domazlice' ],
+ [ 'XTDI', 'Domina' ],
+ [ 'XLDM', 'Dommeldange' ],
+ [ 'XID', 'Domodossola' ],
+ [ 'XNDO', 'Dordrecht' ],
+ [ 'XADG', 'Dorfgastein' ],
+ [ 'XADO', 'Dornbirn' ],
+ [ 'XADS', 'Dornbirn-Schoren' ],
+ [ 'XSDO', 'Dottikon-Din' ],
+ [ 'XFDR', 'Dourges' ],
+ [ 'XLDF', 'Drauffelt' ],
+ [ 'XNDR', 'Dronten' ],
+ [ 'XTDU', 'Duchcov' ],
+ [ 'XRDS', 'Dugo Selo' ],
+ [ 'XNDU', 'Duivendrecht' ],
+ [ 'XFDK', 'Dunkerque' ],
+ [ 'XDDY', 'Dyreby' ],
+ [ 'XKEI', 'Ebbsfleet Int' ],
+ [ 'XAEB', 'Eben im Pongau' ],
+ [ 'XAEF', 'Ebenfurth' ],
+ [ 'XFEH', 'Ebersheim' ],
+ [ 'XBED', 'Ede BE' ],
+ [ 'XNE', 'Ede Centrum' ],
+ [ 'XNEW', 'Ede-Wageningen' ],
+ [ 'XSEK', 'Effretikon' ],
+ [ 'XSEG', 'Eglisau' ],
+ [ 'XSEN', 'Egnach' ],
+ [ 'XAEZ', 'Ehrwald(Zugsp.B)' ],
+ [ 'XNEI', 'Eindhoven' ],
+ [ 'XSES', 'Einsiedeln' ],
+ [ 'XDEY', 'Ejby' ],
+ [ 'XFEL', 'Elne' ],
+ [ 'XAEL', 'Elsbethen' ],
+ [ 'XSEB', 'Emmenbrücke' ],
+ [ 'XBEN', 'Engis' ],
+ [ 'XAEN', 'Enns' ],
+ [ 'XNES', 'Enschede' ],
+ [ 'XFE', 'Epernay' ],
+ [ 'XFEI', 'Epierre-St L' ],
+ [ 'XFEN', 'Epinal' ],
+ [ 'XSE', 'Erlen' ],
+ [ 'XSEM', 'Ermatingen' ],
+ [ 'XSEMS', 'Ermatingen S' ],
+ [ 'XBEQ', 'Erquelinnes' ],
+ [ 'XFES', 'Erstein' ],
+ [ 'XSEF', 'Erstfeld' ],
+ [ 'XDE', 'Esbjerg' ],
+ [ 'XAEU', 'Eschenau AT' ],
+ [ 'XLEA', 'Esch-Sur-Alzette' ],
+ [ 'XDES', 'Eskilstrup' ],
+ [ 'XBES', 'Essen BE' ],
+ [ 'XFETP', 'Etampes' ],
+ [ 'XLET', 'Ettelbruck' ],
+ [ 'XSEW', 'Etzwilen' ],
+ [ 'XBEP', 'Eupen' ],
+ [ 'XFEV', 'Evreux' ],
+ [ 'XNEM', 'Eygelshov Markt' ],
+ [ 'XAFS', 'Faak am See' ],
+ [ 'XSFD', 'Faido' ],
+ [ 'XFF', 'Faulquemont' ],
+ [ 'XFFHL', 'Fegersheim Lipsh' ],
+ [ 'XSFE', 'Fehraltorf' ],
+ [ 'XAFK', 'Feldkirch' ],
+ [ 'XAFT', 'Feldkirchen(Kär)' ],
+ [ 'XAFX', 'Felixdorf' ],
+ [ 'XMBF', 'Ferencvaros' ],
+ [ 'XIFE', 'Ferrara' ],
+ [ 'XAFB', 'Fieberbrunn' ],
+ [ 'XEFI', 'Figueras' ],
+ [ 'XSFI', 'Filisur' ],
+ [ 'XIFLM', 'Finale Ligure M' ],
+ [ 'XIFRS', 'Firenze S.M.N' ],
+ [ 'XSFM', 'Flamatt' ],
+ [ 'XEFL', 'Flassa' ],
+ [ 'XAFG', 'Flaurling' ],
+ [ 'XFFL', 'Flers' ],
+ [ 'XAWFL', 'Floridsdorf' ],
+ [ 'XSFU', 'Flüelen' ],
+ [ 'XSFL', 'Flums' ],
+ [ 'XAFC', 'Föderlach' ],
+ [ 'XFFT', 'Fontaine' ],
+ [ 'XFFA', 'Fontainebleau' ],
+ [ 'XFFS', 'Fontan-Saorge' ],
+ [ 'XFFB', 'Forbach' ],
+ [ 'XBFM', 'Forest-Midi' ],
+ [ 'XIFF', 'Fort./Franzensf.' ],
+ [ 'XIF', 'Fossano' ],
+ [ 'XFFLT', 'Fourchambault' ],
+ [ 'XBFR', 'Fraipont' ],
+ [ 'XAFA', 'Frankenmarkt' ],
+ [ 'XTFA', 'Frant Lazne Auqa' ],
+ [ 'XTF', 'Frantiskovy Lazn' ],
+ [ 'XAFR', 'Frastanz' ],
+ [ 'XSFA', 'Frauenfeld' ],
+ [ 'XDF', 'Fredericia' ],
+ [ 'XSFB', 'Freienbach CH' ],
+ [ 'XSFF', 'Frenkendorf-Füll' ],
+ [ 'XSF', 'Fribourg' ],
+ [ 'XAF', 'Friesach' ],
+ [ 'XDFV', 'Frisvardvej' ],
+ [ 'XAFW', 'Fritzens-Wattens' ],
+ [ 'XFFX', 'Frontenex' ],
+ [ 'XFFD', 'Frouard' ],
+ [ 'XSFR', 'Frutigen' ],
+ [ 'XAFU', 'Fürnitz' ],
+ [ 'XFFU', 'Futuroscope' ],
+ [ 'XDGR', 'Gaarde' ],
+ [ 'XFGN', 'Gagny' ],
+ [ 'XFGAA', 'Gaillon-Aubevoye' ],
+ [ 'XIGA', 'Gallarate' ],
+ [ 'XSGM', 'Gampel-Steg' ],
+ [ 'XFGD', 'Gandrange' ],
+ [ 'XFGAN', 'Gannat' ],
+ [ 'XAGD', 'Gänserndorf' ],
+ [ 'XFGA', 'Gardanne' ],
+ [ 'XPG', 'Gdansk Glowny' ],
+ [ 'XPGOL', 'Gdansk Oliwa' ],
+ [ 'XPGWR', 'Gdansk Wrzeszcz' ],
+ [ 'XPGD', 'Gdynia Gl Os' ],
+ [ 'XAGEI', 'Geinberg' ],
+ [ 'XNLU', 'Geleen-Lutterade' ],
+ [ 'XSGK', 'Gelterkinden' ],
+ [ 'XIGF', 'Gemona Friuli' ],
+ [ 'XSGE', 'Geneve' ],
+ [ 'XSGEA', 'Geneve-Aeroport' ],
+ [ 'XBGK', 'Genk' ],
+ [ 'XIGP', 'Genova PP' ],
+ [ 'XBGB', 'Gentbrugge' ],
+ [ 'XBGD', 'Gent-Dampoort' ],
+ [ 'XBGP', 'Gent-St-Pieters' ],
+ [ 'XSGF', 'Gerlafingen' ],
+ [ 'XAGE', 'Gerling/Pinzgau' ],
+ [ 'XEG', 'Gerona(Viajeros)' ],
+ [ 'XFGE', 'Gevrey' ],
+ [ 'XAGB', 'Gießenbach' ],
+ [ 'XSGNR', 'Gisikon-Root' ],
+ [ 'XFGI', 'Gisors' ],
+ [ 'XSGI', 'Giubiasco' ],
+ [ 'XDGJ', 'Gjesing' ],
+ [ 'XNGB', 'Glanerbrug' ],
+ [ 'XSG', 'Glattbrugg' ],
+ [ 'XSGA', 'Glattfelden' ],
+ [ 'XAGL', 'Gloggnitz' ],
+ [ 'XDGU', 'Glumsoe' ],
+ [ 'XAGN', 'Gmünd NÖ' ],
+ [ 'XPGN', 'Gniezno' ],
+ [ 'XLGB', 'Goebelsmuhle' ],
+ [ 'XAGA', 'Golling-Abtenau' ],
+ [ 'XSGO', 'Goppenstein' ],
+ [ 'XPGW', 'Gorzow Wlkp' ],
+ [ 'XSGS', 'Göschenen' ],
+ [ 'XSGG', 'Gossau SG' ],
+ [ 'XSGL', 'Gottlieben' ],
+ [ 'XAGT', 'Götzendorf' ],
+ [ 'XAGZ', 'Götzis' ],
+ [ 'XNG', 'Gouda' ],
+ [ 'XBGY', 'Gouvy' ],
+ [ 'XFGR', 'Graffenstaden' ],
+ [ 'XAGR', 'Gramatneusiedl' ],
+ [ 'XEGR', 'Granollers-Centr' ],
+ [ 'XAGG', 'Gratw.-Gratkorn' ],
+ [ 'XAG', 'Graz Hbf' ],
+ [ 'XAGO', 'Graz Ost' ],
+ [ 'XDGB', 'Gredstedbro' ],
+ [ 'XSGRN', 'Grenchen Nord' ],
+ [ 'XFG', 'Grenoble' ],
+ [ 'XFGS', 'Gresy sur Isere' ],
+ [ 'XFGZ', 'Gretz-Armainvill' ],
+ [ 'XAGRB', 'Gries' ],
+ [ 'XAGI', 'Gries/Pinzgau' ],
+ [ 'XAGP', 'Griesk-Gallspach' ],
+ [ 'XAGM', 'Gröbming' ],
+ [ 'XBGR', 'Groenendaal' ],
+ [ 'XNGR', 'Groningen' ],
+ [ 'XAGS', 'Groß Schwechat' ],
+ [ 'XDGA', 'Guldager' ],
+ [ 'XAGK', 'Guntramsd-Kaiser' ],
+ [ 'XAGUR', 'Gurten' ],
+ [ 'XSGU', 'Güttingen' ],
+ [ 'XMG', 'Györ' ],
+ [ 'XBHA', 'Haaltert' ],
+ [ 'XNHE', 'Haarlem' ],
+ [ 'XNHLS', 'Haarl-Spaarnwoud' ],
+ [ 'XSHW', 'Haeggenschwil-W' ],
+ [ 'XAHU', 'Hagenau im Innkr' ],
+ [ 'XFHD', 'Hagondange' ],
+ [ 'XFHG', 'Haguenau' ],
+ [ 'XAHM', 'Haiming' ],
+ [ 'XAHT', 'Hall in Tirol' ],
+ [ 'XAHL', 'Hallein' ],
+ [ 'XAHE', 'Hallwang-Elixh.' ],
+ [ 'XAHA', 'Hard-Fussach' ],
+ [ 'XBHT', 'Hasselt' ],
+ [ 'XAHI', 'Hatting' ],
+ [ 'XSHL', 'Hauptwil' ],
+ [ 'XAHAS', 'Haus' ],
+ [ 'XFHA', 'Hayange' ],
+ [ 'XFHZ', 'Hazebrouck' ],
+ [ 'XDHED', 'Hedehusene' ],
+ [ 'XDHEE', 'Hee' ],
+ [ 'XSHR', 'Heerbrugg' ],
+ [ 'XNHR', 'Heerenveen' ],
+ [ 'XNH', 'Heerlen' ],
+ [ 'XNHK', 'Heerlen d Kissel' ],
+ [ 'XMXHY', 'Hegyeshal Gr AT' ],
+ [ 'XMHY', 'Hegyeshalom' ],
+ [ 'XAHP', 'Heiterw-Plansee' ],
+ [ 'XNHM', 'Helmond' ],
+ [ 'XFHE', 'Hendaye' ],
+ [ 'XSHE', 'Hendschiken' ],
+ [ 'XNHL', 'Hengelo' ],
+ [ 'XFHB', 'Henin-Beaumont' ],
+ [ 'XDHEN', 'Henne' ],
+ [ 'XBHR', 'Herentals' ],
+ [ 'XBHE', 'Hergenrath' ],
+ [ 'XAHN', 'Hernals' ],
+ [ 'XFHN', 'Herny' ],
+ [ 'XFHH', 'Herrlisheim Colm' ],
+ [ 'XBHL', 'Herstal' ],
+ [ 'XBHZ', 'Herzele' ],
+ [ 'XSHZ', 'Herzogenbuchsee' ],
+ [ 'XAHB', 'Herzogenburg' ],
+ [ 'XNHO', 'Hillegom' ],
+ [ 'XNHI', 'Hilversum' ],
+ [ 'XNHIS', 'Hilversum Sp' ],
+ [ 'XDHM', 'Hjerm' ],
+ [ 'XTHN', 'Hnevice' ],
+ [ 'XFHC', 'Hochfelden' ],
+ [ 'XAHF', 'Hochfilzen' ],
+ [ 'XAHO', 'Hochzirl' ],
+ [ 'XBHO', 'Hoeilaart' ],
+ [ 'XDHT', 'Hoeje Taastrup' ],
+ [ 'XNHH', 'Hoek v. Holland' ],
+ [ 'XAHH', 'Hohenau' ],
+ [ 'XAHS', 'Hohenems' ],
+ [ 'XDHO', 'Holstebro' ],
+ [ 'XFHM', 'Hombourg Ht' ],
+ [ 'XNHD', 'Hoofddorp' ],
+ [ 'XNHG', 'Hoogeveen' ],
+ [ 'XNHS', 'Hoogezand-Sapp' ],
+ [ 'XAHG', 'Hopfgarten' ],
+ [ 'XAHGB', 'Hopfgarten / B' ],
+ [ 'XSHG', 'Horgen' ],
+ [ 'XSHB', 'Horn (Bodensee)' ],
+ [ 'XSHBS', 'Horn(Bodensee) S' ],
+ [ 'XTHB', 'Horni Blatna' ],
+ [ 'XTHD', 'Horni Dvoriste' ],
+ [ 'XTHK', 'Horni Kamenice' ],
+ [ 'XTHP', 'Horni Podluzi' ],
+ [ 'XTHPT', 'Horni Poustevna' ],
+ [ 'XTHV', 'Horovice' ],
+ [ 'XAHOG', 'Hörsching' ],
+ [ 'XTHR', 'Hradek n. N.' ],
+ [ 'XTHM', 'Hranice n Morave' ],
+ [ 'XTHY', 'Hrebeny' ],
+ [ 'XSHU', 'Hüntwangen-Wil' ],
+ [ 'XAHUT', 'Hüttau' ],
+ [ 'XBHU', 'Huy' ],
+ [ 'XDHVD', 'Hviding' ],
+ [ 'XDHYL', 'Hyllerslev' ],
+ [ 'XPIL', 'Ilawa Glowna' ],
+ [ 'XSIM', 'Immensee' ],
+ [ 'XIIM', 'Imperia PM' ],
+ [ 'XAIB', 'Imsterberg' ],
+ [ 'XAIP', 'Imst-Pitztal' ],
+ [ 'XBIM', 'Ingelmunster' ],
+ [ 'XFIW', 'Ingwiller' ],
+ [ 'XAI', 'Innsbruck Hbf' ],
+ [ 'XAIH', 'Innsbruck Höttg' ],
+ [ 'XAIW', 'Innsbruck Westbf' ],
+ [ 'XPIW', 'Inowroclaw' ],
+ [ 'XSIO', 'Interlaken Ost' ],
+ [ 'XSI', 'Interlaken West' ],
+ [ 'XAIZ', 'Inzing' ],
+ [ 'XEIR', 'Irun' ],
+ [ 'XFIS', 'Is sur Tille' ],
+ [ 'XIIT', 'Iselle di Trasqu' ],
+ [ 'XIXIT', 'Iselle Grenze CH' ],
+ [ 'XRIG', 'Ivanic Grad' ],
+ [ 'XTJP', 'Jablonne / P' ],
+ [ 'XDJP', 'Janderup' ],
+ [ 'XPJZ', 'Jankowa Zaganska' ],
+ [ 'XTJU', 'Janovice n Uh' ],
+ [ 'XAJD', 'Jedlersdorf' ],
+ [ 'XTJL', 'Jedlova' ],
+ [ 'XDJE', 'Jegum' ],
+ [ 'XPJG', 'Jelenia Gora' ],
+ [ 'XBJ', 'Jemelle' ],
+ [ 'XAJB', 'Jenbach' ],
+ [ 'XAJBZ', 'Jenbach Zillert' ],
+ [ 'XZJ', 'Jesenice' ],
+ [ 'XSJE', 'Jestetten' ],
+ [ 'XFJM', 'Jeumont' ],
+ [ 'XTJD', 'Jiretin pod Jedl' ],
+ [ 'XTJI', 'Jirkov z.' ],
+ [ 'XFJF', 'Joeuf' ],
+ [ 'XFJY', 'Joigny' ],
+ [ 'XAJ', 'Judenburg' ],
+ [ 'XFJU', 'Juvisy' ],
+ [ 'XTKA', 'Kadan' ],
+ [ 'XSKI', 'Kaiseraugust' ],
+ [ 'XFKH', 'Kalhausen' ],
+ [ 'XAKAL', 'Kalsdorf' ],
+ [ 'XAK', 'Kalwang' ],
+ [ 'XNKM', 'Kampen Zuid' ],
+ [ 'XSKA', 'Kandersteg' ],
+ [ 'XAKP', 'Kapfenberg' ],
+ [ 'XTKVD', 'Karlovy V dol.n.' ],
+ [ 'XTKV', 'Karlovy Vary' ],
+ [ 'XTKVV', 'Karlovy V-Dvory' ],
+ [ 'XPKA', 'Katowice Osobowa' ],
+ [ 'XLKT', 'Kautenbach' ],
+ [ 'XSKH', 'Kehlhof' ],
+ [ 'XMK', 'Kelebia' ],
+ [ 'XMBL', 'Kelenföld' ],
+ [ 'XAKM', 'Kematen/Tirol' ],
+ [ 'XSKW', 'Kesswil' ],
+ [ 'XNKE', 'Kesteren' ],
+ [ 'XSKB', 'Kilchberg' ],
+ [ 'XSKS', 'Killwangen-S' ],
+ [ 'XAKB', 'Kindberg' ],
+ [ 'XAKG', 'Kirchberg i.T.' ],
+ [ 'XAKL', 'Kirchbichl' ],
+ [ 'XAKIT', 'Kittsee' ],
+ [ 'XAKIH', 'Kitz / Hahnenk' ],
+ [ 'XAKI', 'Kitzbühel' ],
+ [ 'XAKT', 'Klagenfurt Hbf' ],
+ [ 'XTKY', 'Klatovy' ],
+ [ 'XAKE', 'Kledering' ],
+ [ 'XAKS', 'Klein Schwechat' ],
+ [ 'XLKB', 'Kleinbettingen' ],
+ [ 'XSKT', 'Kloten' ],
+ [ 'XAKF', 'Knittelfeld' ],
+ [ 'XSKO', 'Koblenz CH' ],
+ [ 'XDKH', 'Koebenhavn H' ],
+ [ 'XDKHL', 'Koebenhvs Lufthv' ],
+ [ 'XDKG', 'Koege' ],
+ [ 'XFKO', 'Kogenheim' ],
+ [ 'XAKO', 'Kolbnitz' ],
+ [ 'XDKO', 'Kolding' ],
+ [ 'XTKI', 'Kolin' ],
+ [ 'XMKO', 'Komarom' ],
+ [ 'XPKN', 'Konin' ],
+ [ 'XNKB', 'Koog Bloemwijk' ],
+ [ 'XNKZ', 'Koog-Zaandijk' ],
+ [ 'XMKR', 'Körmend' ],
+ [ 'XDKS', 'Korsoer' ],
+ [ 'XBKO', 'Kortenberg' ],
+ [ 'XBKK', 'Kortrijk' ],
+ [ 'XPK', 'Kostrzyn' ],
+ [ 'XTKO', 'Kovarska' ],
+ [ 'XPKR', 'Krakow Gl Osob' ],
+ [ 'XTKRP', 'Kralovske Porici' ],
+ [ 'XTKR', 'Kralupy n.Vl.' ],
+ [ 'XAKA', 'Kranebitten' ],
+ [ 'XZKJ', 'Kranj' ],
+ [ 'XTKC', 'Kraslice' ],
+ [ 'XTKP', 'Kraslice p Vlek' ],
+ [ 'XTKCP', 'Kraslice Predm' ],
+ [ 'XTKLP', 'Krasna Lipa' ],
+ [ 'XTKLM', 'Krasna Lipa mest' ],
+ [ 'XAKD', 'Krems(Donau)' ],
+ [ 'XSKRB', 'Kreuzl.Bernrain' ],
+ [ 'XSKR', 'Kreuzlingen' ],
+ [ 'XSKL', 'Kreuzlingen Haf.' ],
+ [ 'XAKK', 'Krichdorf a d Kr' ],
+ [ 'XFKM', 'Krimmeri-Meinau' ],
+ [ 'XTKM', 'Krimov' ],
+ [ 'XNKA', 'Krommenie-As' ],
+ [ 'XNKR', 'Kropswolde' ],
+ [ 'XZKR', 'Krsko' ],
+ [ 'XAKR', 'Krumpendorf' ],
+ [ 'XPKZG', 'Krzewina Zgorzel' ],
+ [ 'XPKY', 'Krzyz' ],
+ [ 'XAKU', 'Kuchl' ],
+ [ 'XAKN', 'Kufstein' ],
+ [ 'XAKUN', 'Kundl' ],
+ [ 'XPKU', 'Kunowice' ],
+ [ 'XSKN', 'Küssnacht a R' ],
+ [ 'XRKU', 'Kutina' ],
+ [ 'XPKT', 'Kutno' ],
+ [ 'XYKU', 'Kuty' ],
+ [ 'XTKT', 'Kytlice' ],
+ [ 'XFLBS', 'La Bastide S L' ],
+ [ 'XFWBI', 'La Brigue' ],
+ [ 'XFLAT', 'La Charite' ],
+ [ 'XFGPL', 'La Plaine' ],
+ [ 'XFLRY', 'La Roche s Yon' ],
+ [ 'XFLST', 'La Souterraine' ],
+ [ 'XALAA', 'Laa a d Thaya' ],
+ [ 'XSLH', 'Lachen' ],
+ [ 'XNZLW', 'Lage Zwaluwe' ],
+ [ 'XALN', 'Lähn' ],
+ [ 'XFLAE', 'L\'Aigle' ],
+ [ 'XLLM', 'Lamadelaine' ],
+ [ 'XALB', 'Lambach' ],
+ [ 'XSLMC', 'Lamone-Cadempino' ],
+ [ 'XALE', 'Landeck' ],
+ [ 'XBLD', 'Landen' ],
+ [ 'XNLG', 'Landgraaf' ],
+ [ 'XSLQ', 'Landquart' ],
+ [ 'XFLA', 'Landry' ],
+ [ 'XBLO', 'Langdorp' ],
+ [ 'XALA', 'Langen a.Arlberg' ],
+ [ 'XSLT', 'Langenthal' ],
+ [ 'XALK', 'Langkampfen' ],
+ [ 'XSLL', 'Läufelfingen' ],
+ [ 'XSLF', 'Laufen' ],
+ [ 'XSLN', 'Laufenburg' ],
+ [ 'XSLA', 'Lausanne' ],
+ [ 'XSLAF', 'Lausanne-Flon' ],
+ [ 'XSLS', 'Lausen' ],
+ [ 'XALAH', 'Lauterach' ],
+ [ 'XFLTG', 'Lauterbourg' ],
+ [ 'XILVM', 'Laveno Mombello' ],
+ [ 'XFLB', 'Le Bourget' ],
+ [ 'XFLC', 'Le Creusot TGV' ],
+ [ 'XFHV', 'Le Havre' ],
+ [ 'XFLM', 'Le Mans' ],
+ [ 'XFRVM', 'Le Raincy' ],
+ [ 'XFTP', 'Le Treport Mers' ],
+ [ 'XBLK', 'Lebbeke' ],
+ [ 'XNLW', 'Leeuwarden' ],
+ [ 'XPLE', 'Legnica' ],
+ [ 'XALZ', 'Leibnitz' ],
+ [ 'XNL', 'Leiden' ],
+ [ 'XNLL', 'Leiden Lamme' ],
+ [ 'XALT', 'Leithen' ],
+ [ 'XNLY', 'Lelystad' ],
+ [ 'XDLM', 'Lem' ],
+ [ 'XALND', 'Lend' ],
+ [ 'XSLW', 'Lengwil' ],
+ [ 'XFLN', 'Lens' ],
+ [ 'XSLB', 'Lenzburg' ],
+ [ 'XALEZ', 'Lenzing' ],
+ [ 'XALO', 'Leoben Hbf' ],
+ [ 'XALG', 'Leogang' ],
+ [ 'XBLB', 'Leopoldsburg' ],
+ [ 'XALM', 'Lermoos' ],
+ [ 'XFLE', 'Lerouville' ],
+ [ 'XFLAC', 'Les Arcs' ],
+ [ 'XFAO', 'Les-Aubrais-Orl' ],
+ [ 'XZLB', 'Lesce-Bled' ],
+ [ 'XLLD', 'Leudelange' ],
+ [ 'XSLE', 'Leuk' ],
+ [ 'XBLE', 'Leuven' ],
+ [ 'XFLZ', 'Lezignan (Aude)' ],
+ [ 'XTL', 'Liberec' ],
+ [ 'XBLIG', 'Liege (G)' ],
+ [ 'XALI', 'Lienz' ],
+ [ 'XBLI', 'Liers' ],
+ [ 'XSLI', 'Liestal' ],
+ [ 'XALZN', 'Liezen' ],
+ [ 'XFLI', 'Lille' ],
+ [ 'XFLIE', 'Lille Europa' ],
+ [ 'XILMN', 'Limone' ],
+ [ 'XAL', 'Linz Hbf' ],
+ [ 'XALW', 'Linz Wegscheid' ],
+ [ 'XPLIL', 'Lipinki Luzyckie' ],
+ [ 'XTLL', 'Lipova Sluknova' ],
+ [ 'XZLJ', 'Litija' ],
+ [ 'XTLM', 'Litomerice Mesto' ],
+ [ 'XILI', 'Livorno Centrale' ],
+ [ 'XZL', 'Ljubljana' ],
+ [ 'XSLC', 'Locarno' ],
+ [ 'XALH', 'Lochau-Hoerbranz' ],
+ [ 'XDLF', 'Loeftgard' ],
+ [ 'XMLO', 'Lököshaza' ],
+ [ 'XFLNG', 'Longueau' ],
+ [ 'XFLY', 'Longwy' ],
+ [ 'XFLS', 'Lons-Le-Saunier' ],
+ [ 'XALDF', 'Loosdorf' ],
+ [ 'XFLR', 'Lorraine-Louv' ],
+ [ 'XSLO', 'Lottstetten' ],
+ [ 'XFLO', 'Lourches' ],
+ [ 'XFL', 'Lourdes' ],
+ [ 'XTLO', 'Lovosice' ],
+ [ 'XPLU', 'Luban Slaski' ],
+ [ 'XALU', 'Ludesch' ],
+ [ 'XSL', 'Lugano' ],
+ [ 'XTLS', 'Luh n Svatavou' ],
+ [ 'XIL', 'Luino' ],
+ [ 'XFLUQ', 'Lumes' ],
+ [ 'XDLUN', 'Lundby' ],
+ [ 'XDLD', 'Lunde DK' ],
+ [ 'XDLU', 'Lunderskov' ],
+ [ 'XFLUN', 'Lunel' ],
+ [ 'XFLU', 'Luneville' ],
+ [ 'XSLP', 'Lupfig' ],
+ [ 'XALUU', 'Lustenau' ],
+ [ 'XSLZ', 'Luterbach-Attish' ],
+ [ 'XFLUB', 'Lutterbach' ],
+ [ 'XFLT', 'Lutzelbourg' ],
+ [ 'XLL', 'Luxembourg' ],
+ [ 'XSLU', 'Luzern' ],
+ [ 'XFLPD', 'Lyon Part-Dieu' ],
+ [ 'XAL K', 'Lz-Kleinmünchen' ],
+ [ 'XNMA', 'Maassluis' ],
+ [ 'XNMT', 'Maastricht' ],
+ [ 'XTMC', 'Machnin' ],
+ [ 'XTMR', 'Machnin hrad' ],
+ [ 'XFMCV', 'Macon Ville' ],
+ [ 'XFMAL', 'Macon-Loche-TGV' ],
+ [ 'XSMF', 'Maienfeld' ],
+ [ 'XAMS', 'Maishfn-Saalbach' ],
+ [ 'XTMV', 'Mala Velen' ],
+ [ 'XPMA', 'Malbork' ],
+ [ 'XPMAL', 'Malczyce' ],
+ [ 'XAMO', 'Mallnitz-Oberv.' ],
+ [ 'XVM', 'Malmö' ],
+ [ 'XLMR', 'Mamer' ],
+ [ 'XLMY', 'Mamer Lycee' ],
+ [ 'XSMM', 'Mammern(Bodens)' ],
+ [ 'XSMMS', 'Mammern(Bodens)S' ],
+ [ 'XBMA', 'Manage' ],
+ [ 'XSMB', 'Mannenbach' ],
+ [ 'XSMBS', 'Mannenbach S' ],
+ [ 'XLMN', 'Manternach' ],
+ [ 'XAMG', 'Marchegg' ],
+ [ 'XBMD', 'Marche-les-Dames' ],
+ [ 'XBMP', 'Marchienne-au-P' ],
+ [ 'XAMR', 'Marchtrenk' ],
+ [ 'XZM', 'Maribor' ],
+ [ 'XTMVE', 'Markvartice' ],
+ [ 'XFMSS', 'Marle-sur-Serre' ],
+ [ 'XBMR', 'Marloie' ],
+ [ 'XFMVC', 'Marne la Vallee' ],
+ [ 'XFMBL', 'Marseille Blanc' ],
+ [ 'XFM', 'Marseille-St-Ch' ],
+ [ 'XNMH', 'Martenshoek' ],
+ [ 'XSMA', 'Martigny' ],
+ [ 'XFMAG', 'Martigues' ],
+ [ 'XSMW', 'Märwil' ],
+ [ 'XAM', 'Matrei' ],
+ [ 'XFMB', 'Maubeuge' ],
+ [ 'XAMT', 'Mautern' ],
+ [ 'XAMY', 'Mayrhofen' ],
+ [ 'XBMCH', 'Mechelen' ],
+ [ 'XUM', 'Medias' ],
+ [ 'XSM', 'Meiringen' ],
+ [ 'XAME', 'Melk' ],
+ [ 'XSMS', 'Mels' ],
+ [ 'XFMEL', 'Melun' ],
+ [ 'XSME', 'Mendrisio' ],
+ [ 'XFME', 'Menton' ],
+ [ 'XSMEN', 'Menznau' ],
+ [ 'XIMM', 'Merano/Meran' ],
+ [ 'XBMER', 'Merchtem' ],
+ [ 'XBME', 'Merelbeke' ],
+ [ 'XLM', 'Mersch' ],
+ [ 'XLMT', 'Mertert' ],
+ [ 'XFMEH', 'Merxheim' ],
+ [ 'XAMD', 'Messendorf' ],
+ [ 'XFMZV', 'Metz-Ville' ],
+ [ 'XFMU', 'Meuse' ],
+ [ 'XLMC', 'Michelau' ],
+ [ 'XAMI', 'Micheldorf' ],
+ [ 'XDMF', 'Middelfart' ],
+ [ 'XPMIE', 'Miekinia' ],
+ [ 'XTMD', 'Mikulasovice d n' ],
+ [ 'XIMB', 'Milano C' ],
+ [ 'XIMG', 'Milano Greco P' ],
+ [ 'XIMP', 'Milano PG' ],
+ [ 'XBMM', 'Milmort' ],
+ [ 'XTMM', 'Mimon' ],
+ [ 'XAMN', 'Mining' ],
+ [ 'XFMI', 'Miramas' ],
+ [ 'XAMH', 'Mitterberghütten' ],
+ [ 'XAMV', 'Mitterdf-Veitsch' ],
+ [ 'XAMIX', 'Mixnitz-Bärensch' ],
+ [ 'XTMB', 'Ml Boleslav hl n' ],
+ [ 'XTMY', 'Mlyny (CZ)' ],
+ [ 'XFMOD', 'Modane' ],
+ [ 'XSMI', 'Möhlin' ],
+ [ 'XBML', 'Mol' ],
+ [ 'XSMOS', 'Mols' ],
+ [ 'XFMH', 'Mommenheim' ],
+ [ 'XFMC', 'Monaco-M.Carlo' ],
+ [ 'XIMW', 'Monguelfo/Welsbg' ],
+ [ 'XBMS', 'Mons' ],
+ [ 'XFMD', 'Montbeliard' ],
+ [ 'XFMN', 'Montelimar' ],
+ [ 'XSMY', 'Monthey' ],
+ [ 'XFMLV', 'Montlucon Ville' ],
+ [ 'XFMOM', 'Montmelian' ],
+ [ 'XFMND', 'Mont-Notre-Dame' ],
+ [ 'XFMO', 'Montpellier' ],
+ [ 'XSMO', 'Montreux' ],
+ [ 'XIMOZ', 'Monza' ],
+ [ 'XAMB', 'Moosbierbaum/H' ],
+ [ 'XFMOR', 'Moret-Veneux' ],
+ [ 'XSMG', 'Morges' ],
+ [ 'XFMOH', 'Morhange' ],
+ [ 'XCM', 'Moskva' ],
+ [ 'XMMO', 'Mosonmagyarovar' ],
+ [ 'XTMO', 'Most' ],
+ [ 'XAMTZ', 'Mötz' ],
+ [ 'XFMOU', 'Mouchard' ],
+ [ 'XFMSA', 'Moulins-s-Allier' ],
+ [ 'XBMN', 'Mouscron' ],
+ [ 'XBMT', 'Moustier' ],
+ [ 'XSMU', 'Moutier' ],
+ [ 'XFMT', 'Moutiers-Salins' ],
+ [ 'XFMG', 'Moyeuvre Grande' ],
+ [ 'XSMH', 'Mühlehorn' ],
+ [ 'XAMHM', 'Mühlheim' ],
+ [ 'XAMM', 'Mühl-Möllbrücke' ],
+ [ 'XBMU', 'Muizen' ],
+ [ 'XFMVD', 'Mulhouse Dornach' ],
+ [ 'XFMV', 'Mulhouse Ville' ],
+ [ 'XSMBU', 'Münchenbuchsee' ],
+ [ 'XFMUM', 'Mundolsheim' ],
+ [ 'XBMZ', 'Munkzwalm' ],
+ [ 'XLMB', 'Munsbach' ],
+ [ 'XSMUS', 'Münsingen CH' ],
+ [ 'XFMST', 'Munster FR' ],
+ [ 'XAMW', 'Münster-Wiesing' ],
+ [ 'XSMN', 'Münstlg-Scherz' ],
+ [ 'XSMUO', 'Muolen' ],
+ [ 'XSMR', 'Murg' ],
+ [ 'XAMZ', 'Mürzzuschlag' ],
+ [ 'XAMU', 'Musau' ],
+ [ 'XFMUS', 'Mussidan' ],
+ [ 'XSMT', 'Muttenz' ],
+ [ 'XDNV', 'Naestved' ],
+ [ 'XMNV', 'Nagymaros-Visegr' ],
+ [ 'XBNA', 'Namur' ],
+ [ 'XFNT', 'Nancois Tronvill' ],
+ [ 'XFN', 'Nancy' ],
+ [ 'XFNA', 'Nantes' ],
+ [ 'XINAC', 'Napoli C' ],
+ [ 'XFNB', 'Narbonne' ],
+ [ 'XSN', 'Nebikon' ],
+ [ 'XBN', 'Neerpelt' ],
+ [ 'XTNJ', 'Nejdek' ],
+ [ 'XTNJZ', 'Nejdek zast' ],
+ [ 'XFNP', 'Nemours-St-Pierr' ],
+ [ 'XAND', 'Nendeln' ],
+ [ 'XANE', 'Nenzing' ],
+ [ 'XBNE', 'Nessonvaux' ],
+ [ 'XTNT', 'Nestedice' ],
+ [ 'XTNM', 'Nestemice' ],
+ [ 'XANF', 'Nettingsdorf' ],
+ [ 'XSNC', 'Neuchatel' ],
+ [ 'XBNC', 'Neufchateau' ],
+ [ 'XFNE', 'Neufchateau' ],
+ [ 'XSNE', 'Neuhausen CH' ],
+ [ 'XSNK', 'Neukirch-Egnach' ],
+ [ 'XANK', 'Neumarkt-Kallham' ],
+ [ 'XANKD', 'Neumarkt-Köstend' ],
+ [ 'XANG', 'Neuratting' ],
+ [ 'XFNC', 'Nice Ville' ],
+ [ 'XSNB', 'Niederbipp' ],
+ [ 'XSNI', 'Niederglatt' ],
+ [ 'XLNK', 'Niederkorn' ],
+ [ 'XNNA', 'Nieuw Amsterdam' ],
+ [ 'XNNS', 'Nieuwe Schans' ],
+ [ 'XNNM', 'Nijmegen' ],
+ [ 'XFNI', 'Nimes' ],
+ [ 'XDNA', 'Noerre Alslev' ],
+ [ 'XDNN', 'Noerre-Nebel' ],
+ [ 'XDNP', 'Noerreport' ],
+ [ 'XLNZ', 'Noertzange' ],
+ [ 'XFNR', 'Nogent le Retrou' ],
+ [ 'XFNO', 'Noisy-le-Sec' ],
+ [ 'XFNDB', 'Notre Dame B' ],
+ [ 'XRNG', 'Nova Gradiska' ],
+ [ 'XRNK', 'Nova Kapela' ],
+ [ 'XTNR', 'Nova Role' ],
+ [ 'XTNRZ', 'Nova Role zast' ],
+ [ 'XINV', 'Novara' ],
+ [ 'XTNH', 'Nove Hamry' ],
+ [ 'XTNHZ', 'Nove Hamry zast' ],
+ [ 'XTNS', 'Nove Sedlo u Lok' ],
+ [ 'XYNZ', 'Nove Zamky' ],
+ [ 'XFNV', 'Noveant' ],
+ [ 'XJNB', 'Novi Beograd' ],
+ [ 'XJNS', 'Novi Sad' ],
+ [ 'XRNV', 'Novska' ],
+ [ 'XTNB', 'Novy Bor' ],
+ [ 'XPND', 'Nowe Drezdenko' ],
+ [ 'XFNY', 'Noyon' ],
+ [ 'XDNE', 'Ny Ellebjerg' ],
+ [ 'XDNY', 'Nyborg' ],
+ [ 'XMNH', 'Nyiregyhaza' ],
+ [ 'XDNK', 'Nykoebing F' ],
+ [ 'XTN', 'Nymburk hl.n.' ],
+ [ 'XAOA', 'Oberalm' ],
+ [ 'XSOG', 'Oberburg' ],
+ [ 'XSOB', 'Oberglatt' ],
+ [ 'XAOB', 'Oberhofen' ],
+ [ 'XLOK', 'Oberkorn' ],
+ [ 'XFOM', 'Obermodern' ],
+ [ 'XAOM', 'Obernberg-Alth' ],
+ [ 'XSOR', 'Oberrieden' ],
+ [ 'XSOT', 'Oberriet' ],
+ [ 'XBOB', 'Obourg' ],
+ [ 'XDOD', 'Odense' ],
+ [ 'XDOG', 'Oelgod' ],
+ [ 'XDKHO', 'Oerestad' ],
+ [ 'XFOE', 'Oermingen' ],
+ [ 'XDOP', 'Oesterport' ],
+ [ 'XLOE', 'Oetrange' ],
+ [ 'XDOB', 'Oksboel' ],
+ [ 'XROK', 'Okucani' ],
+ [ 'XNOD', 'Oldenzaal' ],
+ [ 'XTOL', 'Oldrichov u N' ],
+ [ 'XBOL', 'Olen' ],
+ [ 'XIOM', 'Olivetta S Mich' ],
+ [ 'XTO', 'Olomouc hl.n.' ],
+ [ 'XTOV', 'Olovi' ],
+ [ 'XSOL', 'Olten' ],
+ [ 'XNOM', 'Ommen' ],
+ [ 'XFO', 'Onville' ],
+ [ 'XBO', 'Oostende' ],
+ [ 'XPO', 'Opole Glowne' ],
+ [ 'XSOP', 'Oppikon' ],
+ [ 'XBOW', 'Opwijk' ],
+ [ 'XFOR', 'Orange' ],
+ [ 'XFOC', 'Orchies' ],
+ [ 'XDOH', 'Orehoved' ],
+ [ 'XFOL', 'Orleans' ],
+ [ 'XIOV', 'Orvieto' ],
+ [ 'XRO', 'Osijek' ],
+ [ 'XNO', 'Oss' ],
+ [ 'XSOM', 'Ostermundingen' ],
+ [ 'XTOH', 'Ostrava hl.n.' ],
+ [ 'XTOI', 'Ostrava-Svinov' ],
+ [ 'XPOM', 'Oswiecim' ],
+ [ 'XSOS', 'Othmarsingen' ],
+ [ 'XAOE', 'Ötztal' ],
+ [ 'XDOU', 'Outrup' ],
+ [ 'XNOV', 'Overveen' ],
+ [ 'XIPW', 'P.Gardena/Waidbr' ],
+ [ 'XDPA', 'Padborg' ],
+ [ 'XIPP', 'Padova' ],
+ [ 'XFPS', 'Pagny-s-Moselle' ],
+ [ 'XFPAN', 'Pantin' ],
+ [ 'XTPAR', 'Pardubice' ],
+ [ 'XFPMP', 'Paris Montparnas' ],
+ [ 'XFPN', 'Paris Nord' ],
+ [ 'XFPA', 'Paris-Austerlitz' ],
+ [ 'XFPO', 'Paris-Est' ],
+ [ 'XFPG', 'Paris-G-d-Lyon' ],
+ [ 'XFPSL', 'Paris-St-Lazare' ],
+ [ 'XAPD', 'Parndorf' ],
+ [ 'XAPT', 'Paternion-Feistr' ],
+ [ 'XAPA', 'Patsch' ],
+ [ 'XFPU', 'Pau' ],
+ [ 'XIPVI', 'Pavia' ],
+ [ 'XAPG', 'Peggau-Deutschf' ],
+ [ 'XFPTE', 'Peltre' ],
+ [ 'XBP', 'Pepinster' ],
+ [ 'XFPGX', 'Perigueux' ],
+ [ 'XTPEK', 'Pernink' ],
+ [ 'XFPE', 'Perpignan' ],
+ [ 'XIPDG', 'Peschiera d Gard' ],
+ [ 'XLP', 'Petange' ],
+ [ 'XAPK', 'Peterskirchen' ],
+ [ 'XFPTC', 'Petit Croix' ],
+ [ 'XSPF', 'Pfäffikon SZ' ],
+ [ 'XAPFW', 'Pfarrwerfen' ],
+ [ 'XAPL', 'Pflach' ],
+ [ 'XAPC', 'Pichl' ],
+ [ 'XPPN', 'Piensk' ],
+ [ 'XAPV', 'Pill-Vomperbach' ],
+ [ 'XSXPT', 'Pino Grenze IT' ],
+ [ 'XIPI', 'Pisa C' ],
+ [ 'XTPLA', 'Plesna' ],
+ [ 'XUPV', 'Ploiesti Vest' ],
+ [ 'XTPZ', 'Plzen hl.n.' ],
+ [ 'XAPN', 'Pöchlarn' ],
+ [ 'XFPT', 'Poitiers' ],
+ [ 'XTPI', 'Pomezi n O' ],
+ [ 'XFPM', 'Pont-a-Mousson' ],
+ [ 'XSPT', 'Pontresina' ],
+ [ 'XFPXE', 'Pont-Ste-Maxence' ],
+ [ 'XFPV', 'Pont-St-Vincent' ],
+ [ 'XIPD', 'Pordenone' ],
+ [ 'XFPR', 'Port Vendres' ],
+ [ 'XEPB', 'Port-Bou' ],
+ [ 'XAPW', 'Pörtschach a.W.' ],
+ [ 'XTPO', 'Potucky' ],
+ [ 'XTPOZ', 'Potucky zastavka' ],
+ [ 'XFPSU', 'Pougues-les-Eaux' ],
+ [ 'XPPG', 'Poznan Glowny' ],
+ [ 'XTP', 'Praha hl.n.' ],
+ [ 'XTPH', 'Praha-Holesovice' ],
+ [ 'XTPM', 'Praha-Smichov' ],
+ [ 'XTPV', 'Praha-Vrsovice' ],
+ [ 'XAPM', 'Pram-Haag' ],
+ [ 'XSPR', 'Pratteln' ],
+ [ 'XUP', 'Predeal' ],
+ [ 'XAPR', 'Pregarten' ],
+ [ 'XTPR', 'Prerov' ],
+ [ 'XAPRD', 'Prinzersdorf' ],
+ [ 'XBPO', 'Profondsart' ],
+ [ 'XPPRY', 'Przylep' ],
+ [ 'XZP', 'Ptuj' ],
+ [ 'XAPO', 'Puch-Oberalm' ],
+ [ 'XAPZ', 'Pusarnitz' ],
+ [ 'XBQ', 'Quevy' ],
+ [ 'XFQ', 'Quimper' ],
+ [ 'XARA', 'Radstadt' ],
+ [ 'XSRF', 'Rafz' ],
+ [ 'XARW', 'Rankweil' ],
+ [ 'XSRZ', 'Ranzo-S-Abbondio' ],
+ [ 'XARK', 'Rattenbg-Krams' ],
+ [ 'XIREC', 'Re' ],
+ [ 'XSRM', 'Rebstein-Marbach' ],
+ [ 'XFRD', 'Reding' ],
+ [ 'XERG', 'Redondela de Gal' ],
+ [ 'XSRC', 'Reichenbach Kt' ],
+ [ 'XSRE', 'Reichenburg' ],
+ [ 'XFRS', 'Reims' ],
+ [ 'XARE', 'Reith' ],
+ [ 'XDRE', 'Rejsby' ],
+ [ 'XARWL', 'Rekawinkel' ],
+ [ 'XSRN', 'Rekingen AG' ],
+ [ 'XFRF', 'Remelfing' ],
+ [ 'XFRM', 'Remilly' ],
+ [ 'XFRT', 'Remiremont' ],
+ [ 'XFR', 'Rennes' ],
+ [ 'XTRE', 'Retenice' ],
+ [ 'XAREZ', 'Retz' ],
+ [ 'XART', 'Reutte in Tirol' ],
+ [ 'XARTS', 'Reutte Schulz.' ],
+ [ 'XSRH', 'Rheineck' ],
+ [ 'XSRD', 'Rheinfelden' ],
+ [ 'XDRB', 'Ribe' ],
+ [ 'XDRBN', 'Ribe Noerremark' ],
+ [ 'XSRW', 'Richterswil' ],
+ [ 'XARI', 'Ried i Innkreis' ],
+ [ 'XARD', 'Riedenburg' ],
+ [ 'XARZ', 'Rietz' ],
+ [ 'XIRI', 'Rimini' ],
+ [ 'XDRG', 'Ringkoebing' ],
+ [ 'XDRI', 'Ringsted' ],
+ [ 'XIRP', 'Rio di Pusteria' ],
+ [ 'XSRB', 'Rivera-Bironico' ],
+ [ 'XFRV', 'Rivesaltes' ],
+ [ 'XFROA', 'Roanne' ],
+ [ 'XIRL', 'Robilante' ],
+ [ 'XIROV', 'Roccavione' ],
+ [ 'XLRD', 'Rodange' ],
+ [ 'XDR', 'Roedby F' ],
+ [ 'XDRO', 'Roedby Faerge' ],
+ [ 'XDRD', 'Roedekro' ],
+ [ 'XDRN', 'Roenne' ],
+ [ 'XFRSW', 'Roeschwoog' ],
+ [ 'XSRO', 'Roggwil-Berg' ],
+ [ 'XSRY', 'Roggwil-Wynau' ],
+ [ 'XARH', 'Rohr-Bad Hall' ],
+ [ 'XTRO', 'Rokycany' ],
+ [ 'XIRM', 'Roma Termini' ],
+ [ 'XSR', 'Romanshorn' ],
+ [ 'XSRHF', 'Romanshorn (See)' ],
+ [ 'XFRO', 'Rombas' ],
+ [ 'XBRO', 'Ronet' ],
+ [ 'XLRT', 'Roodt' ],
+ [ 'XNRD', 'Roosendaal' ],
+ [ 'XARP', 'Roppen' ],
+ [ 'XSRS', 'Rorschach' ],
+ [ 'XSRSH', 'Rorschach Hafen' ],
+ [ 'XSRSS', 'Rorschach Hf S' ],
+ [ 'XARB', 'Rosenbach' ],
+ [ 'XAXRB', 'Rosenbach Gr SI' ],
+ [ 'XDRK', 'Roskilde' ],
+ [ 'XTRV', 'Rotava' ],
+ [ 'XSRTB', 'Rothenburg' ],
+ [ 'XSRTT', 'Rothenthurm' ],
+ [ 'XSRR', 'Rothrist' ],
+ [ 'XSRK', 'Rotkreuz' ],
+ [ 'XNRL', 'Rotterd Lombardi' ],
+ [ 'XNRN', 'Rotterd Noord G' ],
+ [ 'XNRC', 'Rotterdam C' ],
+ [ 'XNRS', 'RotterdamStadion' ],
+ [ 'XTRN', 'Roudnice n Labem' ],
+ [ 'XFROU', 'Rouffach' ],
+ [ 'XIROT', 'Rovato' ],
+ [ 'XIRR', 'Rovereto' ],
+ [ 'XIRG', 'Rovigo' ],
+ [ 'XARU', 'Rum' ],
+ [ 'XJRU', 'Ruma' ],
+ [ 'XTRU', 'Rumburk' ],
+ [ 'XSRU', 'Rümlang' ],
+ [ 'XSRP', 'Rupperswil' ],
+ [ 'XSRL', 'Rüschlikon' ],
+ [ 'XTRS', 'Rusova' ],
+ [ 'XSRT', 'Rüthi SG' ],
+ [ 'XTRY', 'Rybniste' ],
+ [ 'XPR', 'Rzepin' ],
+ [ 'XFSAC', 'S Avre l Chambre' ],
+ [ 'XFSMV', 'S Michel Valloir' ],
+ [ 'XASPS', 'S Peter-Seitenst' ],
+ [ 'XISCI', 'S.Cand./Innichen' ],
+ [ 'XASA', 'Saalfelden' ],
+ [ 'XSSA', 'Safenwil' ],
+ [ 'XFSZE', 'Saincaize' ],
+ [ 'XFSAS', 'Saintes' ],
+ [ 'XBSG', 'Saint-Ghislain' ],
+ [ 'XSSZ', 'Salez-Sennwald' ],
+ [ 'XAAI', 'Salzb Aiglhof' ],
+ [ 'XASLF', 'Salzb Liefering' ],
+ [ 'XASBA', 'Salzburg Aigen' ],
+ [ 'XASB', 'Salzburg Hbf' ],
+ [ 'XASBP', 'Salzburg Parsch' ],
+ [ 'XASSA', 'Salzburg Sam' ],
+ [ 'XASBS', 'Salzburg Süd' ],
+ [ 'XASG', 'Salzburg-Gnigl' ],
+ [ 'XSSD', 'Samedan' ],
+ [ 'XSSMT', 'Samstagern' ],
+ [ 'XISAR', 'San Remo' ],
+ [ 'XLSC', 'Sandweiler-Cont' ],
+ [ 'XFSN', 'Sanry sur Nied' ],
+ [ 'XRXSJ', 'Sapjane Gr SI' ],
+ [ 'XNSO', 'Sappemeer Oost' ],
+ [ 'XSSR', 'Sargans' ],
+ [ 'XFSB', 'Sarrebourg' ],
+ [ 'XFSM', 'Sarreguemines' ],
+ [ 'XFSI', 'Sarreinsming' ],
+ [ 'XFSRI', 'Sathonay-Rilieux' ],
+ [ 'XFSUD', 'Saumur' ],
+ [ 'XFSV', 'Saverne' ],
+ [ 'XISAV', 'Savona Letimbro' ],
+ [ 'XAML', 'Sb Mülln-Altstdt' ],
+ [ 'XASVZ', 'Schaan-Vaduz' ],
+ [ 'XBS', 'Schaerbeek' ],
+ [ 'XSS', 'Schaffhsn CH' ],
+ [ 'XASFU', 'Schaftenau' ],
+ [ 'XASH', 'Schärding' ],
+ [ 'XAA', 'Scharnitz' ],
+ [ 'XNSE', 'Scheemda' ],
+ [ 'XNSC', 'Schiedam-Rott.W.' ],
+ [ 'XLSL', 'Schifflange' ],
+ [ 'XSSF', 'Schindellegi-F.' ],
+ [ 'XNSP', 'Schiphol' ],
+ [ 'XASL', 'Schladming' ],
+ [ 'XASBL', 'Schönbichl' ],
+ [ 'XASCH', 'Schönwies' ],
+ [ 'XLSW', 'Schouweiler' ],
+ [ 'XASN', 'Schruns' ],
+ [ 'XSSBU', 'Schübelb-Buttiko' ],
+ [ 'XBSU', 'Schulen' ],
+ [ 'XASW', 'Schwarzach-St.V.' ],
+ [ 'XASC', 'Schwaz' ],
+ [ 'XFSWM', 'Schwindratzheim' ],
+ [ 'XSSY', 'Schwyz' ],
+ [ 'XSST', 'Scuol-Tarasp' ],
+ [ 'XTSBZ', 'Sebuzin' ],
+ [ 'XAS', 'Seefeld in Tirol' ],
+ [ 'XASK', 'Seekirchen a W' ],
+ [ 'XDSE', 'Sejstrup' ],
+ [ 'XFSL', 'Selestat' ],
+ [ 'XASZ', 'Selzthal' ],
+ [ 'XISER', 'Seregno' ],
+ [ 'XISGI', 'Sesto S Giovanni' ],
+ [ 'XFSE', 'Sete' ],
+ [ 'XSSV', 'Sevelen' ],
+ [ 'XZSN', 'Sevnica' ],
+ [ 'XNSH', 's-Hertogenbosch' ],
+ [ 'XJSI', 'Sid' ],
+ [ 'XSSW', 'Siebnen-Wangen' ],
+ [ 'XSSH', 'Siegershausen' ],
+ [ 'XPSIZ', 'Sieniawa Zarska' ],
+ [ 'XFSIK', 'Sierck-les-Bains' ],
+ [ 'XSSI', 'Sierre/Siders' ],
+ [ 'XDSIG', 'Sig' ],
+ [ 'XUSG', 'Sighisoara' ],
+ [ 'XASIL', 'Sillian' ],
+ [ 'XASLZ', 'Silz' ],
+ [ 'XUSI', 'Simeria' ],
+ [ 'XUSN', 'Sinaia' ],
+ [ 'XSSN', 'Sion' ],
+ [ 'XSSC', 'Sissach' ],
+ [ 'XNSI', 'Sittard' ],
+ [ 'XDSB', 'Skaerbaek' ],
+ [ 'XDSJ', 'Skjern' ],
+ [ 'XZSL', 'Skofja Loka' ],
+ [ 'XDSGE', 'Slagelse' ],
+ [ 'XRSL', 'Slavonski Brod' ],
+ [ 'XPSLB', 'Slubice' ],
+ [ 'XTSLN', 'Sluknov' ],
+ [ 'XTSLZ', 'Sluknov Zastavka' ],
+ [ 'XCSM', 'Smolensk' ],
+ [ 'XNSK', 'Sneek' ],
+ [ 'XTSO', 'Sokolov' ],
+ [ 'XSSO', 'Solothurn' ],
+ [ 'XFSO', 'Somain' ],
+ [ 'XPSO', 'Sopot' ],
+ [ 'XMS', 'Sopron' ],
+ [ 'XDSOR', 'Soroe' ],
+ [ 'XPSI', 'Sosnowiec Glowny' ],
+ [ 'XBSP', 'Spa' ],
+ [ 'XDSP', 'Spangsbjerg' ],
+ [ 'XTSP', 'Spicak' ],
+ [ 'XASS', 'Spielfeld-Straß' ],
+ [ 'XSSP', 'Spiez' ],
+ [ 'XASPP', 'Spital am Pyhrn' ],
+ [ 'XASP', 'Spittal(Millst.)' ],
+ [ 'XRS', 'Split' ],
+ [ 'XJSM', 'Sr Mitrovica' ],
+ [ 'XFSDD', 'St Dalmas Tende' ],
+ [ 'XSSG', 'St Gallen' ],
+ [ 'XSSGW', 'St Gallen Winkel' ],
+ [ 'XSSGH', 'St Gallen-Haggen' ],
+ [ 'XFJ', 'St Jory' ],
+ [ 'XFSMA', 'St Malo' ],
+ [ 'XAJO', 'St. Jodok' ],
+ [ 'XSMZ', 'St. Moritz' ],
+ [ 'XAAB', 'St.Anton a.Arlbg' ],
+ [ 'XAAM', 'St.Anton i.M.' ],
+ [ 'XASJ', 'St.Johann i.P.' ],
+ [ 'XAJT', 'St.Johann i.T.' ],
+ [ 'XSSM', 'St.Margrethen' ],
+ [ 'XASE', 'St.Michael' ],
+ [ 'XAP', 'St.Pölten Hbf' ],
+ [ 'XASV', 'St.Valentin' ],
+ [ 'XAVG', 'St.Veit a.d.Glan' ],
+ [ 'XSSTA', 'Staad' ],
+ [ 'XASU', 'Stadlau' ],
+ [ 'XASRM', 'Stadt Rottenmann' ],
+ [ 'XFSTA', 'Staffelfelden' ],
+ [ 'XASI', 'Stainach-Irdning' ],
+ [ 'XFSAR', 'St-Amour' ],
+ [ 'XASTM', 'Stams' ],
+ [ 'XASTS', 'Stans(b Schwaz)' ],
+ [ 'XJSP', 'Stara Pazova' ],
+ [ 'XTSR', 'Stara Role' ],
+ [ 'XBSA', 'Statte' ],
+ [ 'XFSA', 'St-Avold' ],
+ [ 'XBSD', 'St-Denijs-B' ],
+ [ 'XSSB', 'Steckborn' ],
+ [ 'XSSBS', 'Steckborn S' ],
+ [ 'XNSW', 'Steenwijk' ],
+ [ 'XAST', 'Steinach i Tirol' ],
+ [ 'XFSNG', 'Steinbourg' ],
+ [ 'XASF', 'Steindorf-Straßw' ],
+ [ 'XSSU', 'Steinebrunn' ],
+ [ 'XSSK', 'Stein-Säckingen' ],
+ [ 'XFSF', 'Stephansfeld' ],
+ [ 'XSSE', 'Stettbach' ],
+ [ 'XASY', 'Steyr' ],
+ [ 'XFSGF', 'St-Germ-d-Fosses' ],
+ [ 'XFSG', 'St-Gervais' ],
+ [ 'XFSHT', 'St-Hilaire-au-T' ],
+ [ 'XFJL', 'St-Jean-de-Luz' ],
+ [ 'XFJMA', 'St-Jean-d-Maur' ],
+ [ 'XFSTL', 'St-Louis' ],
+ [ 'XSMC', 'St-Maurice' ],
+ [ 'XASRA', 'Stockerau' ],
+ [ 'XFPY', 'St-Pierre-d\'Alb' ],
+ [ 'XFPDC', 'St-Pierre-d-C' ],
+ [ 'XFPL', 'St-Pol-de-Leon' ],
+ [ 'XFSP', 'St-Priest' ],
+ [ 'XFSQ', 'St-Quentin' ],
+ [ 'XFSR', 'St-Raphael-Vales' ],
+ [ 'XFSTG', 'Strasbourg' ],
+ [ 'XASTH', 'Straßhof' ],
+ [ 'XASR', 'Straßwalchen' ],
+ [ 'XISTA', 'Stresa' ],
+ [ 'XRSV', 'Striziv Vrpolje' ],
+ [ 'XDS', 'Struer' ],
+ [ 'XPSKW', 'Strzelce Kraj W' ],
+ [ 'XFSSL', 'St-Sulpice-Laur' ],
+ [ 'XYST', 'Sturovo' ],
+ [ 'XJST', 'Subotica' ],
+ [ 'XTS', 'Sucha' ],
+ [ 'XASUM', 'Summerau' ],
+ [ 'XSSUS', 'Sursee' ],
+ [ 'XFSVF', 'Survilliers Foss' ],
+ [ 'XASBN', 'Süssenbrunn' ],
+ [ 'XNSU', 'Susteren' ],
+ [ 'XTSV', 'Svatava' ],
+ [ 'XTSVZ', 'Svatava zast' ],
+ [ 'XTSVO', 'Svor' ],
+ [ 'XPSWB', 'Swiebodzin' ],
+ [ 'XPSM', 'Swinoujscie C' ],
+ [ 'XPSG', 'Szczecin Glowny' ],
+ [ 'XPSU', 'Szczecin Gu.' ],
+ [ 'XMSG', 'Szentgotthard' ],
+ [ 'XMSB', 'Szob' ],
+ [ 'XMXSB', 'Szob Gr SK' ],
+ [ 'XMSN', 'Szolnok' ],
+ [ 'XDKT', 'Taarnby' ],
+ [ 'XTT', 'Tabor' ],
+ [ 'XITG', 'Taggia' ],
+ [ 'XBTA', 'Tamines' ],
+ [ 'XFTA', 'Tarascon' ],
+ [ 'XDTAM', 'Tarm' ],
+ [ 'XITB', 'Tarvisio Boscov' ],
+ [ 'XIXTB', 'Tarvisio Gr AT' ],
+ [ 'XMTA', 'Tata' ],
+ [ 'XMTB', 'Tatabanya' ],
+ [ 'XATF', 'Taufkirchen Pram' ],
+ [ 'XDTA', 'Taulov' ],
+ [ 'XST', 'Taverne-Torric' ],
+ [ 'XATR', 'Taxenbach-Rauris' ],
+ [ 'XATX', 'Taxham' ],
+ [ 'XPTC', 'Tczew' ],
+ [ 'XSTE', 'Tecknau' ],
+ [ 'XATP', 'Telfs-Pfaffenhfn' ],
+ [ 'XFTE', 'Templeuve' ],
+ [ 'XFTND', 'Tende' ],
+ [ 'XATN', 'Tenneck' ],
+ [ 'XTTV', 'Teplic v Cechach' ],
+ [ 'XPTE', 'Terespol' ],
+ [ 'XPXTE', 'Terespol Gr BY' ],
+ [ 'XATW', 'Terfens-Weer' ],
+ [ 'XFTG', 'Tergnier' ],
+ [ 'XBTE', 'Testelt' ],
+ [ 'XFTT', 'Teting' ],
+ [ 'XFHP', 'TGV Hte Picardie' ],
+ [ 'XSTW', 'Thalwil' ],
+ [ 'XFTHV', 'Thionville' ],
+ [ 'XSTH', 'Thun' ],
+ [ 'XSTU', 'Thusis' ],
+ [ 'XFTB', 'Tieffenbach' ],
+ [ 'XBTI', 'Tienen' ],
+ [ 'XNT', 'Tilburg' ],
+ [ 'XDTM', 'Tim' ],
+ [ 'XDTI', 'Tinglev' ],
+ [ 'XATI', 'Tisis' ],
+ [ 'XTTI', 'Tisova u N' ],
+ [ 'XDTR', 'Tistrup' ],
+ [ 'XDTB', 'Tjaereborg' ],
+ [ 'XSTOA', 'Tobel-Affeltrang' ],
+ [ 'XDTO', 'Toender' ],
+ [ 'XDTON', 'Toender Nord' ],
+ [ 'XDTP', 'Tommerup' ],
+ [ 'XBTG', 'Tongeren' ],
+ [ 'XITUP', 'Torino P Susa' ],
+ [ 'XFTU', 'Toul' ],
+ [ 'XFTO', 'Toulon' ],
+ [ 'XFTM', 'Toulouse-Matabi' ],
+ [ 'XFTC', 'Tourcoing' ],
+ [ 'XBTO', 'Tournai' ],
+ [ 'XFTOU', 'Tournan' ],
+ [ 'XRT', 'Tovarnik' ],
+ [ 'XATRN', 'Traun' ],
+ [ 'XZT', 'Trbovlje' ],
+ [ 'XTTRB', 'Trebusice' ],
+ [ 'XATA', 'Treibach-Althf' ],
+ [ 'XDTRK', 'Trekroner' ],
+ [ 'XVTF', 'Trelleborg F' ],
+ [ 'XITR', 'Trento' ],
+ [ 'XITS', 'Treviso Centrale' ],
+ [ 'XAT', 'Trieben' ],
+ [ 'XATK', 'Trimmelkam-Ost.' ],
+ [ 'XLTV', 'Troisvierges' ],
+ [ 'XBT', 'Trooz' ],
+ [ 'XATS', 'Tschagguns' ],
+ [ 'XATU', 'Tulln' ],
+ [ 'XATD', 'Tullnerfeld' ],
+ [ 'XPTU', 'Tuplice' ],
+ [ 'XPTUD', 'Tuplice Debinka' ],
+ [ 'XSTG', 'Turgi' ],
+ [ 'XPTY', 'Tychy' ],
+ [ 'XFUC', 'Uckange' ],
+ [ 'XIU', 'Udine' ],
+ [ 'XNUI', 'Uitgeest' ],
+ [ 'XDUF', 'Ulfborg' ],
+ [ 'XAUH', 'Ulmerfeld-Hausme' ],
+ [ 'XAU', 'Ulrichsbr-Füssen' ],
+ [ 'XAUS', 'Unterberg-Stefbr' ],
+ [ 'XSUT', 'Unterterzen' ],
+ [ 'XAUM', 'Unzmarkt' ],
+ [ 'XTUS', 'Usti n L-Strekov' ],
+ [ 'XTU', 'Usti n.L. hl.n.' ],
+ [ 'XTUZ', 'Usti n.L. zapad' ],
+ [ 'XNU', 'Utrecht C' ],
+ [ 'XSUW', 'Uttwil' ],
+ [ 'XMV', 'Vac' ],
+ [ 'XFVAR', 'Vaires' ],
+ [ 'XDVAL', 'Valby' ],
+ [ 'XIVO', 'Valdaora-Anters' ],
+ [ 'XTVA', 'Valdek' ],
+ [ 'XFVDR', 'Val-de-Reuil' ],
+ [ 'XFVC', 'Valence' ],
+ [ 'XFVCV', 'Valence-TGV' ],
+ [ 'XFVA', 'Valenciennes' ],
+ [ 'XNVB', 'Valkenburg (NL)' ],
+ [ 'XDVA', 'Vamdrup' ],
+ [ 'XAVA', 'Vandans' ],
+ [ 'XFVN', 'Varangeville' ],
+ [ 'XDVR', 'Varde' ],
+ [ 'XDVRK', 'Varde Kaserne' ],
+ [ 'XDVRN', 'Varde Nord' ],
+ [ 'XDVRW', 'Varde Vest' ],
+ [ 'XTSVD', 'Varns stare' ],
+ [ 'XTVD', 'Varnsdorf' ],
+ [ 'XTVK', 'Varnsdorf piv Ko' ],
+ [ 'XNVK', 'Veenendaal K' ],
+ [ 'XTVY', 'Vejprty' ],
+ [ 'XAVE', 'Velden a.W.' ],
+ [ 'XTVZ', 'Velke Zernoseky' ],
+ [ 'XTVV', 'Velky Senov' ],
+ [ 'XTVVZ', 'Velky Senov zast' ],
+ [ 'XDVE', 'Vemb' ],
+ [ 'XFVH', 'Vendenheim' ],
+ [ 'XIVNM', 'Venezia Mestre' ],
+ [ 'XIVNS', 'Venezia S.Lucia' ],
+ [ 'XFVE', 'Venissieux' ],
+ [ 'XNVL', 'Venlo' ],
+ [ 'XIVT', 'Ventimiglia' ],
+ [ 'XIVE', 'Vercelli' ],
+ [ 'XIVNN', 'Vernante' ],
+ [ 'XFVEA', 'Verneuil-sur-Avr' ],
+ [ 'XFVEE', 'Vernieul l\'Etang' ],
+ [ 'XFVNO', 'Vernon' ],
+ [ 'XIVP', 'Verona PN' ],
+ [ 'XBVC', 'Verviers-Central' ],
+ [ 'XBVP', 'Verviers-Palais' ],
+ [ 'XTVER', 'Vesele Rabstejn' ],
+ [ 'XCV', 'Viazma' ],
+ [ 'XDVSJ', 'Viby Sjaelland' ],
+ [ 'XIVC', 'Vicenza' ],
+ [ 'XFVI', 'Vienne' ],
+ [ 'XFVVA', 'Vievola' ],
+ [ 'XTVL', 'Vilemov Sluknova' ],
+ [ 'XIVL', 'Villa Literno' ],
+ [ 'XIVB', 'Villab./Niederdf' ],
+ [ 'XAVH', 'Villach Hbf' ],
+ [ 'XAVW', 'Villach Westbf' ],
+ [ 'XFVD', 'Villars l Dombes' ],
+ [ 'XFVDS', 'Villedieu-les-Po' ],
+ [ 'XFVR', 'Villers-Cotter' ],
+ [ 'XFVG', 'Villiers Bel Gon' ],
+ [ 'XAV', 'Vils' ],
+ [ 'XBVV', 'Vilvoorde' ],
+ [ 'XRVI', 'Vinkovci' ],
+ [ 'XIVS', 'Vipit./Sterzing' ],
+ [ 'XDVY', 'Visby' ],
+ [ 'XBV', 'Vise' ],
+ [ 'XSVI', 'Visp' ],
+ [ 'XFVV', 'Vitry-La-Ville' ],
+ [ 'XFVF', 'Vitry-L-Francois' ],
+ [ 'XFVT', 'Vittel' ],
+ [ 'XNVD', 'Vlaardingen Cent' ],
+ [ 'XNVT', 'Vleuten' ],
+ [ 'XNVI', 'Vlissingen' ],
+ [ 'XAVB', 'Vöcklabruck' ],
+ [ 'XAVM', 'Vöcklamarkt' ],
+ [ 'XIVOG', 'Voghera' ],
+ [ 'XDV', 'Vojens' ],
+ [ 'XTV', 'Vojtanov' ],
+ [ 'XAVO', 'Volders-Baumk' ],
+ [ 'XAVL', 'Völs' ],
+ [ 'XDVB', 'Vordingborg' ],
+ [ 'XDVM', 'Vroegum' ],
+ [ 'XTVP', 'Vysoka Pec' ],
+ [ 'XSWW', 'Wädenswil' ],
+ [ 'XAWA', 'Wald Schoberpaß' ],
+ [ 'XSWA', 'Walenstadt' ],
+ [ 'XLWF', 'Walferdange' ],
+ [ 'XSWS', 'Wallisellen' ],
+ [ 'XAWV', 'Warmbad Villach' ],
+ [ 'XPWC', 'Warszawa C' ],
+ [ 'XPWW', 'Warszawa Wschod.' ],
+ [ 'XPWZ', 'Warszawa Zachod' ],
+ [ 'XAWBK', 'Wartberg a d Kr' ],
+ [ 'XAWB', 'Wartberg i.Mürz.' ],
+ [ 'XLW', 'Wasserbillig' ],
+ [ 'XBWA', 'Waterloo' ],
+ [ 'XBWM', 'Watermael' ],
+ [ 'XLWK', 'Wecker' ],
+ [ 'XNWT', 'Weert' ],
+ [ 'XNWS', 'Weesp' ],
+ [ 'XPWE', 'Wegliniec' ],
+ [ 'XSW', 'Weinfelden' ],
+ [ 'XBW', 'Welkenraedt' ],
+ [ 'XAWE', 'Wels Hbf' ],
+ [ 'XAWEN', 'Wendling' ],
+ [ 'XAWRF', 'Werfen' ],
+ [ 'XAWR', 'Wernstein' ],
+ [ 'XBWT', 'Wespelaar-Tildon' ],
+ [ 'XAWD', 'Westendorf AT' ],
+ [ 'XSWE', 'Wettingen' ],
+ [ 'XAWF', 'Wien F-J Bf' ],
+ [ 'XAWIF', 'Wien Flughafen' ],
+ [ 'XAWIE', 'Wien Hbf' ],
+ [ 'XAWIO', 'Wien Hbf ARZ' ],
+ [ 'XAWH', 'Wien Hütteldorf' ],
+ [ 'XAWG', 'Wien Meidling' ],
+ [ 'XAWMI', 'Wien Mitte' ],
+ [ 'XAWNP', 'Wien Praterstern' ],
+ [ 'XAWSG', 'Wien Simmering' ],
+ [ 'XAWW', 'Wien Westbf' ],
+ [ 'XAWNS', 'Wiener Neustadt' ],
+ [ 'XAWP', 'Wien-Penzing' ],
+ [ 'XSWI', 'Wil' ],
+ [ 'XAWI', 'Wildon' ],
+ [ 'XLWW', 'Wilwerwiltz' ],
+ [ 'XFWI', 'Wilwisheim' ],
+ [ 'XAWIG', 'Windischgarsten' ],
+ [ 'XFWM', 'Wingen-sur-Moder' ],
+ [ 'XNWI', 'Winschoten' ],
+ [ 'XNWW', 'Winterswijk' ],
+ [ 'XSWT', 'Winterthur' ],
+ [ 'XFWBG', 'Wissembourg' ],
+ [ 'XPWIT', 'Witnica' ],
+ [ 'XSWB', 'Wittenbach' ],
+ [ 'XFWT', 'Wittring' ],
+ [ 'XNWO', 'Woerden' ],
+ [ 'XSWO', 'Wohlen' ],
+ [ 'XFWY', 'Woippy' ],
+ [ 'XBWO', 'Wolfstee' ],
+ [ 'XAWT', 'Wolfurt' ],
+ [ 'XAWO', 'Wolkersdorf' ],
+ [ 'XAWL', 'Wörgl' ],
+ [ 'XNWM', 'Wormerveer' ],
+ [ 'XPWR', 'Wroclaw Glowny' ],
+ [ 'XPWRL', 'Wroclaw Lesnica' ],
+ [ 'XPWRD', 'Wroclaw Now Dwor' ],
+ [ 'XAY', 'Ybbs a.d.Donau' ],
+ [ 'XSY', 'Yverdon' ],
+ [ 'XBYG', 'Yves-Gomezee' ],
+ [ 'XRZD', 'Zadar' ],
+ [ 'XPZ', 'Zagan' ],
+ [ 'XZZG', 'Zagorje' ],
+ [ 'XRZ', 'Zagreb Gl.kol.' ],
+ [ 'XNZA', 'Zandvoort a.Zee' ],
+ [ 'XPZY', 'Zary' ],
+ [ 'XPZS', 'Zasieki' ],
+ [ 'XPZAW', 'Zawiercie' ],
+ [ 'XPZA', 'Zbaszynek' ],
+ [ 'XPZE', 'Zebrzydowa' ],
+ [ 'XPZD', 'Zebrzydowice' ],
+ [ 'XBZD', 'Zedelgem' ],
+ [ 'XBZ', 'Zeebrugge' ],
+ [ 'XTZRC', 'Zelezna Ruda C' ],
+ [ 'XTZR', 'Zelezna Ruda M' ],
+ [ 'XAZ', 'Zell am See' ],
+ [ 'XAZZ', 'Zell am Ziller' ],
+ [ 'XAZW', 'Zeltweg' ],
+ [ 'XSZE', 'Zermatt' ],
+ [ 'XFZ', 'Zetting' ],
+ [ 'XNZV', 'Zevenaar' ],
+ [ 'XPZG', 'Zgorzelec' ],
+ [ 'XPZGM', 'Zgorzelec Miasto' ],
+ [ 'XBZI', 'Zichem' ],
+ [ 'XZZM', 'Zidani most' ],
+ [ 'XSZB', 'Ziegelbrücke' ],
+ [ 'XPZIG', 'Zielona Gora' ],
+ [ 'XAZL', 'Zirl' ],
+ [ 'XTFS', 'Zirovice-Seniky' ],
+ [ 'XSZI', 'Zizers' ],
+ [ 'XSZG', 'Zofingen' ],
+ [ 'XBZO', 'Zolder' ],
+ [ 'XSZU', 'Zug CH' ],
+ [ 'XNZB', 'Zuidbroek' ],
+ [ 'XEZM', 'Zumarraga' ],
+ [ 'XSZN', 'Zürich Enge' ],
+ [ 'XSZF', 'Zürich Flughafen' ],
+ [ 'XSZH', 'Zürich HB' ],
+ [ 'XSZW', 'Zürich Wiedikon' ],
+ [ 'XSZWO', 'Zürich Wollishof' ],
+ [ 'XSZA', 'Zürich-Altst.' ],
+ [ 'XSZR', 'Zürich-Hardbr' ],
+ [ 'XSZO', 'Zürich-Oerlikon' ],
+ [ 'XSZP', 'Zürich-Opfikon' ],
+ [ 'XSZS', 'Zürich-Stadelhof' ],
+ [ 'XNZW', 'Zwijndrecht' ],
+ [ 'XNZL', 'Zwolle' ],
+
);
sub get_stations {
@@ -82,6 +1859,34 @@ sub get_station {
return get_station_by_name($name);
}
+sub get_station_by_location {
+ my ( $lon, $lat, $num_matches ) = @_;
+
+ $num_matches //= 10;
+
+ my $geo = Geo::Distance->new();
+
+ # we only use geolocations inside germany.
+ # For these, this fast preprocessing step will let through all
+ # coordinates inside a 60km radius (and a bunch which are farther out)
+ my @candidates = grep {
+ $#{$_} >= 4
+ and abs( $_->[3] - $lon ) < 1
+ and abs( $_->[4] - $lat )
+ < 1
+ } @stations;
+ my @distances
+ = map { $geo->distance( 'kilometer', $lon, $lat, $_->[3], $_->[4] ) }
+ @candidates;
+ my @station_map = pairwise { [ $a, $b ] } @candidates, @distances;
+
+ @station_map = sort { $a->[1] <=> $b->[1] } @station_map;
+ splice( @station_map, 10 );
+
+ return @station_map;
+}
+
+
sub get_station_by_name {
my ($name) = @_;
@@ -142,28 +1947,42 @@ version 0.00
=head1 DESCRIPTION
-This module contains a mapping of DeutscheBahn station names to station codes.
-A station name is a (perhaps slightly abbreviated) string naming a particular
-station; a station code is a two to five character denoting a station for the
-IRIS web service.
+This module contains a list of Deutsche Bahn stations, and also some stations
+outside of Germany which are served by Deutsche Bahn trains. It offers
+several accessors to look up stations based on names or geolocation data and
+can also simply dump all known stations.
-Example station names (code in parentheses) are:
-"Essen HBf" (EE), "Aachen Schanz" (KASZ), "Do UniversitE<auml>t" (EDUV).
+Each of the following methods returns a list of array references. Each
+array reference describes a single station and contains either two or
+five elements:
-B<Note:> Station codes may contain whitespace.
+=over
+
+=item * The station code (also known as DS100 / "Druckschrift 100" /
+"Richtlinie 100"). A short string used exclusively by Deutsche Bahn APIs. Note
+that it may contain space characters.
+
+=item * The station name
+
+=item * The international station number (IBNR, "Internationale Bahnhofsnummer")
+
+=item * The station's longitude
+
+=item * The station's latitude
+
+=back
=head1 METHODS
=over
-=item Travel::Status::DE::IRIS::get_stations
+=item Travel::Status::DE::IRIS::Stations::get_stations
-Returns a list of [station code, station name] listrefs lexically sorted by
-station name.
+Returns a list of all known stations, lexically sorted by station name.
-=item Travel::Status::DE::IRIS::get_station(I<$in>)
+=item Travel::Status::DE::IRIS::Stations::get_station(I<$in>)
-Returns a list of [station code, station name] listrefs matching I<$in>.
+Returns a list of stations matching I<$in>.
If a I<$in> is a valid station code, only one element ([I<$in>, related name])
is returned. Otherwise, it is passed to get_station_by_name(I<$in>) (see
@@ -171,16 +1990,27 @@ below).
Note that station codes matching is case sensitive and must be exact.
-=item Travel::Status::DE::IRIS::get_station_by_name(I<$name>)
+=item Travel::Status::DE::IRIS::Stations::get_station_by_location(I<$lon>, I<$lat>, I<$num_matches>)
+
+Looks for stations which are close to longitude/latitude I<$lon>/I<$lat> and
+returns the closest I<$num_matches> (defaults to 10) matches. Note that
+stations which are located more than 70 kilometers away from I<$lon>/I<$lat>
+may be ignored when computing the closest matches.
+
+Note that location-based lookup is only supported for stations inside Germany,
+since the station list data source does not provide geolocation data for
+non-german stations.
-Returns a list of [station code, station name] listrefs where the station
-name matches I<$name>.
+=item Travel::Status::DE::IRIS::Stations::get_station_by_name(I<$name>)
+
+Returns a list of stations where the station name matches I<$name>.
Matching happens in two steps: If a case-insensitive exact match exists, only
this one is returned. Otherwise, all stations whose name contains I<$name> as
-a substring (also case-insensitive) are returned.
+a substring (also case-insensitive) and all stations whose name has a low
+Levenshtein distance to I<$name> are returned.
-This two-step behaviour makes sure that not prefix-free stations can still be
+This two-step behaviour makes sure that not-prefix-free stations can still be
matched directly. For instance, both "Essen-Steele" and "Essen-Steele Ost"
are valid station names, but "essen-steele" will only return "Essen-Steele".
@@ -194,6 +2024,8 @@ None.
=over
+=item * Geo::Distance(3pm)
+
=item * List::MoreUtils(3pm)
=item * List::Util(3pm)
@@ -213,10 +2045,14 @@ Travel::Status::DE::IRIS(3pm).
=head1 AUTHOR
-Copyright (C) 2014-2015 by Daniel Friesel E<lt>derf@finalrewind.orgE<gt>
+Station data: Copyright (C) 2016 by DB Station&Service AG, Europaplatz 1, 10557 Berlin, Germany
+
+Lookup code: Copyright (C) 2014-2016 by Daniel Friesel E<lt>derf@finalrewind.orgE<gt>
=head1 LICENSE
-This module is licensed under the same terms as Perl itself.
+This module is licensed under the same terms as Perl itself. Note that the
+station data used by this module is also available under a CC-BY 4.0 license on
+L<http://data.deutschebahn.com/datasets/haltestellen/>.
EOF