Travel-Routing-DE-VRR-2.19000700001750001750 013653243021 14274 5ustar00derfderf000000000000Travel-Routing-DE-VRR-2.19/Build.PL000444001750001750 132513653243016 15744 0ustar00derfderf000000000000#!/usr/bin/env perl use strict; use warnings; use Module::Build; Module::Build->new( build_requires => { 'File::Slurp' => 0, 'Test::Compile' => 0, 'Test::Fatal' => 0, 'Test::More' => 0, 'Test::Pod' => 0, }, configure_requires => { 'Module::Build' => 0.40, }, module_name => 'Travel::Routing::DE::VRR', license => 'perl', requires => { 'perl' => '5.10.1', 'Class::Accessor' => 0, 'Exception::Class' => 0, 'Getopt::Long' => 0, 'List::Util' => 0, 'LWP::UserAgent' => 0, 'XML::LibXML' => 0, }, sign => 1, meta_merge => { resources => { repository => 'https://github.com/derf/Travel-Routing-DE-VRR' } }, )->create_build_script(); Travel-Routing-DE-VRR-2.19/Changelog000444001750001750 2147513653243016 16312 0ustar00derfderf000000000000Travel::Routing::DE::VRR 2.19 - Sat May 02 2020 * Switch from WTFPL to Perl license (GPL 1+ or Artistic) * Update VVO (Verkehrsverbund Oberelbe), VMV (Verkehrsgesellschaft Mecklenburg-Vorpommern) and VGN (Verkehrsverbund Grossraum Nürnberg) EFA urls * Add VAG (Freiburger Verkehrs AG), MVV (Münchner Verkehrs- und Tarifverbund), NVBW (Nahverkehrsgesellschaft Baden-Württemberg) services * Re-add Verbundlinie (Verkehrsverbund Steiermark) service * Remove IVB (Innsbrucker Verkehrsbetriebe) and VRNdelfi services as they are no longer available Travel::Routing::DE::VRR 2.18 - Wed Feb 26 2020 * Update KVV EFA URL Travel::Routing::DE::VRR 2.17 - Mon Apr 09 2018 * Handle routes containing cancelled connections * Allow date to be specified as 'tomorrow' Travel::Routing::DE::VRR 2.16 - Wed Jul 05 2017 * Fix encoding issues caused by recent API changes Travel::Routing::DE::VRR 2.15 - Sat Mar 04 2017 * Remove support for Vorarlberger Verkehrsverbund (VVV) backend (no longer working, apparently superseded by non-EFA software) * Update EFA URLs for Verkehrsverbund Rhein-Ruhr (VRR2) and Verkehrsverbund Rhein-Neckar (VRN) backends * Add support for Braunschweiger Verkehrs-GmbH (BSVG) Travel::Routing::DE::VRR 2.14 - Mon Oct 19 2015 * Remove support for the STV / Verbundlinie Steiermark EFA entry point (returns data with broken encoding) * Add VVO, VRN, VMV, KVV, TLEM and VBL EFA entry points Travel::Routing::DE::VRR 2.13 - Thu Jul 23 2015 * efa: Add -a / --accessibility option * efa: Add -B / --bike-info option * efa: Change --ignore-info default to ignore less when -a / -B is set * EFA->new: Add boolean config options with_low_platform, with_wheelchair, without_elevators, without_escalators and without_solid_stairs Travel::Routing::DE::VRR 2.12 - Thu Jun 25 2015 * Route::Part: Deprecate ->extra accessor. Use ->regular_notes instead * Route::Part: Add ->regular_notes and ->current_notes accessors. Note that current_notes is NOT STABLE yet. It may be change without further notice. * Route::Part: Add ->footpath_{duration,parts,type} accessors * efa: Show current route information provided by the EFA backend, such as cancelled stops or diversions. * efa -E: Show transfer walking duration when available * efa: Extend --ignore-info default (this option will probably be overhauled or removed in a future release) * Add Travel::Routing::DE::EFA::Route::Message module Travel::Routing::DE::VRR 2.11 - Sun Jun 14 2015 * efa: Fix encoding issues when using -w, -t, -d, -a and similar * Travel::Routing::DE::EFA::Route::Part: Add train_product accessor * Improve support for walking connections * Handle "nicht umsteigen" messages and other unusual connection types Travel::Routing::DE::VRR 2.10 - Fri May 29 2015 * efa: Changed -p/--proximity default walking time from 8 to 10 minutes * efa: The -p/--proximity option now takes an optional duration argument * EFA: use_near_stops now accepts an integer (interpreted as walking time in minutes) instead of a boolean value Travel::Routing::DE::VRR 2.09 - Fri Jan 09 2015 * Travel::Routing::DE::EFA::Exception::Ambiguous: Add post_value accessor which contains the ambiguous input value * Improve error messages * Add VRR2 and DING EFA services Travel::Routing::DE::VRR 2.08 - Wed Oct 08 2014 * efa: Add -l / --list option * efa: Add -s / --service option * Travel::Routing::DE::EFA::get_efa_urls() now returns a list of hashrefs * Documentation improvements Travel::Routing::DE::VRR 2.07 - Fri Aug 08 2014 * Add URLs for several austrian EFA services (pointed out by Gregor Herrmann) * Support EFA services which do not distinguish between scheduled and realtime data (also pointed out by Gregor Herrmann) * efa: Add -D/--discover option * efa: Add -A/--auto-url option * Travel::Routing::DE::EFA: Add get_efa_urls method * efa: Remove --post option from documentation (it has not been supported since version 1.04) Travel::Routing::DE::VRR 2.06 - Sat Aug 02 2014 * Route::Part: Add {arrival,departure}_{route,station}maps accessors * efa: Add -m / --maps option * Fix exclude / --exclude (didn't work at all previously, possibly because of a server-side API change) Travel::Routing::DE::VRR 2.05 - Mon Mar 03 2014 * Move all logic to Travel::Routing::DE::EFA and require an EFA url to be set. This way, any EFA service is supported. Travel::Routing::DE::VRR now calls ::EFA with the VRR url, so there are no backwards-incompatible changes * Improve error messages for missing route data and backend errors * Add option to specify maximum number of connections (efa -n) * efa: add -f / --full-route option * efa: add -u / --efa-url option Travel::Routing::DE::VRR 2.04 - Tue Jan 07 2014 * efa: Handle UTF8 in place/stop input * Travel::Routing::DE::VRR: Handle decoded input with non-ASCII characters Travel::Routing::DE::VRR 2.03 - Thu Jul 4 2013 * Disable smartmatch warnings on perl >= 5.018 Travel::Routing::DE::VRR 2.02 - Wed Apr 10 2013 * Patch by Roland Hieber: respect proxy environment variables Travel::Routing::DE::VRR 2.01 - Thu Jan 26 2012 * Fix bug in departure_stop_and_platform where the arrival_stop was used in case of unknown platforms * Document -E / --extended-info in efa(1) Travel::Routing::DE::VRR 2.00 - Sun Dec 11 2011 * Now uses the efa.vrr.de XML interface * properly decode UTF-8 strings [Travel::Routing::DE::VRR::Route] * new accessors: duration, ticket_type, fare_adult, fare_child and vehicle_time [Travel::Routing::DE::VRR::Route::Part] * arrival_stop and departure_stop no longer include the platform, use arrival_stop_and_platform / departure_stop_and_platform instead * New accessors: arrival_date, arrival_platform, arrival_sdate, arrival_stime, arrival_stop_and_platform, delay, departure_date, departure_platform, departure_sdate, departure_stime, departure_stop_and_platform, via * ->extra no longer contains information about delays, use ->delay instead [efa] * New -E / --extended-info option to display travel fares Travel::Routing::DE::VRR 1.06 - Sat Sep 17 2011 * Fix dependencies. We claimed to use WWW::Mechanize but in fact only need LWP::UserAgent Travel::Routing::DE::VRR 1.05 - Sun Jul 17 2011 * Documentation fixes (in a few places, the module was prefixed Travel::Status instead of the correct Travel::Routing) * Note that we need perl >= 5.10.1 because of the parent pragma [efa] * Fix connection error handler Travel::Routing::DE::VRR 1.04 - Wed Jun 29 2011 * efa: Remove --foo-type options, use --to city type:stop etc. instead * Introducing Travel::Routing::DE::VRR * New dependencies: Class::Accessor, Exception::Class efa 1.3 - Sun Jun 6 2010 * Rewrite efa parser using XML::LibXML (major performance improvement) * Detect more efa.vrr.de errors (no routes found, invalid input data, etc.) efa 1.2 - Sat Jun 5 2010 * Rewrite efa parser using HTML::TreeBuilder::XPath * Fixes information about late trains (was broken by efa.vrr.de changes) efa 1.1.2 - Wed May 12 2010 * Fix -v * Fix --date DD.MM. (was incorrectly rejected) * Fix support for empty --ignore-info * Add some more argument verification efa 1.1.1 - Mon Apr 26 2010 * Add short options efa 1.1 - Sun Jan 17 2010 * Code cleanup and DRY-ing * Add 'addr:foo' and 'poi:foo' as alternative to '--to-type poi' etc. efa 1.0.3 - Wed Dec 9 2009 * Further code cleanup * Fixes a minor unicode-related glitch in the output formatting efa 1.0.2 - Sat Sep 12 2009 * Code cleanup * --restrict is now --include efa 1.0.1 - Wed Jul 1 2009 * Fixed unicode handling (apparently efa.vrr.de got changed) * Added support for some rare connections without timestamps * --date: The year is now optional efa 1.0 - Sat May 23 2009 * Various parser improvements, especially for footways. * Added --walk-speed option * Added --bike option (take a bike with you) * Except for "Mobilitätseinstellungen", the efa.vrr.de interface is now completely supported efa 0.9.1 - Wed May 20 2009 * Added options: + --exclude - exclude certain train/transport types + --max-change - limit maximum number of interchanges + --prefer - prefer connections based on speed/interchanges/walking + --proximity - take near stops into account for start/stop efa 0.9 - Sat May 16 2009 * Accept from, to and via city and stops * Custom arrival/departure date/time * Print extra infos (late trains etc.) * Regex to ignore certain infos * Restrict trains to anything/anything without ICE/local Travel-Routing-DE-VRR-2.19/Dockerfile000444001750001750 117013653243016 16440 0ustar00derfderf000000000000FROM perl:5.30-slim COPY bin/ /app/bin/ COPY lib/ /app/lib/ COPY Build.PL cpanfile* /app/ WORKDIR /app ARG DEBIAN_FRONTEND=noninteractive RUN apt-get update \ && apt-get -y --no-install-recommends install ca-certificates curl gcc libc6-dev libssl1.1 libssl-dev libxml2 libxml2-dev make zlib1g-dev \ && cpanm -n --no-man-pages --installdeps . \ && perl Build.PL \ && perl Build \ && rm -rf ~/.cpanm \ && apt-get -y purge curl gcc libc6-dev libssl-dev libxml2-dev make zlib1g-dev \ && apt-get -y autoremove \ && apt-get -y clean \ && rm -rf /var/cache/apt/* /var/lib/apt/lists/* ENTRYPOINT ["perl", "-Ilib", "bin/efa"] Travel-Routing-DE-VRR-2.19/MANIFEST000444001750001750 202313653243016 15575 0ustar00derfderf000000000000.github/workflows/perl.yml bin/efa Build.PL Changelog cpanfile Dockerfile lib/Travel/Routing/DE/EFA.pm lib/Travel/Routing/DE/EFA/Exception.pod lib/Travel/Routing/DE/EFA/Route.pm lib/Travel/Routing/DE/EFA/Route/Message.pm lib/Travel/Routing/DE/EFA/Route/Part.pm lib/Travel/Routing/DE/VRR.pm MANIFEST This list of files provides/zsh/completions/_efa README scripts/check-efa-urls scripts/makedeb-docker scripts/makedeb-docker-helper t/20-vrr.t t/21-vrr.t t/in/ambiguous t/in/e_alf_d_hbf.xml t/in/e_hbf_b_hbf.ice t/in/e_hbf_b_hbf.xml t/in/e_hbf_d_hbf.json t/in/e_hbf_du_hbf.ice t/in/e_hbf_e_alfredusbad.json t/in/e_hbf_k_hbf.xml t/in/e_hbf_mh_hbf t/in/e_hbf_mh_hbf.xml t/in/e_martinstr_e_florastr t/in/e_werden_e_hbf t/in/invalid_input t/in/no_connections t/out/e_hbf_b_hbf.ice t/out/e_hbf_b_hbf.ice.ignore_all t/out/e_hbf_du_hbf.ice t/out/e_hbf_mh_hbf t/out/e_hbf_mh_hbf.ignore_none t/out/e_martinstr_e_florastr t/out/e_werden_e_hbf xt/00-compile-pm.t xt/01-compile-pl.t xt/10-pod.t META.yml META.json SIGNATURE Added here by Module::Build Travel-Routing-DE-VRR-2.19/META.json000444001750001750 410513653243016 16070 0ustar00derfderf000000000000{ "abstract" : "unofficial interface to the efa.vrr.de German itinerary service", "author" : [ "Copyright (C) 2009-2020 by Daniel Friesel Ederf@finalrewind.orgE" ], "dynamic_config" : 1, "generated_by" : "Module::Build version 0.4231", "license" : [ "perl_5" ], "meta-spec" : { "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", "version" : 2 }, "name" : "Travel-Routing-DE-VRR", "prereqs" : { "build" : { "requires" : { "File::Slurp" : "0", "Test::Compile" : "0", "Test::Fatal" : "0", "Test::More" : "0", "Test::Pod" : "0" } }, "configure" : { "requires" : { "Module::Build" : "0.4" } }, "runtime" : { "requires" : { "Class::Accessor" : "0", "Exception::Class" : "0", "Getopt::Long" : "0", "LWP::UserAgent" : "0", "List::Util" : "0", "XML::LibXML" : "0", "perl" : "v5.10.1" } } }, "provides" : { "Travel::Routing::DE::EFA" : { "file" : "lib/Travel/Routing/DE/EFA.pm", "version" : "2.19" }, "Travel::Routing::DE::EFA::Route" : { "file" : "lib/Travel/Routing/DE/EFA/Route.pm", "version" : "2.19" }, "Travel::Routing::DE::EFA::Route::Message" : { "file" : "lib/Travel/Routing/DE/EFA/Route/Message.pm", "version" : "2.19" }, "Travel::Routing::DE::EFA::Route::Part" : { "file" : "lib/Travel/Routing/DE/EFA/Route/Part.pm", "version" : "2.19" }, "Travel::Routing::DE::VRR" : { "file" : "lib/Travel/Routing/DE/VRR.pm", "version" : "2.19" } }, "release_status" : "stable", "resources" : { "license" : [ "http://dev.perl.org/licenses/" ], "repository" : { "url" : "https://github.com/derf/Travel-Routing-DE-VRR" } }, "version" : "2.19", "x_serialization_backend" : "JSON::PP version 4.04" } Travel-Routing-DE-VRR-2.19/META.yml000444001750001750 257613653243016 15732 0ustar00derfderf000000000000--- abstract: 'unofficial interface to the efa.vrr.de German itinerary service' author: - 'Copyright (C) 2009-2020 by Daniel Friesel Ederf@finalrewind.orgE' build_requires: File::Slurp: '0' Test::Compile: '0' Test::Fatal: '0' Test::More: '0' Test::Pod: '0' configure_requires: Module::Build: '0.4' dynamic_config: 1 generated_by: 'Module::Build version 0.4231, CPAN::Meta::Converter version 2.150010' license: perl meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.4.html version: '1.4' name: Travel-Routing-DE-VRR provides: Travel::Routing::DE::EFA: file: lib/Travel/Routing/DE/EFA.pm version: '2.19' Travel::Routing::DE::EFA::Route: file: lib/Travel/Routing/DE/EFA/Route.pm version: '2.19' Travel::Routing::DE::EFA::Route::Message: file: lib/Travel/Routing/DE/EFA/Route/Message.pm version: '2.19' Travel::Routing::DE::EFA::Route::Part: file: lib/Travel/Routing/DE/EFA/Route/Part.pm version: '2.19' Travel::Routing::DE::VRR: file: lib/Travel/Routing/DE/VRR.pm version: '2.19' requires: Class::Accessor: '0' Exception::Class: '0' Getopt::Long: '0' LWP::UserAgent: '0' List::Util: '0' XML::LibXML: '0' perl: v5.10.1 resources: license: http://dev.perl.org/licenses/ repository: https://github.com/derf/Travel-Routing-DE-VRR version: '2.19' x_serialization_backend: 'CPAN::Meta::YAML version 0.018' Travel-Routing-DE-VRR-2.19/README000444001750001750 116313653243016 15330 0ustar00derfderf000000000000efa - unofficial efa.vrr.de command line client ----------------------------------------------- * Dependencies ------------ * perl version 5.10.1 or newer * Class::Accessor * Exception::Class * LWP::UserAgent * XML::LibXML Installation ------------ From a release tarball: $ perl Build.PL $ ./Build $ sudo ./Build install From git: $ perl Build.PL $ ./Build $ ./Build manifest $ sudo ./Build install See also the Module::Build documentation. You can then run 'man Travel::Routing::DE::EFA'. This distribution also ships the script 'efa', see 'man efa'. Travel-Routing-DE-VRR-2.19/SIGNATURE000600001750001750 1303613653243021 15744 0ustar00derfderf000000000000This file contains message digests of all files listed in MANIFEST, signed via the Module::Signature module, version 0.83. To verify the content in this distribution, first make sure you have Module::Signature installed, then type: % cpansign -v It will check each file's integrity, as well as the signature's validity. If "==> Signature verified OK! <==" is not displayed, the distribution may already have been compromised, and you should not run its Makefile.PL or Build.PL. -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 SHA256 cef17fd8776c7a23968e4c92d2cfaa8586ace3db9ce96fca1169fc5a8d6caaec .github/workflows/perl.yml SHA256 cf57fe5cd06d00e402ebea3582e8301364a919e4d963c74ccfac8d7498213a88 Build.PL SHA256 aacb2c604070667f02aaea353787645fc15b2e35f7c2288ed9c467ba13139859 Changelog SHA256 045385ba57fe7c003c2a128ee69e5ea12f4f06553f4f51094aedf8323959f2a5 Dockerfile SHA256 ce262fd050ad698167fe96e08b5a9dcd64fe069567425890bb7a9e4ae7fd26e8 MANIFEST SHA256 daff9a3b1ce20b3bf9e36acd02b68b3d3f302a1bbeef3e998e061c573a5b7fa3 META.json SHA256 ee2d7bc2161b0c6f9f9e38a1761e9b1d701869ce50076c6099bd7d9afc71854e META.yml SHA256 9cc36d4f1cbe21ef7518d143cb00961850b52388109a24edf3a0a0956e7e46aa README SHA256 cc8a0bb3a9616afed9a103316ca1979a51fff5c590a9130456ef666f816cb8c6 bin/efa SHA256 c6c81a557fca2f5b774fe8c959e990c0d3f210516365640f7c5116542991eb10 cpanfile SHA256 e499be0bed46fc5be9353956adbd1da72ceb50ba5bc6fbae8da2ec9ecd9685ae lib/Travel/Routing/DE/EFA.pm SHA256 86ad873150313a878fdef5dd96ef99c0e0ea641a099aa6d3099a2819b42180b6 lib/Travel/Routing/DE/EFA/Exception.pod SHA256 dcd72ea6ab42a9d194f39f71bc3fc3d4f2d4860d41557026d6b167cbfd9c48a6 lib/Travel/Routing/DE/EFA/Route.pm SHA256 e81559c38a8adcb62ae420c04ac2a946fa90b68601ff090b3a325ee5017afcdf lib/Travel/Routing/DE/EFA/Route/Message.pm SHA256 0f5f75190c0a6170a80babb26da1b4711ec8b1a254d2d05fe4b51b8826cb71da lib/Travel/Routing/DE/EFA/Route/Part.pm SHA256 c15990240334a779cfd2e0b6ba375739b583f2202c60dc23b8d46fab334b2e8f lib/Travel/Routing/DE/VRR.pm SHA256 c16fbcf469b12f5c8afd22956ca414b811d0e3fad27d42ab8c56d2360e9c01fa provides/zsh/completions/_efa SHA256 d06fc16c71cbe5e17e86abf828c6c36ab4ec35470805c91dfa949d38a42dab85 scripts/check-efa-urls SHA256 b7deb1cbefe309472a52b1644db0a6be379e8ab660b12ee0a51c428a7a6d5773 scripts/makedeb-docker SHA256 bc98ec1673626bc427ed61c6b98fbb949c58d9fc32ae820e1b81ef7c04266ddc scripts/makedeb-docker-helper SHA256 83e2e16f418243a2f9fdfb5900ebd14b8c348aaaec43967685d313b68d9adc5a t/20-vrr.t SHA256 7e739cae9b6807c5ad1734418c07d3c416f181709f3c76eae0cd82ccfa73888e t/21-vrr.t SHA256 db6ba561e525fc0542bb8e5efe4d88407be8b01ba8f3c9461a539133787bacb4 t/in/ambiguous SHA256 cdae52a2c1481174a9c17b03b15d47b5b965a77b8c35051bc8219445a889c1db t/in/e_alf_d_hbf.xml SHA256 5db3997be329879902392677a4688b962295b60eafc8463157b79d18c5b45b87 t/in/e_hbf_b_hbf.ice SHA256 1e759adca6fc85c2f6cda7639946fa47d9bf80e116ec04e679f93a547c2132be t/in/e_hbf_b_hbf.xml SHA256 7adecef841521719f4d895ed08e9d37a2b6315daae9bcb80dde5c34772470fde t/in/e_hbf_d_hbf.json SHA256 2257b1eead4046687bd88cb31a93ed9dac6bb56e0a80cc27e999802597b1eb17 t/in/e_hbf_du_hbf.ice SHA256 e6968c963ca2636f367aace75e1587abc13141b9de331a1fff4aee44f3c87dc8 t/in/e_hbf_e_alfredusbad.json SHA256 87f92323044c0ca23ca36980e91cfc807317a1e11bcf17cf43a9b83f1c6eddce t/in/e_hbf_k_hbf.xml SHA256 fb98b637c8cdf7d26c9f3b87b893816ada83c97a6b3ce59d1cc037930d5c28e7 t/in/e_hbf_mh_hbf SHA256 0b0db15c60381e4e03cd0191a5c9bb432110631a8b310af2a4efa0c6b8fcf008 t/in/e_hbf_mh_hbf.xml SHA256 4793abc4100e09a159e7b0f859d412960df7830b6217521a4e92416cd7d54c90 t/in/e_martinstr_e_florastr SHA256 0cc28ab3ac1f4710dccc719e2acd81da3a368a2fe49eac4c0103c48143336f87 t/in/e_werden_e_hbf SHA256 e6ff6a6d567cb2aeefe70b79885b871701e1529e4bed5cd7513bbc9086d6fa59 t/in/invalid_input SHA256 d7ca5737c496f25ac4708ff6c3d8e23e22bc44b30b89998d393297065293e7e2 t/in/no_connections SHA256 a6f67f849a8190f1557591ef4fd2b0ba676cef3b56c3c941538acf54666c53b9 t/out/e_hbf_b_hbf.ice SHA256 e38826a8e363bc45a7eb001e12236fe911125186d5af28b5c6f7d20c3e387b40 t/out/e_hbf_b_hbf.ice.ignore_all SHA256 42ea208d472d0fe802e6c2a5cb0891666bb57a4f916b6277f6e4d98db049c1a3 t/out/e_hbf_du_hbf.ice SHA256 8212a4aae343b833b9d7cf3d6f9dbc9e849db0620381d29bc1e09b62d0361825 t/out/e_hbf_mh_hbf SHA256 692a64b4e4365b4217c5ae74241374b5c3cdb0408c59d973dfbbad859d05ecd8 t/out/e_hbf_mh_hbf.ignore_none SHA256 9b577a6d24259e5ecb49f2228be7529066b79a895e9accdc88d78c738282784f t/out/e_martinstr_e_florastr SHA256 c8e1af03131c80692ef4962bc13751dc58b92f86a603c839de7224e22e61cdfb t/out/e_werden_e_hbf SHA256 588a60b456403a9f2a901b11646918be3f2fe413d4b1b792dccd18a80bb264e9 xt/00-compile-pm.t SHA256 32c2f94b5292bcf6ef1994151a5d84b4581c5cf920418841c551d6f5489621cd xt/01-compile-pl.t SHA256 574e3508c4f991d21b61f06a070d71f04f4403b094f55423150cb5dbb18194a9 xt/10-pod.t -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEEeBu3Bxxr9kjq6wihEA1b+1Fm4AUFAl6tRg4ACgkQEA1b+1Fm 4AVDwxAAuJmVIQZU+zlgQQIMHSqIvdUIAt6EXbq+7kzL0fP/AUFH7MoxIatybnEy F/swoh84PrsdfM2xaETGKxZvpdfl9Vwv9N3rgPZYLlbViQ1jFQpxJ4zHORo6+24S Ba52Dvp19xp5mtMJK3vI8BPMpUI9TjCNQMDGxuZPVxEXU9shlo1ztd4aiLbdvA5Y XiXBuyrhDG2avSyn5ZX6j/56bWD+yEMFYy/l8ryyEto4QpB4UXO89deJXHCKCVoK CjtFllcQat7MY9RZEAtDPsDefdUT5uvbdzolhO2CCAQ7w3Ab/p5nUEW0kooMQkdI 8Zyatlvh+LcY+dg1+U2Ysh+0x90GmqdOwqQnmmBdv8UjJQ1GOh5Iq/WT+iHeRLrZ oKdBXePUf64VfO4BFM2BEC8ycekHcjOZUTp8s9SXjzl/plqdjDJ8a2H9Hljg6WsK IFW2SX8A7fmle8LguKwpFSAe7XnjWu9fFc8YsYUsNFjgKfggALY6T3XP6bvY/IuX +vi1aFG70dSYu+FfC8i7IvVsWJzIjCX8g6TF9/S1MYCxi44RACMe26I593GWKdV1 iJ4ifl4eZ5IgKx2W59U8piqkEOWN4VNnzrmzetDhcPZ4CtGyH/5Q6WCAnXNiUJzx UhhBqCiBYmBAQObVPJcHiXhHQ+1/tN4Pt87nMMQRK4UQ7Blba5M= =bMsn -----END PGP SIGNATURE----- Travel-Routing-DE-VRR-2.19/cpanfile000444001750001750 45513653243016 16137 0ustar00derfderf000000000000requires 'Class::Accessor'; requires 'Exception::Class'; requires 'Getopt::Long'; requires 'List::Util'; requires 'LWP::UserAgent'; requires 'XML::LibXML'; on test => sub { requires 'File::Slurp'; requires 'Test::Compile'; requires 'Test::Fatal'; requires 'Test::More'; requires 'Test::Pod'; }; Travel-Routing-DE-VRR-2.19/.github000700001750001750 013653243016 15640 5ustar00derfderf000000000000Travel-Routing-DE-VRR-2.19/.github/workflows000700001750001750 013653243016 17675 5ustar00derfderf000000000000Travel-Routing-DE-VRR-2.19/.github/workflows/perl.yml000444001750001750 107413653243016 21533 0ustar00derfderf000000000000name: linux on: push: branches: - '*' pull_request: branches: - '*' jobs: perl: runs-on: ubuntu-latest strategy: matrix: perl-version: - '5.20' - 'latest' - 'threaded' container: image: perl:${{ matrix.perl-version }} steps: - uses: actions/checkout@v2 - name: perl -V run: perl -V - name: Install Dependencies run: curl -sL https://git.io/cpm | perl - install -g --show-build-log-on-failure - name: Run Tests run: prove -l t Travel-Routing-DE-VRR-2.19/bin000700001750001750 013653243016 15050 5ustar00derfderf000000000000Travel-Routing-DE-VRR-2.19/bin/efa000555001750001750 4364413653243016 15733 0ustar00derfderf000000000000#!/usr/bin/env perl use strict; use warnings; use 5.010; use utf8; no if $] >= 5.018, warnings => 'experimental::smartmatch'; use utf8; use Encode qw(decode); use Travel::Routing::DE::EFA; use Exception::Class; use Getopt::Long qw/:config no_ignore_case/; use List::Util qw(first); our $VERSION = '2.19'; my $ignore_info; my $efa; my $efa_url = 'http://efa.vrr.de/vrr/XSLT_TRIP_REQUEST2'; my ( @from, @to, @via, $from_type, $to_type, $via_type ); my $opt = { 'efa-url' => \$efa_url, 'help' => sub { show_help(0) }, 'ignore-info' => \$ignore_info, 'from' => \@from, 'to' => \@to, 'version' => sub { say "efa version $VERSION"; exit 0 }, 'via' => \@via, }; binmode( STDOUT, ':encoding(utf-8)' ); binmode( STDERR, ':encoding(utf-8)' ); sub show_help { my ($exit_status) = @_; say 'Usage: efa [options] '; say 'See also: man efa'; exit $exit_status; } sub new_efa_by_url { my ($url) = @_; my $res = eval { Travel::Routing::DE::EFA->new( efa_url => $url, origin => [ @from, $from_type ], destination => [ @to, $to_type ], via => ( @via ? [ @via, $via_type ] : undef ), arrival_time => $opt->{arrive}, departure_time => $opt->{depart}, date => $opt->{date}, exclude => $opt->{exclude}, train_type => $opt->{include}, with_bike => $opt->{bike}, select_interchange_by => $opt->{prefer}, use_near_stops => $opt->{proximity}, walk_speed => $opt->{'walk-speed'}, max_interchanges => $opt->{'max-change'}, num_results => $opt->{'num-connections'}, without_solid_stairs => $opt->{without_solid_stairs}, without_escalators => $opt->{without_escalators}, without_elevators => $opt->{without_elevators}, with_low_platform => $opt->{with_low_platform}, with_wheelchair => $opt->{with_wheelchair}, developer_mode => $opt->{devmode}, lwp_options => { timeout => $opt->{timeout} }, ); }; return $res; } sub handle_efa_exception { my ($e) = @_; if ( $e->isa('Travel::Routing::DE::EFA::Exception::Setup') ) { if ( $e->message ) { printf STDERR ( "User error: %s (option '%s'): %s%s\n", $e->description, $e->option, $e->message, $e->have ? q{ "} . $e->have . q{"} : q{}, ); } else { printf STDERR ( "User error: %s (option '%s', got '%s', want '%s')\n", $e->description, $e->option, $e->have, $e->want ); } exit 1; } if ( $e->isa('Travel::Routing::DE::EFA::Exception::Net') ) { printf STDERR ( "Network error: %s: %s\n", $e->description, $e->http_response->as_string ); exit 2; } if ( $e->isa('Travel::Routing::DE::EFA::Exception::NoData') ) { printf STDERR ( "Backend error: %s\n", $e->description ); exit 3; } if ( $e->isa('Travel::Routing::DE::EFA::Exception::Ambiguous') ) { printf STDERR ( "Backend error: The %s '%s' is ambiguous. Try one of %s\n", $e->post_key, $e->post_value,, $e->possibilities ); exit 4; } if ( $e->isa('Travel::Routing::DE::EFA::Exception::Other') ) { printf STDERR ( "Backend error: %s: %s\n", $e->description, $e->message ); exit 5; } printf STDERR ( "Unknown error: %s\n%s", ref($e), $e->trace ); exit 10; } sub check_for_error { my ($eval_error) = @_; if ( not defined $efa ) { if ( $eval_error and ref($eval_error) and $eval_error->isa('Travel::Routing::DE::EFA::Exception') ) { handle_efa_exception($eval_error); } elsif ($eval_error) { printf STDERR "Unknown Travel::Routing::DE::EFA error:\n${eval_error}"; exit 10; } else { say STDERR 'Travel::Routing::DE::EFA failed to return an object'; exit 10; } } return; } sub format_footpath { my @parts = @_; my $str = q{}; for my $path_elem (@parts) { my ( $type, $level ) = @{$path_elem}; if ( $level eq 'UP' ) { $str .= ' ↗'; } elsif ( $level eq 'DOWN' ) { $str .= ' ↘'; } elsif ( $level eq 'LEVEL' ) { $str .= ' →'; } else { $str .= " [unhandled level, please report a bug : $level]"; } } return $str; } sub display_routes { my (@routes) = @_; for my $i ( 0 .. $#routes ) { my $route = $routes[$i]; if ( $opt->{'extended-info'} ) { print '# ' . $route->duration; if ( $route->ticket_type ) { printf( ", Preisstufe %s (%s€ / %s€)\n\n", $route->ticket_type, $route->fare_adult, $route->fare_child, ); } else { print "\n\n"; } } for my $c ( $route->parts ) { display_connection($c); } # last one needs to be shown separately if ( $opt->{maps} ) { my $c = ( $route->parts )[-1]; for my $m ( $c->arrival_routemaps, $c->arrival_stationmaps ) { say "# $m"; } } if ( $i != $#routes ) { print "---------\n\n"; } } return; } sub display_connection { my ($c) = @_; if ( $c->is_cancelled ) { say '# FAHRT FÄLLT AUS'; } elsif ( $c->delay ) { printf( "# +%d, Plan: %s -> %s\n", $c->delay, $c->departure_stime, $c->arrival_stime ); } for my $note ( $c->regular_notes ) { my $text = $note->summary; if ( not( length $ignore_info and $text =~ /$ignore_info/i ) ) { say "# $text"; } } for my $notice ( $c->current_notes ) { if ( $notice->subtitle ne $notice->subject ) { printf( "# %s - %s\n", $notice->subtitle, $notice->subject ); } else { printf( "# %s\n", $notice->subtitle ); } } if ( $opt->{maps} ) { for my $m ( $c->departure_routemaps, $c->departure_stationmaps ) { say "# $m"; } } printf( "%-5s ab %-30s %-20s %s\n", $c->departure_time, $c->departure_stop_and_platform, $c->train_line || $c->train_product, $c->train_destination, ); if ( $opt->{'full-route'} ) { for my $via_stop ( $c->via ) { printf( "%-5s %-30s %s\n", $via_stop->[1], $via_stop->[2], $via_stop->[3] ); } } printf( "%-5s an %s\n", $c->arrival_time, $c->arrival_stop_and_platform, ); print "\n"; if ( $opt->{'extended-info'} and $c->footpath_duration and $c->footpath_type ne 'IDEST' ) { printf( "%5d min umsteigen: %s\n\n", $c->footpath_duration, format_footpath( $c->footpath_parts ) ); } return; } @ARGV = map { decode( 'UTF-8', $_ ) } @ARGV; #<<< GetOptions( $opt, qw{ accessibility|x=s@ arrive|a=s auto-url|discover-and-print|A bike|b bike-info|B date|d=s depart|time|t=s devmode discover|D efa-url|u=s exclude|e=s@ extended-info|E from=s@{2} full-route|f help|h ignore-info|I:s include|i=s list|l maps|M max-change|m=i num-connections|n=i prefer|P=s proximity|p:10 service|s=s timeout=i to=s@{2} version|v via=s@{2} walk-speed|w=s }, ) or show_help(1); #>>> if ( $opt->{accessibility} ) { @{ $opt->{accessibility} } = split( qr{,}, join( q{,}, @{ $opt->{accessibility} } ) ); } else { # GetOptions seems to implicitly initialize $opt->{accessibility} to an # empty arrayref, but it's best not to rely on that. $opt->{accessibility} = []; } if ( $opt->{exclude} ) { @{ $opt->{exclude} } = split( qr{,}, join( q{,}, @{ $opt->{exclude} } ) ); } for my $field ( @{ $opt->{accessibility} } ) { given ($field) { when ( [qw[s no-stairs]] ) { $opt->{without_solid_stairs} = 1 } when ( [qw[e no-escalators]] ) { $opt->{without_escalators} = 1 } when ( [qw[E no-elevators]] ) { $opt->{without_elevators} = 1 } when ( [qw[l nf low-platform]] ) { $opt->{with_low_platform} = 1 } when ( [qw[w wheelchair]] ) { $opt->{with_wheelchair} = 1 } when ( [qw[i info]] ) { } # used for ignore_info default } } if ( $opt->{list} ) { printf( "%-40s %-14s %s\n\n", 'service', 'abbr. (-s)', 'url (-u)' ); for my $service ( Travel::Routing::DE::EFA::get_efa_urls() ) { printf( "%-40s %-14s %s\n", @{$service}{qw(name shortname url)} ); } exit 0; } if ( $opt->{arrive} and $opt->{depart} ) { print STDERR 'Note: The options -a/--arrive and -t/--time/--depart are' . " mutually exclusive\n" . " Discarding the --arrive option\n\n"; delete $opt->{arrive}; } if ( not defined $ignore_info ) { $ignore_info = join( q{|}, grep { defined } ( @{ $opt->{accessibility} } ? undef : 'Einstiegshilfe', ( $opt->{bike} or $opt->{'bike-info'} ) ? undef : 'Fahrradmitnahme', ) ); } elsif ( defined $ignore_info and length($ignore_info) == 0 ) { $ignore_info = undef; } if ( not( @from and @to ) ) { if ( @ARGV == 4 ) { ( @from[ 0, 1 ], @to[ 0, 1 ] ) = @ARGV; } elsif ( @ARGV == 6 ) { ( @from[ 0, 1 ], @via[ 0, 1 ], @to[ 0, 1 ] ) = @ARGV; } else { show_help(1); } } for my $pair ( [ \@from, \$from_type ], [ \@via, \$via_type ], [ \@to, \$to_type ], ) { next if ( not defined $pair->[0]->[1] ); if ( $pair->[0]->[1] =~ s{ ^ (? [^:]+ ) : \s* (? .+ ) $ } {$+{target}}x ) { given ( $+{type} ) { when ('addr') { ${ $pair->[1] } = 'address' } default { ${ $pair->[1] } = $+{type} } } } } if ( $opt->{service} ) { my $service = first { lc( $_->{shortname} ) eq lc( $opt->{service} ) } Travel::Routing::DE::EFA::get_efa_urls(); if ( not $service ) { printf STDERR ( "Error: Unknown service '%s'. See 'efa -l' for a " . "list of supported service names\n", $opt->{service} ); exit 1; } $efa_url = $service->{url}; } if ( $opt->{discover} or $opt->{'auto-url'} ) { for my $service ( Travel::Routing::DE::EFA::get_efa_urls() ) { $efa = new_efa_by_url( $service->{url} ); if ($efa) { if ( $opt->{'auto-url'} ) { last; } printf( "%s / %s (%s)\n -> efa -s %s %s\n\n", @{$service}{qw(name shortname url shortname)}, join( q{ }, map { "'$_'" } @ARGV ), ); } } if ( $opt->{'discover'} ) { exit 0; } } else { $efa = new_efa_by_url($efa_url); } check_for_error($@); my @routes = $efa->routes; display_routes( $efa->routes ); __END__ =head1 NAME efa - Command line client for EFA-based public transit routing services =head1 SYNOPSIS =over =item B B<--from> I I B<--to> I I [ I ] =item B [ I ] I I [ I I ] I I =back =head1 VERSION version 2.19 =head1 DESCRIPTION B is a command line client for EFA-based public transit routing interfaces, e.g. L. B requests connections between two points and displays the results. By default, the EFA service at L (operated by Verkehrsverbund Rhein-Ruhr) is used, which supports most places in Germany. A list of all supported EFA instances can be retrieved with B<-l> and a custom instance can be selected using B<-s> I or B<-u> I. It is also possible to probe all known EFA services for a specific connection using the B<-A> and B<-D> options. =head1 OPTIONS =over =item B<--from> I I Departure place =item B<--to> I I Arrival place =item B<--via> I I Travel via this place In all cases, if you want I to be an address or "point of interest", you can set it to 'addr:something' or 'poi:something'. =item B<-a>|B<--arrive> I:I Journey end time (overrides --time/--depart) =item B<-A>|B<--auto-url>|B<--discover-and-print> Probe all known EFA entry points for the specified connection. Print the first result which was not an error. Note that this may take a while and will not necessarily return the best result. Also, using this option by default is not recommended, as it puts EFA services under considerable additional load. =item B<-b>|B<--bike> Request connections allowing the passenger to take a bike with them. Note that this may cause B to display no routes at all -- In that case, the backend was unable to find such connections or didn't know about their bike-support. =item B<-B>|B<--bike-info> Show information about bike support, but do not select routes based on it. In essence, this option simply changes the B<--ignore-info> default. It is useful when B<--bike> did not return any routes even though most of the route has bike support. =item B<-d>|B<--date> I
.I.[I] Journey date. Also accepts the shortcut B. =item B<-D>|B<--discover> Probe all known EFA entry points for the specified connection. No routes are returned in this case. Instead, B will print the URLs and names of all entry points which did not return an error. =item B<-u>|B<--efa-url> I URL to the EFA entry point, defaults to L. Depending on your location, some Is may contain more specific data than others. See Travel::Routing::DE::EFA(3pm) and the B<-l> option for alternatives. =item B<-e>|B<--exclude> I Exclude I (comma separated list). Possible transports: zug, s-bahn, u-bahn, stadtbahn, tram, stadtbus, regionalbus, schnellbus, seilbahn, schiff, ast, sonstige =item B<-E>|B<--extended-info> Display more than just the basic route information. At the moment, the following is displayed (if available): =over =item * Route duration =item * Ticket fare =item * transfer duration and elevation changes (via stairs / escalators) at each stop =back =item B<-f>|B<--full-route> Display intermediate stops (with time and platform) of each train. Note that these are not always available. =item B<-I>|B<--ignore-info> [ I ] Ignore additional information matching I (default: /Fahrradmitnahme|Einstiegshilfe/) If I is not supplied, removes the default regex (-E nothing will be ignored) =item B<-i>|B<--include> I Include connections using trains of type I, where I may be: =over =item * local (default) only take local trains ("Verbund-/Nahverkehrslinien"). Slow, but the cheapest method if you're not traveling long distance =item * ic Local trains + IC =item * ice All trains (local + IC + ICE) =back =item B<-l>|B<--list> List supported EFA services with their URLs (see B<-u>) and abbreviations (see B<-s>). =item B<-M>|B<--maps> Output links to maps of transfer paths and transfer stations where available. =item B<-m>|B<--max-change> I Print connections with at most I interchanges =item B<-n>|B<--num-connections> I Return up to I connections. If unset, the default of the respective EFA server is used (usually 4 or 5). =item B<-P>|B<--prefer> I Prefer connections of I: =over =item * speed (default) The faster, the better =item * nowait Prefer connections with less interchanges =item * nowalk Prefer connections with less walking (at interchanges) =back =item B<-p>|B<--proximity> [I] Take stops close to the stop/start into account. By default, up to 10 minutes of walking to/from the route's first/last stop is considered acceptable. You can specify I to use a custom value. =item B<-s>|B<--service> I Shortname of the EFA entry point. See Travel::Routing::DE::EFA(3pm) and the B<-l> option for a list of services. =item B<-t>|B<--time>|B<--depart> I:I Journey start time =item B<--timeout> I Set timeout for HTTP requests. Default: 60 seconds. =item B<-v>|B<--version> Print version information =item B<-w>|B<--walk-speed> I Set your walking speed to I. Accepted values: normal (default), fast, slow =item B<-x>|B<--accessibility> I Request connections satisfying all of the specified accessibility I (comma-separated list, option may be repeated). Please note that this may cause the backend to return no results at all, either because no such connection exists or because the required lines do not have the correct accessibility attributes set. The following I are supported: =over =item e / no-escalators Transfers must be possible without taking an escalator. =item E / no-elevators Transfers must be possible without using an elevator. =item i / info Does not restrict the requested connections. However, this option causes B to display additional accessibility information for each route part (where available). When B<-x w> or B<-x l> do not return any connections, using B<-x i> might be more helpful (though it cannot guarantee that any of the results satisfy the respective type). =item l / nf / low-platform All vehicles must be low-platform ("Niederflur"). =item s / no-stairs Transfers must be possible without stairs (e.g. via escalators/elevators or ramps). =item w / wheelchair All vehicles must be wheelchair accessible. =back =back =head1 EXIT STATUS 0 Everything went well 1 Invalid arguments, see error message 2 Network error, unable to send request 3 efa.vrr.de did not return any parsable data 4 efa.vrr.de error: ambiguous input 5 efa.vrr.de error: no connections found 10 Unknown Travel::Routing::DE::EFA error 255 Other internal error =head1 CONFIGURATION None. =head1 EXAMPLES =over =item efa Do Hbf MH Hbf Look up a connection from Dortmund (Do) Hbf to MElheim (MH) Hbf =item efa --include ice Essen Hbf Hamburg Dammtor Look up a connection with long-distance trains =item efa --arrive 18:00 -e zug,s-bahn -M E Wickenburgstr D Oststr Look up a connection from Essen Wickenburgstr to DEsseldorf Oststr. Do not use any trains, make sure to arrive around 18:00 and print links to maps of all interchange stations. =item efa -s vvs Stuttgart Hbf Stuttgart Marienplatz Use the VVS (Verkehrsverbund Stuttgart) EFA service to look up a connection. =back =head1 DEPENDENCIES This script requires perl 5.10 (or higher) with the following modules: =over =item * Class::Accessor =item * Exception::Class =item * LWP::UserAgent =item * XML::LibXML =back =head1 BUGS AND LIMITATIONS The EFA backend is not able to calculate "two-way" routes, i.e. from -> via -> to routes with from == to. If from and to are the same stop, it doesn't even try to calculate a route ("we recommend walking instead"), if they are close to each other it may or may not work. Workaround: Request from -> via using the normal four-argument efa invocation, read the time, use efa -t time via via to to to request via -> to. =head1 AUTHOR Copyright (C) 2009-2020 by Daniel Friesel Ederf@finalrewind.orgE =head1 LICENSE This program is licensed under the same terms as Perl itself. Travel-Routing-DE-VRR-2.19/lib000700001750001750 013653243016 15046 5ustar00derfderf000000000000Travel-Routing-DE-VRR-2.19/lib/Travel000700001750001750 013653243016 16303 5ustar00derfderf000000000000Travel-Routing-DE-VRR-2.19/lib/Travel/Routing000700001750001750 013653243016 17732 5ustar00derfderf000000000000Travel-Routing-DE-VRR-2.19/lib/Travel/Routing/DE000700001750001750 013653243016 20222 5ustar00derfderf000000000000Travel-Routing-DE-VRR-2.19/lib/Travel/Routing/DE/EFA.pm000444001750001750 10021713653243016 21363 0ustar00derfderf000000000000package Travel::Routing::DE::EFA; use strict; use warnings; use 5.010; use utf8; no if $] >= 5.018, warnings => "experimental::smartmatch"; use Carp qw(cluck); use Encode qw(encode); use Travel::Routing::DE::EFA::Route; use Travel::Routing::DE::EFA::Route::Message; use LWP::UserAgent; use XML::LibXML; use Exception::Class ( 'Travel::Routing::DE::EFA::Exception', 'Travel::Routing::DE::EFA::Exception::Setup' => { isa => 'Travel::Routing::DE::EFA::Exception', description => 'invalid argument on setup', fields => [ 'option', 'have', 'want' ], }, 'Travel::Routing::DE::EFA::Exception::Net' => { isa => 'Travel::Routing::DE::EFA::Exception', description => 'could not submit POST request', fields => 'http_response', }, 'Travel::Routing::DE::EFA::Exception::NoData' => { isa => 'Travel::Routing::DE::EFA::Exception', description => 'backend returned no parsable route', }, 'Travel::Routing::DE::EFA::Exception::Ambiguous' => { isa => 'Travel::Routing::DE::EFA::Exception', description => 'ambiguous input', fields => [ 'post_key', 'post_value', 'possibilities' ], }, 'Travel::Routing::DE::EFA::Exception::Other' => { isa => 'Travel::Routing::DE::EFA::Exception', description => 'EFA backend returned an error', fields => ['message'], }, ); our $VERSION = '2.19'; sub set_time { my ( $self, %conf ) = @_; my $time; if ( $conf{departure_time} ) { $self->{post}->{itdTripDateTimeDepArr} = 'dep'; $time = $conf{departure_time}; } elsif ( $conf{arrival_time} ) { $self->{post}->{itdTripDateTimeDepArr} = 'arr'; $time = $conf{arrival_time}; } else { Travel::Routing::DE::EFA::Exception::Setup->throw( option => 'time', error => 'Specify either departure_time or arrival_time' ); } if ( $time !~ / ^ [0-2]? \d : [0-5]? \d $ /x ) { Travel::Routing::DE::EFA::Exception::Setup->throw( option => 'time', have => $time, want => 'HH:MM', ); } @{ $self->{post} }{ 'itdTimeHour', 'itdTimeMinute' } = split( /:/, $time ); return; } sub departure_time { my ( $self, $time ) = @_; return $self->set_time( departure_time => $time ); } sub arrival_time { my ( $self, $time ) = @_; return $self->set_time( arrival_time => $time ); } sub date { my ( $self, $date ) = @_; my ( $day, $month, $year ) = split( /[.]/, $date ); if ( $date eq 'tomorrow' ) { ( undef, undef, undef, $day, $month, $year ) = localtime( time + 86400 ); $month += 1; $year += 1900; } if ( not( defined $day and length($day) and $day >= 1 and $day <= 31 and defined $month and length($month) and $month >= 1 and $month <= 12 ) ) { Travel::Routing::DE::EFA::Exception::Setup->throw( option => 'date', have => $date, want => 'DD.MM[.[YYYY]]' ); } if ( not defined $year or not length($year) ) { $year = ( localtime(time) )[5] + 1900; } @{ $self->{post} }{ 'itdDateDay', 'itdDateMonth', 'itdDateYear' } = ( $day, $month, $year ); return; } sub exclude { my ( $self, @exclude ) = @_; my @mapping = qw{ zug s-bahn u-bahn stadtbahn tram stadtbus regionalbus schnellbus seilbahn schiff ast sonstige }; foreach my $exclude_type (@exclude) { my $ok = 0; for my $map_id ( 0 .. $#mapping ) { if ( $exclude_type eq $mapping[$map_id] ) { delete $self->{post}->{"inclMOT_${map_id}"}; $ok = 1; } } if ( not $ok ) { Travel::Routing::DE::EFA::Exception::Setup->throw( option => 'exclude', have => $exclude_type, want => join( ' / ', @mapping ), ); } } return; } sub max_interchanges { my ( $self, $max ) = @_; $self->{post}->{maxChanges} = $max; return; } sub number_of_trips { my ( $self, $num ) = @_; $self->{post}->{calcNumberOfTrips} = $num; return; } sub select_interchange_by { my ( $self, $prefer ) = @_; given ($prefer) { when ('speed') { $self->{post}->{routeType} = 'LEASTTIME' } when ('waittime') { $self->{post}->{routeType} = 'LEASTINTERCHANGE' } when ('distance') { $self->{post}->{routeType} = 'LEASTWALKING' } default { Travel::Routing::DE::EFA::Exception::Setup->throw( option => 'select_interchange_by', have => $prefer, want => 'speed / waittime / distance', ); } } return; } sub train_type { my ( $self, $include ) = @_; given ($include) { when ('local') { $self->{post}->{lineRestriction} = 403 } when ('ic') { $self->{post}->{lineRestriction} = 401 } when ('ice') { $self->{post}->{lineRestriction} = 400 } default { Travel::Routing::DE::EFA::Exception::Setup->throw( option => 'train_type', have => $include, want => 'local / ic / ice', ); } } return; } sub use_near_stops { my ( $self, $duration ) = @_; if ($duration) { $self->{post}->{useProxFootSearch} = 1; $self->{post}->{trITArrMOTvalue100} = $duration; $self->{post}->{trITDepMOTvalue100} = $duration; } else { $self->{post}->{useProxFootSearch} = 0; } return; } sub walk_speed { my ( $self, $walk_speed ) = @_; if ( $walk_speed ~~ [ 'normal', 'fast', 'slow' ] ) { $self->{post}->{changeSpeed} = $walk_speed; } else { Travel::Routing::DE::EFA::Exception::Setup->throw( option => 'walk_speed', have => $walk_speed, want => 'normal / fast / slow', ); } return; } sub with_bike { my ( $self, $bike ) = @_; $self->{post}->{bikeTakeAlong} = $bike; return; } sub without_solid_stairs { my ( $self, $opt ) = @_; $self->{post}->{noSolidStairs} = $opt; return; } sub without_escalators { my ( $self, $opt ) = @_; $self->{post}->{noEscalators} = $opt; return; } sub without_elevators { my ( $self, $opt ) = @_; $self->{post}->{noElevators} = $opt; return; } sub with_low_platform { my ( $self, $opt ) = @_; $self->{post}->{lowPlatformVhcl} = $opt; return; } sub with_wheelchair { my ( $self, $opt ) = @_; $self->{post}->{wheelchair} = $opt; return; } sub place { my ( $self, $which, $place, $stop, $type ) = @_; if ( not( $place and $stop ) ) { Travel::Routing::DE::EFA::Exception::Setup->throw( option => 'place', error => 'Need >= three elements' ); } $type //= 'stop'; @{ $self->{post} }{ "place_${which}", "name_${which}" } = ( $place, $stop ); if ( $type ~~ [qw[address poi stop]] ) { $self->{post}->{"type_${which}"} = $type; } return; } sub create_post { my ($self) = @_; my $conf = $self->{config}; my @now = localtime( time() ); $self->{post} = { changeSpeed => 'normal', command => q{}, execInst => q{}, imparedOptionsActive => 1, inclMOT_0 => 'on', inclMOT_1 => 'on', inclMOT_10 => 'on', inclMOT_11 => 'on', inclMOT_2 => 'on', inclMOT_3 => 'on', inclMOT_4 => 'on', inclMOT_5 => 'on', inclMOT_6 => 'on', inclMOT_7 => 'on', inclMOT_8 => 'on', inclMOT_9 => 'on', includedMeans => 'checkbox', itOptionsActive => 1, itdDateDay => $now[3], itdDateMonth => $now[4] + 1, itdDateYear => $now[5] + 1900, itdTimeHour => $now[2], itdTimeMinute => $now[1], itdTripDateTimeDepArr => 'dep', language => 'de', lineRestriction => 403, maxChanges => 9, nameInfo_destination => 'invalid', nameInfo_origin => 'invalid', nameInfo_via => 'invalid', nameState_destination => 'empty', nameState_origin => 'empty', nameState_via => 'empty', name_destination => q{}, name_origin => q{}, name_via => q{}, nextDepsPerLeg => 1, outputFormat => 'XML', placeInfo_destination => 'invalid', placeInfo_origin => 'invalid', placeInfo_via => 'invalid', placeState_destination => 'empty', placeState_origin => 'empty', placeState_via => 'empty', place_destination => q{}, place_origin => q{}, place_via => q{}, ptOptionsActive => 1, requestID => 0, routeType => 'LEASTTIME', sessionID => 0, text => 1993, trITArrMOT => 100, trITArrMOTvalue100 => 10, trITArrMOTvalue101 => 10, trITArrMOTvalue104 => 10, trITArrMOTvalue105 => 10, trITDepMOT => 100, trITDepMOTvalue100 => 10, trITDepMOTvalue101 => 10, trITDepMOTvalue104 => 10, trITDepMOTvalue105 => 10, typeInfo_destination => 'invalid', typeInfo_origin => 'invalid', typeInfo_via => 'invalid', type_destination => 'stop', type_origin => 'stop', type_via => 'stop', useRealtime => 1 }; $self->place( 'origin', @{ $conf->{origin} } ); $self->place( 'destination', @{ $conf->{destination} } ); if ( $conf->{via} ) { $self->place( 'via', @{ $conf->{via} } ); } if ( $conf->{arrival_time} || $conf->{departure_time} ) { $self->set_time( %{$conf} ); } if ( $conf->{date} ) { $self->date( $conf->{date} ); } if ( $conf->{exclude} ) { $self->exclude( @{ $conf->{exclude} } ); } if ( $conf->{max_interchanges} ) { $self->max_interchanges( $conf->{max_interchanges} ); } if ( $conf->{num_results} ) { $self->number_of_trips( $conf->{num_results} ); } if ( $conf->{select_interchange_by} ) { $self->select_interchange_by( $conf->{select_interchange_by} ); } if ( $conf->{use_near_stops} ) { $self->use_near_stops( $conf->{use_near_stops} ); } if ( $conf->{train_type} ) { $self->train_type( $conf->{train_type} ); } if ( $conf->{walk_speed} ) { $self->walk_speed( $conf->{walk_speed} ); } if ( $conf->{with_bike} ) { $self->with_bike(1); } if ( $conf->{with_low_platform} ) { $self->with_low_platform(1); } if ( $conf->{with_wheelchair} ) { $self->with_wheelchair(1); } if ( $conf->{without_solid_stairs} ) { $self->without_solid_stairs(1); } if ( $conf->{without_escalators} ) { $self->without_escalators(1); } if ( $conf->{without_elevators} ) { $self->without_elevators(1); } for my $val ( values %{ $self->{post} } ) { $val = encode( 'UTF-8', $val ); } return; } sub new { my ( $obj, %conf ) = @_; my $ref = {}; $ref->{config} = \%conf; bless( $ref, $obj ); if ( not $ref->{config}->{efa_url} ) { Travel::Routing::DE::EFA::Exception::Setup->throw( option => 'efa_url', error => 'must be set' ); } $ref->{config}->{efa_url} =~ m{ (? (? [^:]+ : // [^/]+ ) / [^/]+ / ) }ox; $ref->{config}->{rm_base} = $+{netroot}; $ref->{config}->{sm_base} = $+{root} . '/download/envmaps/'; $ref->create_post; if ( not( defined $conf{submit} and $conf{submit} == 0 ) ) { $ref->submit( %{ $conf{lwp_options} } ); } return $ref; } sub new_from_xml { my ( $class, %opt ) = @_; my $self = { xml_reply => $opt{xml} }; $self->{config} = { efa_url => $opt{efa_url}, }; $self->{config}->{efa_url} =~ m{ (? (? [^:]+ : // [^/]+ ) / [^/]+ / ) }ox; $self->{config}->{rm_base} = $+{netroot}; $self->{config}->{sm_base} = $+{root} . '/download/envmaps/'; bless( $self, $class ); $self->parse_xml; return $self; } sub submit { my ( $self, %conf ) = @_; $self->{ua} = LWP::UserAgent->new(%conf); $self->{ua}->env_proxy; my $response = $self->{ua}->post( $self->{config}->{efa_url}, $self->{post} ); if ( $response->is_error ) { Travel::Routing::DE::EFA::Exception::Net->throw( http_response => $response, ); } $self->{xml_reply} = $response->decoded_content; $self->parse_xml; return; } sub itddate_str { my ( $self, $node ) = @_; return sprintf( '%02d.%02d.%04d', $node->getAttribute('day'), $node->getAttribute('month'), $node->getAttribute('year') ); } sub itdtime_str { my ( $self, $node ) = @_; return sprintf( '%02d:%02d', $node->getAttribute('hour'), $node->getAttribute('minute') ); } sub parse_cur_info { my ( $self, $node ) = @_; my $xp_text = XML::LibXML::XPathExpression->new('./infoLinkText'); my $xp_subject = XML::LibXML::XPathExpression->new('./infoText/subject'); my $xp_subtitle = XML::LibXML::XPathExpression->new('./infoText/subtitle'); my $xp_content = XML::LibXML::XPathExpression->new('./infoText/content'); my $e_text = ( $node->findnodes($xp_text) )[0]; my $e_subject = ( $node->findnodes($xp_subject) )[0]; my $e_subtitle = ( $node->findnodes($xp_subtitle) )[0]; my $e_content = ( $node->findnodes($xp_content) )[0]; my %msg = ( summary => $e_text->textContent, subject => $e_subject->textContent, subtitle => $e_subtitle->textContent, raw_content => $e_content->textContent, ); for my $key ( keys %msg ) { chomp( $msg{$key} ); } return Travel::Routing::DE::EFA::Route::Message->new(%msg); } sub parse_reg_info { my ( $self, $node ) = @_; my %msg = ( summary => $node->textContent, ); return Travel::Routing::DE::EFA::Route::Message->new(%msg); } sub parse_xml_part { my ( $self, $route ) = @_; my $xp_route = XML::LibXML::XPathExpression->new( './itdPartialRouteList/itdPartialRoute'); my $xp_dep = XML::LibXML::XPathExpression->new('./itdPoint[@usage="departure"]'); my $xp_arr = XML::LibXML::XPathExpression->new('./itdPoint[@usage="arrival"]'); my $xp_date = XML::LibXML::XPathExpression->new('./itdDateTime/itdDate'); my $xp_time = XML::LibXML::XPathExpression->new('./itdDateTime/itdTime'); my $xp_via = XML::LibXML::XPathExpression->new('./itdStopSeq/itdPoint'); my $xp_sdate = XML::LibXML::XPathExpression->new('./itdDateTimeTarget/itdDate'); my $xp_stime = XML::LibXML::XPathExpression->new('./itdDateTimeTarget/itdTime'); my $xp_mot = XML::LibXML::XPathExpression->new('./itdMeansOfTransport'); my $xp_fp = XML::LibXML::XPathExpression->new('./itdFootPathInfo'); my $xp_fp_e = XML::LibXML::XPathExpression->new('./itdFootPathInfo/itdFootPathElem'); my $xp_delay = XML::LibXML::XPathExpression->new('./itdRBLControlled'); my $xp_sched_info = XML::LibXML::XPathExpression->new('./itdInfoTextList/infoTextListElem'); my $xp_cur_info = XML::LibXML::XPathExpression->new('./infoLink'); my $xp_mapitem_rm = XML::LibXML::XPathExpression->new( './itdMapItemList/itdMapItem[@type="RM"]/itdImage'); my $xp_mapitem_sm = XML::LibXML::XPathExpression->new( './itdMapItemList/itdMapItem[@type="SM"]/itdImage'); my $xp_fare = XML::LibXML::XPathExpression->new('./itdFare/itdSingleTicket'); my @route_parts; my $info = { duration => $route->getAttribute('publicDuration'), vehicle_time => $route->getAttribute('vehicleTime'), }; my $e_fare = ( $route->findnodes($xp_fare) )[0]; if ($e_fare) { $info->{ticket_type} = $e_fare->getAttribute('unitsAdult'); $info->{fare_adult} = $e_fare->getAttribute('fareAdult'); $info->{fare_child} = $e_fare->getAttribute('fareChild'); $info->{ticket_text} = $e_fare->textContent; } for my $e ( $route->findnodes($xp_route) ) { my $e_dep = ( $e->findnodes($xp_dep) )[0]; my $e_arr = ( $e->findnodes($xp_arr) )[0]; my $e_ddate = ( $e_dep->findnodes($xp_date) )[0]; my $e_dtime = ( $e_dep->findnodes($xp_time) )[0]; my $e_dsdate = ( $e_dep->findnodes($xp_sdate) )[0]; my $e_dstime = ( $e_dep->findnodes($xp_stime) )[0]; my $e_adate = ( $e_arr->findnodes($xp_date) )[0]; my $e_atime = ( $e_arr->findnodes($xp_time) )[0]; my $e_asdate = ( $e_arr->findnodes($xp_sdate) )[0]; my $e_astime = ( $e_arr->findnodes($xp_stime) )[0]; my $e_mot = ( $e->findnodes($xp_mot) )[0]; my $e_delay = ( $e->findnodes($xp_delay) )[0]; my $e_fp = ( $e->findnodes($xp_fp) )[0]; my @e_sinfo = $e->findnodes($xp_sched_info); my @e_cinfo = $e->findnodes($xp_cur_info); my @e_dmap_rm = $e_dep->findnodes($xp_mapitem_rm); my @e_dmap_sm = $e_dep->findnodes($xp_mapitem_sm); my @e_amap_rm = $e_arr->findnodes($xp_mapitem_rm); my @e_amap_sm = $e_arr->findnodes($xp_mapitem_sm); my @e_fp_e = $e->findnodes($xp_fp_e); # not all EFA services distinguish between scheduled and realtime # data. Set sdate / stime to date / time when not provided. $e_dsdate //= $e_ddate; $e_dstime //= $e_dtime; $e_asdate //= $e_adate; $e_astime //= $e_atime; my $delay = $e_delay ? $e_delay->getAttribute('delayMinutes') : 0; my ( @dep_rms, @dep_sms, @arr_rms, @arr_sms ); if ( $self->{config}->{rm_base} ) { my $base = $self->{config}->{rm_base}; @dep_rms = map { $base . $_->getAttribute('src') } @e_dmap_rm; @arr_rms = map { $base . $_->getAttribute('src') } @e_amap_rm; } if ( $self->{config}->{sm_base} ) { my $base = $self->{config}->{sm_base}; @dep_sms = map { $base . $_->getAttribute('src') } @e_dmap_sm; @arr_sms = map { $base . $_->getAttribute('src') } @e_amap_sm; } my $hash = { delay => $delay, departure_date => $self->itddate_str($e_ddate), departure_time => $self->itdtime_str($e_dtime), departure_sdate => $self->itddate_str($e_dsdate), departure_stime => $self->itdtime_str($e_dstime), departure_stop => $e_dep->getAttribute('name'), departure_platform => $e_dep->getAttribute('platformName'), train_line => $e_mot->getAttribute('name'), train_product => $e_mot->getAttribute('productName'), train_destination => $e_mot->getAttribute('destination'), arrival_date => $self->itddate_str($e_adate), arrival_time => $self->itdtime_str($e_atime), arrival_sdate => $self->itddate_str($e_asdate), arrival_stime => $self->itdtime_str($e_astime), arrival_stop => $e_arr->getAttribute('name'), arrival_platform => $e_arr->getAttribute('platformName'), }; if ($e_fp) { # Note that position=IDEST footpaths are coupled with a special # "walking" connection, so their duration is already known and # accounted for. However, we still save it here, since # detecting and handling this is the API client's job (for now). $hash->{footpath_type} = $e_fp->getAttribute('position'); $hash->{footpath_duration} = $e_fp->getAttribute('duration'); for my $e (@e_fp_e) { push( @{ $hash->{footpath_parts} }, [ $e->getAttribute('type'), $e->getAttribute('level') ] ); } } $hash->{departure_routemaps} = \@dep_rms; $hash->{departure_stationmaps} = \@dep_sms; $hash->{arrival_routemaps} = \@arr_rms; $hash->{arrival_stationmaps} = \@arr_sms; for my $ve ( $e->findnodes($xp_via) ) { my $e_vdate = ( $ve->findnodes($xp_date) )[-1]; my $e_vtime = ( $ve->findnodes($xp_time) )[-1]; if ( not( $e_vdate and $e_vtime ) or ( $e_vdate->getAttribute('weekday') == -1 ) ) { next; } my $name = $ve->getAttribute('name'); my $platform = $ve->getAttribute('platformName'); if ( $name ~~ [ $hash->{departure_stop}, $hash->{arrival_stop} ] ) { next; } push( @{ $hash->{via} }, [ $self->itddate_str($e_vdate), $self->itdtime_str($e_vtime), $name, $platform ] ); } $hash->{regular_notes} = [ map { $self->parse_reg_info($_) } @e_sinfo ]; $hash->{current_notes} = [ map { $self->parse_cur_info($_) } @e_cinfo ]; push( @route_parts, $hash ); } push( @{ $self->{routes} }, Travel::Routing::DE::EFA::Route->new( $info, @route_parts ) ); return; } sub parse_xml { my ($self) = @_; my $tree = $self->{tree} = XML::LibXML->load_xml( string => $self->{xml_reply}, ); if ( $self->{config}->{developer_mode} ) { say $tree->toString(2); } my $xp_element = XML::LibXML::XPathExpression->new( '//itdItinerary/itdRouteList/itdRoute'); my $xp_err = XML::LibXML::XPathExpression->new( '//itdTripRequest/itdMessage[@type="error"]'); my $xp_odv = XML::LibXML::XPathExpression->new('//itdOdv'); for my $odv ( $tree->findnodes($xp_odv) ) { $self->check_ambiguous_xml($odv); } my $err = ( $tree->findnodes($xp_err) )[0]; if ($err) { Travel::Routing::DE::EFA::Exception::Other->throw( message => $err->textContent ); } for my $part ( $tree->findnodes($xp_element) ) { $self->parse_xml_part($part); } if ( not defined $self->{routes} or @{ $self->{routes} } == 0 ) { Travel::Routing::DE::EFA::Exception::NoData->throw; } return 1; } sub check_ambiguous_xml { my ( $self, $tree ) = @_; my $xp_place = XML::LibXML::XPathExpression->new('./itdOdvPlace'); my $xp_name = XML::LibXML::XPathExpression->new('./itdOdvName'); my $xp_place_elem = XML::LibXML::XPathExpression->new('./odvPlaceElem'); my $xp_place_input = XML::LibXML::XPathExpression->new('./odvPlaceInput'); my $xp_name_elem = XML::LibXML::XPathExpression->new('./odvNameElem'); my $xp_name_input = XML::LibXML::XPathExpression->new('./odvNameInput'); my $e_place = ( $tree->findnodes($xp_place) )[0]; my $e_name = ( $tree->findnodes($xp_name) )[0]; if ( not( $e_place and $e_name ) ) { cluck('skipping ambiguity check - itdOdvPlace/itdOdvName missing'); return; } my $s_place = $e_place->getAttribute('state'); my $s_name = $e_name->getAttribute('state'); if ( $s_place eq 'list' ) { Travel::Routing::DE::EFA::Exception::Ambiguous->throw( post_key => 'place', post_value => ( $e_place->findnodes($xp_place_input) )[0]->textContent, possibilities => join( q{ | }, map { $_->textContent } @{ $e_place->findnodes($xp_place_elem) } ) ); } if ( $s_name eq 'list' ) { Travel::Routing::DE::EFA::Exception::Ambiguous->throw( post_key => 'name', post_value => ( $e_name->findnodes($xp_name_input) )[0]->textContent, possibilities => join( q{ | }, map { $_->textContent } @{ $e_name->findnodes($xp_name_elem) } ) ); } if ( $s_place eq 'notidentified' ) { Travel::Routing::DE::EFA::Exception::Setup->throw( option => 'place', error => 'unknown place', have => ( $e_place->findnodes($xp_place_input) )[0]->textContent, ); } if ( $s_name eq 'notidentified' ) { Travel::Routing::DE::EFA::Exception::Setup->throw( option => 'name', error => 'unknown name', have => ( $e_name->findnodes($xp_name_input) )[0]->textContent, ); } # 'identified' and 'empty' are ok return; } sub routes { my ($self) = @_; return @{ $self->{routes} }; } # static sub get_efa_urls { # sorted lexically by shortname return ( { url => 'https://bsvg.efa.de/bsvagstd/XML_TRIP_REQUEST2', name => 'Braunschweiger Verkehrs-GmbH', shortname => 'BSVG', }, { url => 'https://www.ding.eu/ding3/XSLT_TRIP_REQUEST2', name => 'Donau-Iller Nahverkehrsverbund', shortname => 'DING', }, { url => 'https://projekte.kvv-efa.de/sl3-alone/XSLT_TRIP_REQUEST2', name => 'Karlsruher Verkehrsverbund', shortname => 'KVV', }, { url => 'https://www.linzag.at/static/XSLT_TRIP_REQUEST2', name => 'Linz AG', shortname => 'LinzAG', }, { url => 'https://efa.mvv-muenchen.de/mobile/XSLT_TRIP_REQUEST2', name => 'Münchner Verkehrs- und Tarifverbund', shortname => 'MVV', }, { url => 'https://www.efa-bw.de/nvbw/XSLT_TRIP_REQUEST2', name => 'Nahverkehrsgesellschaft Baden-Württemberg', shortname => 'NVBW', }, # HTTPS not supported { url => 'http://efa.svv-info.at/sbs/XSLT_TRIP_REQUEST2', name => 'Salzburger Verkehrsverbund', shortname => 'SVV', }, # HTTPS: invalid certificate { url => 'http://www.travelineeastmidlands.co.uk/em/XSLT_TRIP_REQUEST2', name => 'Traveline East Midlands', shortname => 'TLEM', }, { url => 'https://efa.vagfr.de/vagfr3/XSLT_TRIP_REQUEST2', name => 'Freiburger Verkehrs AG', shortname => 'VAG', }, # HTTPS: unsupported protocol { url => 'http://mobil.vbl.ch/vblmobil/XML_TRIP_REQUEST2', name => 'Verkehrsbetriebe Luzern', shortname => 'VBL', }, # HTTPS not supported { url => 'http://fahrplan.verbundlinie.at/stv/XSLT_TRIP_REQUEST2', name => 'Verkehrsverbund Steiermark', shortname => 'Verbundlinie', }, { url => 'https://efa.vgn.de/vgnExt_oeffi/XML_TRIP_REQUEST2', name => 'Verkehrsverbund Grossraum Nuernberg', shortname => 'VGN', }, # HTTPS: certificate verification fails { url => 'http://efa.vmv-mbh.de/vmv/XML_TRIP_REQUEST2', name => 'Verkehrsgesellschaft Mecklenburg-Vorpommern', shortname => 'VMV', }, { url => 'https://efa.vor.at/wvb/XSLT_TRIP_REQUEST2', name => 'Verkehrsverbund Ost-Region', shortname => 'VOR', encoding => 'iso-8859-15', }, # HTTPS not spported { url => 'http://fahrplanauskunft.vrn.de/vrn/XML_TRIP_REQUEST2', name => 'Verkehrsverbund Rhein-Neckar', shortname => 'VRN', }, { url => 'https://efa.vrr.de/vrr/XSLT_TRIP_REQUEST2', name => 'Verkehrsverbund Rhein-Ruhr', shortname => 'VRR', }, { url => 'https://app.vrr.de/vrrstd/XML_TRIP_REQUEST2', name => 'Verkehrsverbund Rhein-Ruhr (alternative)', shortname => 'VRR2', }, # HTTPS not supported { url => 'http://efa.vvo-online.de:8080/dvb/XSLT_TRIP_REQUEST2', name => 'Verkehrsverbund Oberelbe', shortname => 'VVO', }, { url => 'https://www2.vvs.de/vvs/XSLT_TRIP_REQUEST2', name => 'Verkehrsverbund Stuttgart', shortname => 'VVS', }, ); } 1; __END__ =head1 NAME Travel::Routing::DE::EFA - unofficial interface to EFA-based itinerary services =head1 SYNOPSIS use Travel::Routing::DE::EFA; my $efa = Travel::Routing::DE::EFA->new( efa_url => 'http://efa.vrr.de/vrr/XSLT_TRIP_REQUEST2', origin => [ 'Essen', 'HBf' ], destination => [ 'Duisburg', 'HBf' ], ); for my $route ( $efa->routes ) { for my $part ( $route->parts ) { printf( "%s at %s -> %s at %s, via %s to %s\n", $part->departure_time, $part->departure_stop, $part->arrival_time, $part->arrival_stop, $part->train_line, $part->train_destination, ); } print "\n"; } =head1 VERSION version 2.19 =head1 DESCRIPTION B is a client for EFA-based itinerary services. You pass it the start/stop of your journey, maybe a time and a date and more details, and it returns the up-to-date scheduled connections between those two stops. It uses B and B for this. =head1 METHODS =over =item $efa = Travel::Routing::DE::EFA->new(I<%opts>) Returns a new Travel::Routing::DE::EFA object and sets up its POST data via %opts. Valid hash keys and their values are: =over =item B => I Mandatory. Sets the entry point to the EFA itinerary service. The following URLs (grouped by country) are known. A service marked with [!] is not completely supported yet and may not work at all. =over =item * Austria =over =item * L (Innsbrucker Verkehrsbetriebe) =item * L (Salzburger Verkehrsverbund) =item * L (Verkehrsverbund Ost-Region) =item * L (Vorarlberger Verkehrsverbund) =item * L (Linz AG) B<[!]> =item * The STV / Verkehrsverbund Steiermark is not supported since it returns data with broken encoding =back =item * Germany =over =item * L (Verkehrsverbund GroEraum NErnberg) =item * L (Verkehrsverbund Rhein-Ruhr) =item * L (Verkehrsverbund Rhein-Ruhr with support for B<--full-route>) =item * L (Verkehrsverbund Stuttgart) =back =back If you found a URL not listed here, please send it to Ederf@finalrewind.orgE. =item B => B<[> IB<,> I [ B<,> I ] B<]> Mandatory. Sets the start of the journey. I is optional and may be one of B (default), B
(street and house number) or B ("point of interest"). =item B => B<[> IB<,> I [ B<,> I ] B<]> Mandatory. Sets the end of the journey, see B. =item B => B<[> IB<,> I [ B<,> I ] B<]> Optional. Specifies an intermediate stop which the resulting itinerary must contain. See B for arguments. =item B => I Journey end time =item B => I Journey start time. Default: now =item B => I[I] Journey date. Also accepts the string B. Default: today =item B => \@exclude Do not use certain transport types for itinerary. Accepted arguments: zug, s-bahn, u-bahn, stadtbahn, tram, stadtbus, regionalbus, schnellbus, seilbahn, schiff, ast, sonstige =item B => I Set maximum number of interchanges =item B => I Return up to I connections. If unset, the default of the respective EFA server is used (usually 4 or 5). =item B => B|B|B Prefer either fast connections (default), connections with low wait time or connections with little distance to walk =item B => I<$int> If I<$int> is a true value: Take stops close to the stop/start into account and possibly use them instead. Up to I<$int> minutes of walking are considered acceptable. Otherwise: Do not take stops close to stop/start into account. =item B => B|B|B Include only local trains into itinerary (default), all but ICEs, or all. The latter two are usually way more expensive for short routes. =item B => B|B|B Set walk speed. Default: B =item B => B<0>|B<1> If true: Request connections allowing passengers with bikes. Note that the backed may return an empty result if no such connection exists or bike-support simply isn't known. =item B => B<0>|B<1> If true: Request connections which only use low-platform ("Niederflur") vehicles. Note that the backed will return an empty result if no such connection exists. =item B => B<0>|B<1> If true: Request connections which are wheelchair-accessible. Again, note that the backend may return an empty result if no such connection exists or wheelchair-support isn't known. =item B => B<0>|B<1> If true: Request that transfers do not require usage of elevators. =item B => B<0>|B<1> If true: Request that transfers do not require usage of escalators. =item B => B<0>|B<1> If true: Request that transfers do not require stairs to be taken (i.e. ramps, escalators, elevators or similar must be available). =item B => I<\%hashref> Options to pass to C<< LWP::UserAgent->new >>. =item B => B<0>|B<1> By default, B will create a POST request and submit it. If you do not want it to be submitted yet, set this to B<0>. =back =item $efa->submit(I<%opts>) Submit the query to I. I<%opts> is passed on to C<< LWP::UserAgent->new >>. =item $efa->routes Returns a list of Travel::Routing::DE::EFA::Route(3pm) elements. Each one contains one method of getting from start to stop. =back =head2 ACCESSORS The following methods act like the arguments to B. See there. =over =item $efa->departure_time(I<$time>) =item $efa->arrival_time(I<$time>) =item $efa->date(I<$date>) =item $efa->exclude(I<@exclude>) =item $efa->max_interchanges(I<$num>) =item $efa->select_interchange_by(I<$selection>) =item $efa->train_type(I<$type>) =item $efa->use_near_stops(I<$duration>) =item $efa->walk_speed(I<$speed>) =item $efa->with_bike(I<$bool>) =back =head2 STATIC METHODS =over =item Travel::Routing::DE::EFA::get_efa_urls() Returns a list of known EFA entry points. Each list element is a hashref with the following elements. =over =item B: service URL as passed to B =item B: Name of the entity operating this service =item B: Short name of the entity =back =back =head1 DIAGNOSTICS When encountering an error, Travel::Routing::DE::EFA throws a Travel::Routing::DE::EFA::Exception(3pm) object. =head1 DEPENDENCIES =over =item * LWP::UserAgent(3pm) =item * XML::LibXML(3pm) =back =head1 BUGS AND LIMITATIONS None known. =head1 SEE ALSO =over =item * Travel::Routing::DE::EFA::Exception(3pm) =item * Travel::Routing::DE::EFA::Route(3pm) =item * L is another implementation, using L. =back =head1 AUTHOR Copyright (C) 2009-2020 by Daniel Friesel Ederf@finalrewind.orgE =head1 LICENSE This program is licensed under the same terms as Perl itself. Travel-Routing-DE-VRR-2.19/lib/Travel/Routing/DE/VRR.pm000444001750001750 403313653243016 21400 0ustar00derfderf000000000000package Travel::Routing::DE::VRR; use strict; use warnings; use 5.010; no if $] >= 5.018, warnings => "experimental::smartmatch"; our $VERSION = '2.19'; use parent 'Travel::Routing::DE::EFA'; sub new { my ( $class, %opt ) = @_; $opt{efa_url} = 'http://efa.vrr.de/vrr/XSLT_TRIP_REQUEST2'; return $class->SUPER::new(%opt); } 1; __END__ =head1 NAME Travel::Routing::DE::VRR - unofficial interface to the efa.vrr.de German itinerary service =head1 SYNOPSIS use Travel::Routing::DE::VRR; my $efa = Travel::Routing::DE::VRR->new( origin => [ 'Essen', 'HBf' ], destination => [ 'Duisburg', 'HBf' ], ); for my $route ( $efa->routes ) { for my $part ( $route->parts ) { printf( "%s at %s -> %s at %s, via %s to %s", $part->departure_time, $part->departure_stop, $part->arrival_time, $part->arrival_stop, $part->train_line, $part->train_destination, ); } print "\n\n"; } =head1 VERSION version 2.19 =head1 DESCRIPTION B is a client for the efa.vrr.de web interface. You pass it the start/stop of your journey, maybe a time and a date and more details, and it returns the up-to-date scheduled connections between those two stops. =head1 METHODS =over =item $efa = Travel::Routing::DE::VRR->new(I<%opts>) Returns a new Travel::Routing::DE::VRR object and sets up its POST data via I<%opts>. Calls Travel::Routing::DE::EFA->new with the appropriate B, all I<%opts> are passed on. See Travel::Routing::DE::EFA(3pm) for valid parameters and methods =back When encountering an error, Travel::Routing::DE::VRR throws a Travel::Routing::DE::EFA::Exception(3pm) object. =head1 DEPENDENCIES =over =item * Travel::Routing::DE::EFA(3pm) =item * LWP::UserAgent(3pm) =item * XML::LibXML(3pm) =back =head1 BUGS AND LIMITATIONS None known. =head1 SEE ALSO =over =item * Travel::Routing::DE::EFA(3pm) =back =head1 AUTHOR Copyright (C) 2009-2020 by Daniel Friesel Ederf@finalrewind.orgE =head1 LICENSE This program is licensed under the same terms as Perl itself. Travel-Routing-DE-VRR-2.19/lib/Travel/Routing/DE/EFA000700001750001750 013653243016 20615 5ustar00derfderf000000000000Travel-Routing-DE-VRR-2.19/lib/Travel/Routing/DE/EFA/Exception.pod000444001750001750 250113653243016 23424 0ustar00derfderf000000000000=head1 NAME Travel::Routing::DE::EFA::Exception - Travel::Routing::DE::EFA Exceptions =head1 DESCRIPTION All Exceptions thrown by Travel::Routing::DE::EFA are Travel::Routing::DE::EFA::Exception objects created by Exception::Class(3pm). See Exception::Class::Base(3pm) for their common methods. =head1 LIST OF EXCEPTIONS =head2 Travel::Routing::DE::EFA::Exception::Setup An argument to B had an invalid format. Additional methods: =over =item $exception->option The option in which the error occurred. =item $exception->have The argument we got. =item $exception->want What kind of argument we want. =back =head2 Travel::Routing::DE::EFA::Exception::Net The HTTP request to the efa interface failed. Contains an HTTP::Response(3pm) object describing the error in B. =head2 Travel::Routing::DE::EFA::Exception::NoData We got no parsable data from the EFA service =head2 Travel::Routing::DE::EFA::Exception::Ambiguous Our request contained ambiguous data. B contains the relevant POST key and B the corresponding input value. B is a pipe-separated string of acceptable values reported by the EFA service. =head2 Travel::Routing::DE::EFA::Exception::NoConnections The EFA service found no connections for our request. =head1 SEE ALSO Travel::Routing::DE::EFA(3pm) Travel-Routing-DE-VRR-2.19/lib/Travel/Routing/DE/EFA/Route.pm000444001750001750 411113653243016 22415 0ustar00derfderf000000000000package Travel::Routing::DE::EFA::Route; use strict; use warnings; use 5.010; use parent 'Class::Accessor'; use Travel::Routing::DE::EFA::Route::Part; our $VERSION = '2.19'; Travel::Routing::DE::EFA::Route->mk_ro_accessors( qw(duration ticket_text ticket_type fare_adult fare_child vehicle_time)); sub new { my ( $obj, $info, @parts ) = @_; my $ref = $info; for my $part (@parts) { push( @{ $ref->{parts} }, Travel::Routing::DE::EFA::Route::Part->new( %{$part} ) ); } return bless( $ref, $obj ); } sub parts { my ($self) = @_; return @{ $self->{parts} }; } 1; __END__ =head1 NAME Travel::Routing::DE::EFA::Route - Single route (connection) between two points =head1 SYNOPSIS for my $route ( $efa->routes ) { for my $part ( $route->parts ) { # $part is a Travel::Routing::DE::EFA::Route::Part object } } =head1 VERSION version 2.19 =head1 DESCRIPTION Travel::Routing::DE::EFA::Route describes a single method of getting from one point to another. It holds a bunch of Travel::Routing::DE::EFA::Route::Part(3pm) objects describing the parts of the route in detail. Each part depends on the previous one. You usually want to acces it via C<< $efa->routes >>. =head1 METHODS =head2 ACCESSORS =over =item $route->duration route duration as string in HH:MM format =item $route->parts Returns a list of Travel::Routing::DE::EFA::Route::Part(3pm) elements describing the actual route =item $route->ticket_type Type of the required ticket for this route, if available (empty string otherwise) =item $route->fare_adult ticket price for an adult in EUR =item $route->fare_child ticket price for a child in EUR =item $route->vehicle_time on-vehicle time (excluding waiting time) of the route in minutes =back =head1 DIAGNOSTICS None. =head1 DEPENDENCIES None. =head1 BUGS AND LIMITATIONS None known. =head1 SEE ALSO Travel::Routing::DE::EFA(3pm), Travel::Routing::DE::EFA::Route::Part(3pm). =head1 AUTHOR Copyright (C) 2011-2015 by Daniel Friesel Ederf@finalrewind.orgE =head1 LICENSE This program is licensed under the same terms as Perl itself. Travel-Routing-DE-VRR-2.19/lib/Travel/Routing/DE/EFA/Route000700001750001750 013653243016 21713 5ustar00derfderf000000000000Travel-Routing-DE-VRR-2.19/lib/Travel/Routing/DE/EFA/Route/Message.pm000444001750001750 546513653243016 24016 0ustar00derfderf000000000000package Travel::Routing::DE::EFA::Route::Message; use strict; use warnings; use 5.010; use parent 'Class::Accessor'; our $VERSION = '2.19'; Travel::Routing::DE::EFA::Route::Message->mk_ro_accessors( qw(is_detailed summary subject subtitle raw_content)); sub new { my ( $obj, %conf ) = @_; my $ref = \%conf; if ( not defined $ref->{subject} ) { $ref->{subject} = $ref->{summary}; } if ( defined $ref->{raw_content} ) { $ref->{is_detailed} = 1; } else { $ref->{is_detailed} = 0; } return bless( $ref, $obj ); } sub TO_JSON { my ($self) = @_; return { %{$self} }; } 1; __END__ =head1 NAME Travel::Routing::DE::EFA::Route::Message - contains a message related to a route or route part. =head1 SYNOPSIS for my $m ($routepart->regular_notes, $routepart->current_notes) { if ($m->is_detailed) { printf("%s: %s\n", $m->subtitle, $m->subject); } else { say $m->summary; } } =head1 VERSION version 2.19 =head1 DESCRIPTION B contains information about a specific route or route part, such as wheelchair accessibility, unscheduled route diversions and cancelled stops. Often, this information is not used in the backend's route calculation, so a message may invalidate a certain route or route part. There are two types of messages provided by the backend: oneliners and detailed messages. There is no known distinction regarding their type or content. Also, there are some other backend-provided fields not yet covered by this module, so expect changes in future releases. A oneline message consists of a single string which can be accesed using B or B and its B accessor returns false. A detailed message has a subject, subtitle, summary and detailed HTML content. =head1 METHODS =head2 ACCESSORS =over =item $message->is_detailed True if all accessors (fields) are set, false otherwise. When this field is false, only B and B are set (and they will return the same string). =item $message->summary Message summary. =item $message->subject Message subject. May be the same string as the subtitle. =item $message->subtitle Message subtitle. May be the same string as the summary. =item $message->raw_content Raw HTML content. May contain information not available via any other accessor. =back =head1 DIAGNOSTICS None. =head1 DEPENDENCIES None. =head1 BUGS AND LIMITATIONS This module does not yet provide access to all data provided by the backend. Most notably, B is not properly parsed yet. =head1 SEE ALSO Travel::Routing::DE::EFA(3pm), Travel::Routing::DE::EFA::Route::Part(3pm). =head1 AUTHOR Copyright (C) 2015 by Daniel Friesel Ederf@finalrewind.orgE =head1 LICENSE This program is licensed under the same terms as Perl itself. Travel-Routing-DE-VRR-2.19/lib/Travel/Routing/DE/EFA/Route/Part.pm000444001750001750 1740013653243016 23350 0ustar00derfderf000000000000package Travel::Routing::DE::EFA::Route::Part; use strict; use warnings; use 5.010; use parent 'Class::Accessor'; our $VERSION = '2.19'; Travel::Routing::DE::EFA::Route::Part->mk_ro_accessors( qw(arrival_platform arrival_stop arrival_date arrival_time arrival_sdate arrival_stime delay departure_platform departure_stop departure_date departure_time departure_sdate departure_stime footpath_duration footpath_type train_destination train_line train_product ) ); sub new { my ( $obj, %conf ) = @_; my $ref = \%conf; return bless( $ref, $obj ); } sub arrival_routemaps { my ($self) = @_; return @{ $self->{arrival_routemaps} }; } sub arrival_stationmaps { my ($self) = @_; return @{ $self->{arrival_stationmaps} }; } sub arrival_stop_and_platform { my ($self) = @_; if ( length( $self->arrival_platform ) ) { return sprintf( '%s: %s', $self->get(qw(arrival_stop arrival_platform)) ); } return $self->arrival_stop; } sub departure_routemaps { my ($self) = @_; return @{ $self->{departure_routemaps} }; } sub departure_stationmaps { my ($self) = @_; return @{ $self->{departure_stationmaps} }; } sub departure_stop_and_platform { my ($self) = @_; if ( length( $self->departure_platform ) ) { return sprintf( '%s: %s', $self->get(qw(departure_stop departure_platform)) ); } return $self->departure_stop; } sub footpath_parts { my ($self) = @_; if ( $self->{footpath_parts} ) { return @{ $self->{footpath_parts} }; } return; } sub is_cancelled { my ($self) = @_; if ( $self->{delay} and $self->{delay} eq '-9999' ) { return 1; } return; } # DEPRECATED sub extra { my ($self) = @_; my @ret = map { $_->summary } @{ $self->{regular_notes} // [] }; return @ret; } sub regular_notes { my ($self) = @_; if ( $self->{regular_notes} ) { return @{ $self->{regular_notes} }; } return; } sub current_notes { my ($self) = @_; if ( $self->{current_notes} ) { return @{ $self->{current_notes} }; } return; } sub via { my ($self) = @_; return @{ $self->{via} // [] }; } 1; __END__ =head1 NAME Travel::Routing::DE::EFA::Route::Part - Describes one connection between two points, without interchanges =head1 SYNOPSIS for my $part ( $route->parts ) { if ( $part->regular_notes ) { say join( "\n", $part->regular_notes ); } if ( $part->current_notes ) { say join( "\n", map [ $_->{summary} ] $part->current_notes ); } printf( "%s at %s -> %s at %s, via %s to %s", $part->departure_time, $part->departure_stop, $part->arrival_time, $part->arrival_stop, $part->train_line, $part->train_destination, ); } =head1 VERSION version 2.19 =head1 DESCRIPTION B holds one specific connection (without interchanges) between two points. It specifies the start/stop point and time, the train line and its destination, and optional additional data. It is usually obtained by a call to Travel::Routing::DE::EFA::Route(3pm)'s B method. =head1 METHODS =head2 ACCESSORS "Actual" in the description means that the delay (if available) is already included in the calculation, "Scheduled" means it isn't. =over =item $part->arrival_stop arrival stop (city name plus station name) =item $part->arrival_platform arrival platform (either "Gleis x" or "Bstg. x") =item $part->arrival_stop_and_platform "stop: platform" concatenation =item $part->arrival_date Actual arrival date in DD.MM.YYYY format =item $part->arrival_time Actual arrival time in HH:MM format =item $part->arrival_sdate Scheduled arrival date in DD.MM.YYYY format =item $part->arrival_stime Scheduled arrival time in HH:MM format =item $part->arrival_routemaps List of URLs, may be empty. Each URL poinst to a transfer map for the arrival station, usually outlining how to transfer from this train to the next one (if applicable). =item $part->arrival_stationmaps List of URLs, may be empty. Each URL points to an HTML map of the arrival station. =item $part->current_notes Remarks about unscheduled changes to the line serving this connaction part, such as cancelled stops. Most times, the EFA service does not include this information in its route calculations. Returns a list of Travel::Routing::DE::EFA::Route::Message(3pm) objects. =item $part->delay delay in minutes, 0 if unknown =item $part->departure_stop departure stop (city name plus station name) =item $part->departure_platform departure platform (either "Gleis x" or "Bstg. x") =item $part->departure_stop_and_platform "stop: platform" concatenation =item $part->departure_date Actual departure date in DD.MM.YYYY format =item $part->departure_time Actual departure time in HH:MM format =item $part->departure_sdate Scheduled departure date in DD.MM.YYYY format =item $part->departure_stime Scheduled departure time in HH:MM format =item $part->departure_routemaps List of URLs, may be empty. Each URL points to a PDF a transfer map for the departure station, usually outlining how to transfer from thep previous train (if applicable) to this one. =item $part->departure_stationmaps List of URLs, may be empty. Each URL poinst to an HTML map of the departure station. =item $part->footpath_duration Walking duration when transferring before / after / during this trip in minutes. The meaning depends on the value of B. =item $part->footpath_parts Returns a list of [I, I] arrayrefs describing the footpath. For instance, ["ESCALATOR", "UP"], ["LEVEL", "LEVEL"], ["STAIRS", "UP"] means first taking an escalator up, then walking a while, and then taking a flight of stairs up again. The content of I and I comes directly from the EFA backend. At the moment, the following values are known: =over =item type: ESCALATOR, LEVEL, STAIRS =item level: DOWN, LEVEL, UP =back =item $part->footpath_type type of this footpath, passed through from the EFA backend. The value "AFTER" indicates a footpath (transfer) after this route part. The value "IDEST" indicates that this route part already is a footpath (aka a walking connection between two stops), so the B accessors contain redundant information. Other values such as "BEFORE" may also be returned, but this is unknown at this point. =item $part->is_cancelled Returns true if this part of the route has been cancelled (i.e., the entire route is probably useless), false otherwise. For unknown reasons, EFA may sometimes return routes which contain cancelled departures. =item $part->regular_notes Remarks about the line serving this connaction part. Returns a list of Travel::Routing::DE::EFA::Route::Message(3pm) objects. =item $part->train_destination Destination of the line providing the connection. May be empty. =item $part->train_line Name / number of the line. May be empty. =item $part->train_product Usually the prefix of B, for instance C<< U-Bahn >> or C<< Niederflurstrab >>. However, it may also contain special values such as C<< FuEweg >> (for a direct connection without transit vehicles) or C<< nicht umsteigen >> (in case a vehicle changes its line number at a stop). In those cases, B and B are usually empty. =item $part->via Returns a list of C<< [ "DD.MM.YYYY", "HH:MM", stop, platform ] >> arrayrefs encoding the stops passed between B and B, if supported by the backend. Returns nothing / an empty list otherwise. =back =head1 DIAGNOSTICS None. =head1 DEPENDENCIES =over =item * Class::Accessor(3pm) =back =head1 BUGS AND LIMITATIONS $part->via does not work reliably. =head1 SEE ALSO Travel::Routing::DE::EFA::Route::Message(3pm), Travel::Routing::DE::EFA(3pm), Class::Accessor(3pm). =head1 AUTHOR Copyright (C) 2011-2017 by Daniel Friesel Ederf@finalrewind.orgE =head1 LICENSE This program is licensed under the same terms as Perl itself. Travel-Routing-DE-VRR-2.19/provides000700001750001750 013653243016 16133 5ustar00derfderf000000000000Travel-Routing-DE-VRR-2.19/provides/zsh000700001750001750 013653243016 16737 5ustar00derfderf000000000000Travel-Routing-DE-VRR-2.19/provides/zsh/completions000700001750001750 013653243016 21273 5ustar00derfderf000000000000Travel-Routing-DE-VRR-2.19/provides/zsh/completions/_efa000444001750001750 344413653243016 22264 0ustar00derfderf000000000000#compdef efa typeset -a arguments typeset -A argument_pairs argument_postfix typeset arg argument_pairs=( time t+ arrive a+ date d+ bike b exclude e+ max-change m+ prefer P+ proximity p include i+ walk-speed w+ ignore-info I+ version v ) argument_postfix=( time '[Journey start time]:timestamp' arrive '[Journey end time]:timestamp' date '[Journey date]:date' bike '[Prefer connections where you can take a bike with you]' exclude '[Exclude transport types]:transport type:_efa_transports' max-change '[Maximum interchanges]:maximum interchange number' prefer '[Prefer connections]:connection type:(speed nowait nowalk)' proximity '[Take close stops into account]' include '[Include extra connection types]:connection type:(local ic ice)' walk-speed '[Walk speed]:walk speed:(normal fast slow)' ignore-info '[Ignore additional information]:regex' verison '[Print version information]' ) arguments=( '--'{from,to,via}':city: :stop: ' '--'{from,to,via}'-type:type:(stop address poi)' '(--depart --arrive)--time:time' '(--depart --time)--arrive:time' '(--arrive --time)--depart:time' '*--post:POST key=value' ) for arg in ${(k)argument_pairs}; { arguments+='(--'${arg}')-'${argument_pairs[$arg]}${argument_postfix[$arg]} arguments+='(-'${${argument_pairs[$arg]}[1]}')--'${arg}${argument_postfix[$arg]} } function _efa_transports { typeset -a keys used_prefixes typeset prefix='' keys=(zug s-bahn u-bahn stadtbahn tram stadtbus regionalbus schnellbus seilbahn schiff ast sonstige) if [[ -prefix *, ]] { prefix=${words[$CURRENT]%,*}, used_prefixes=(${(s:,:)prefix}) } _wanted expression expl 'sort expression' \ compadd -F used_prefixes -qS , -P "$prefix" $keys } _arguments -s $arguments Travel-Routing-DE-VRR-2.19/scripts000700001750001750 013653243016 15767 5ustar00derfderf000000000000Travel-Routing-DE-VRR-2.19/scripts/check-efa-urls000555001750001750 205213653243016 20654 0ustar00derfderf000000000000#!/usr/bin/env zsh export PERL5LIB=lib IFS=',' checks="BSVG,Braunschweig,Hbf,Volkmarode,Moorhüttenweg DING,Ulm,Hbf,Ulm,Theodor-Heuss-Platz KVV,Karlsruhe,Hbf,Karlsruhe,Tivoli LinzAG,Linz,Hbf,Linz,Hart MVV,München,Hackerbrücke,München,Seeholzenweg NVBW,Stuttgart,Brendle (Großmarkt),Stuttgart,Schwabstraße SVV,Salzburg,Hbf,Salzburg,Mirabellplatz TLEM,London,Waterloo Underground Station,London,St Pancras Way VAG,Schallstadt,Bf,Freiburg im Breisgau,Hbf VBL,Luzern,Bf,Luzern,Brüggligasse Verbundlinie,Graz,Hbf,Graz,Mariatrost VGN,Nürnberg,Hbf,Nürnberg,Messe VMV,Schwerin,Hbf,Schwerin,Dreescher Markt VOR,Wien,Hbf,Wien,Praterstern VRN,Mannheim,Hbf,Ludwigshafen (Rhein),Hbf VRR,Essen,Hbf,Essen,Rüttenscheider Stern VRR2,Essen,Hbf,Essen,Rüttenscheider Stern VVO,Dresden,Hbf,Dresden,Altmarkt VVS,Stuttgart,Brendle (Großmarkt),Stuttgart,Schwabstraße" echo $checks | while read service from_name from_place to_name to_place; do echo -n "${service} ... " if bin/efa -s $service $from_name $from_place $to_name $to_place > /dev/null; then echo OK fi done Travel-Routing-DE-VRR-2.19/scripts/makedeb-docker000555001750001750 57613653243016 20711 0ustar00derfderf000000000000#!/bin/sh mkdir -p out docker run --rm -v "${PWD}:/orig:ro" -v "${PWD}/scripts:/scripts:ro" \ -v "${PWD}/out:/out" -e USER=$(id -u) -e GROUP=$(id -g) \ -e "DEBEMAIL=${DEBEMAIL}" -e "DEBFULLNAME=${DEBFULLNAME}" \ -e "LOGNAME=${LOGNAME}" -e "VERSION=$(git describe --dirty)-1" \ debian:buster /scripts/makedeb-docker-helper echo "Debian package has been written to $(pwd)/out" Travel-Routing-DE-VRR-2.19/scripts/makedeb-docker-helper000555001750001750 142413653243016 22177 0ustar00derfderf000000000000#!/bin/sh set -e export DEBIAN_FRONTEND=noninteractive apt-get update apt-get -y install \ apt-file dh-make-perl libmodule-build-perl \ libclass-accessor-perl libexception-class-perl libfile-slurp-perl \ libwww-perl libxml-libxml-perl \ libtest-compile-perl libtest-number-delta-perl libtest-pod-perl \ libtest-fatal-perl libtest-simple-perl apt-file update apt-cache dumpavail | dpkg --merge-avail mkdir -p /src/app cp -a /orig/Build.PL /orig/Changelog /orig/README /src/app cp -a /orig/bin /orig/lib /orig/t /src/app cd /src/app sed -i 's/sign => 1/sign => 0/' Build.PL perl Build.PL perl Build perl Build manifest perl Build dist mv Travel-Routing-DE-VRR-*.tar.gz ../app.tar.gz dh-make-perl --build --version "${VERSION}" chown ${USER}:${GROUP} ../*.deb mv -v ../*.deb /out Travel-Routing-DE-VRR-2.19/t000700001750001750 013653243016 14543 5ustar00derfderf000000000000Travel-Routing-DE-VRR-2.19/t/20-vrr.t000444001750001750 715313653243016 16135 0ustar00derfderf000000000000#!/usr/bin/env perl use strict; use warnings; use 5.010; use Test::More tests => 67; use Test::Fatal; BEGIN { use_ok('Travel::Routing::DE::VRR'); } require_ok('Travel::Routing::DE::VRR'); sub efa_conf { my $ret = { efa_url => 'http://efa.vrr.de/vrr/XSLT_TRIP_REQUEST2', origin => ['Essen', 'HBf'], destination => ['Koeln', 'HBf'], rm_base => 'http://efa.vrr.de/vrr/', sm_base => 'http://efa.vrr.de/download/envmaps/', lwp_options => {}, submit => 0, }; foreach my $p (@_) { $ret->{$p->[0]} = $p->[1]; } return $ret; } sub efa_new { return new_ok( 'Travel::Routing::DE::VRR' => [%{efa_conf(@_)}] ); } sub is_efa_post { my ($ck, $cv, @post) = @_; my $efa = efa_new([$ck, $cv]); my $ok = 1; is_deeply( $efa->{'config'}, efa_conf([$ck, $cv]), "$ck => $cv: conf ok", ); foreach my $ref (@post) { my ($key, $value) = @{$ref}; if (not defined $efa->{'post'}->{"key"} and not defined $value) { next; } if ($efa->{'post'}->{"$key"} ne $value) { $ok = 0; last; } } ok( $ok, "$ck => $cv: POST okay", ); } sub is_efa_err { my ($ck, $cv, $exception) = @_; isa_ok( exception { Travel::Routing::DE::VRR->new(%{efa_conf([$ck, $cv])}) }, $exception, "$ck => $cv" ); } is_efa_post('ignored', 'ignored'); my $efa; is_efa_post( 'via', ['MH', 'HBf'], ['place_via', 'MH'], ['name_via', 'HBf'], ['type_via', 'stop'], ); is_efa_post( 'origin', ['D', 'Fuerstenwall 232', 'address'], ['place_origin', 'D'], ['name_origin', 'Fuerstenwall 232'], ['type_origin', 'address'], ); is_efa_post( 'departure_time', '22:23', ['itdTripDateTimeDepArr', 'dep'], ['itdTimeHour', '22'], ['itdTimeMinute', '23'], ); is_efa_post( 'arrival_time', '16:38', ['itdTripDateTimeDepArr', 'arr'], ['itdTimeHour', '16'], ['itdTimeMinute', '38'], ); is_efa_post( 'date', '2.10.2009', ['itdDateDay', '2'], ['itdDateMonth', '10'], ['itdDateYear', '2009'], ); is_efa_post( 'date', '26.12.', ['itdDateDay', '26'], ['itdDateMonth', '12'], ['itdDateYear', (localtime(time))[5] + 1900], ); is_efa_post( 'exclude', [qw[zug]], ['inclMOT_0', undef], ); is_efa_post( 'exclude', [qw[stadtbus schiff ast]], ['inclMOT_5', undef], ['inclMOT_9', undef], ['inclMOT_10', undef], ); is_efa_post( 'select_interchange_by', 'speed', ['routeType', 'LEASTTIME'], ); is_efa_post( 'select_interchange_by', 'waittime', ['routeType', 'LEASTINTERCHANGE'], ); is_efa_post( 'select_interchange_by', 'distance', ['routeType', 'LEASTWALKING'], ); is_efa_post( 'train_type', 'local', ['lineRestriction', 403], ); is_efa_post( 'train_type', 'ic', ['lineRestriction', 401], ); is_efa_post( 'train_type', 'ice', ['lineRestriction', 400], ); is_efa_post( 'walk_speed', 'normal', ['changeSpeed', 'normal'], ); is_efa_post( 'max_interchanges', 5, ['maxChanges', 5], ); is_efa_post( 'use_near_stops', 1, ['useProxFootSearch', 1], ); is_efa_post( 'with_bike', 1, ['bikeTakeAlong', 1], ); is_efa_err( 'departure_time', '37:00', 'Travel::Routing::DE::EFA::Exception::Setup', ); is_efa_err( 'departure_time', '07', 'Travel::Routing::DE::EFA::Exception::Setup', ); is_efa_err( 'train_type', 'invalid', 'Travel::Routing::DE::EFA::Exception::Setup', ); is_efa_err( 'walk_speed', 'invalid', 'Travel::Routing::DE::EFA::Exception::Setup', ); is_efa_err( 'select_interchange_by', 'invalid', 'Travel::Routing::DE::EFA::Exception::Setup', ); is_efa_err( 'exclude', [qw[sonstige invalid]], 'Travel::Routing::DE::EFA::Exception::Setup', ); is_efa_err( 'date', '42.5.2003', 'Travel::Routing::DE::EFA::Exception::Setup', ); is_efa_err( 'date', '7.', 'Travel::Routing::DE::EFA::Exception::Setup', ); Travel-Routing-DE-VRR-2.19/t/21-vrr.t000444001750001750 1126313653243016 16153 0ustar00derfderf000000000000#!/usr/bin/env perl use strict; use warnings; use 5.010; use utf8; use File::Slurp qw(slurp); use Test::More tests => 82; BEGIN { use_ok('Travel::Routing::DE::EFA'); } require_ok('Travel::Routing::DE::EFA'); my $xml = slurp('t/in/e_alf_d_hbf.xml'); my $routing = Travel::Routing::DE::EFA->new_from_xml( efa_url => 'http://efa.vrr.de/vrr/XSLT_TRIP_REQUEST2', xml => $xml ); isa_ok( $routing, 'Travel::Routing::DE::EFA' ); can_ok( $routing, 'routes' ); for my $r ( $routing->routes ) { isa_ok( $r, 'Travel::Routing::DE::EFA::Route' ); can_ok( $r, qw(duration parts ticket_type fare_adult fare_child vehicle_time) ); for my $c ( $r->parts ) { isa_ok( $c, 'Travel::Routing::DE::EFA::Route::Part' ); can_ok( $c, qw( arrival_stop arrival_platform arrival_stop_and_platform arrival_date arrival_sdate arrival_time arrival_stime departure_stop departure_platform departure_stop_and_platform departure_date departure_sdate departure_time departure_stime delay extra train_line train_destination ) ); } } my $r0 = ( $routing->routes )[0]; is( $r0->duration, '00:45', 'r0: duration' ); is( $r0->vehicle_time, 35, 'r0: vehicle_time' ); is( $r0->ticket_type, 'B', 'r0: ticket_type' ); is( $r0->fare_adult, '4.70', 'r0: fare_adult' ); is( $r0->fare_child, '1.40', 'r0: fare_child' ); my ( $c0, $c1 ) = $r0->parts; is( $c0->delay, 0, 'r0,0: delay' ); is_deeply( [ $c0->extra ], [], 'r0,0: extra' ); is_deeply( [ $c0->departure_routemaps ], ['http://efa.vrr.de/vrr/FILELOAD?Filename=dwa_4ED23486C.pdf'], 'r0,0: departure_routemaps'); is_deeply( [ $c0->departure_stationmaps ], [], 'r0,0: departure_stationmaps'); is_deeply( [ $c0->arrival_routemaps ], ['http://efa.vrr.de/vrr/FILELOAD?Filename=dwa_4ED23486D.pdf'], 'r0,0: arrival_routemaps'); is_deeply( [ $c0->arrival_stationmaps ], ['http://efa.vrr.de/download/envmaps/vrr/09289_e_hbf_1.htm'], 'r0,0: arrival_stationmaps'); is( $c0->train_line, 'Straßenbahn 107', 'r0,0: line' ); is( $c0->train_destination, 'Essen Hanielstr. Schleife', 'r0,0: dest' ); is( $c0->departure_stop, 'Essen Alfredusbad', 'r0,0: dstop' ); is( $c0->departure_platform, 'Bstg. 1', 'r0,0: dplatf' ); is( $c0->departure_stop_and_platform, 'Essen Alfredusbad: Bstg. 1', 'r0,0: dsp' ); is( $c0->departure_date, '27.11.2011', 'r0,0: drdate' ); is( $c0->departure_sdate, '27.11.2011', 'r0,0: dsdate' ); is( $c0->departure_time, '13:55', 'r0,0: drtime' ); is( $c0->departure_stime, '13:55', 'r0,0: dstime' ); is( $c0->arrival_stop, 'Essen Hauptbahnhof', 'r0,0: astop' ); is( $c0->arrival_platform, 'Bstg. 1', 'r0,0: aplatf' ); is( $c0->arrival_stop_and_platform, 'Essen Hauptbahnhof: Bstg. 1', 'r0,0: asp' ); is( $c0->arrival_date, '27.11.2011', 'r0,0: ardate' ); is( $c0->arrival_sdate, '27.11.2011', 'r0,0: asdate' ); is( $c0->arrival_time, '14:02', 'r0,0: artime' ); is( $c0->arrival_stime, '14:02', 'r0,0: astime' ); is_deeply( ($c0->via)[0], ['27.11.2011', '13:56', 'Essen Florastr.', 'Bstg. 1'], 'r0,0: via[0]'); is( $c1->delay, 3, 'r0,1: delay' ); is_deeply( [ $c1->extra ], [ 'Fahrradmitnahme begrenzt möglich' ], 'r0,1: extra' ); is_deeply( [ $c1->departure_routemaps ], ['http://efa.vrr.de/vrr/FILELOAD?Filename=dwa_4ED23486D.pdf'], 'r0,0: departure_routemaps'); is_deeply( [ $c1->departure_stationmaps ], ['http://efa.vrr.de/download/envmaps/vrr/09289_e_hbf_1.htm'], 'r0,0: departure_stationmaps'); is_deeply( [ $c1->arrival_routemaps ], ['http://efa.vrr.de/vrr/FILELOAD?Filename=dwa_4ED23486E.pdf'], 'r0,0: arrival_routemaps'); is_deeply( [ $c1->arrival_stationmaps ], ['http://efa.vrr.de/download/envmaps/vrr/18235_d_hbf_1.htm'], 'r0,0: arrival_stationmaps'); is( $c1->train_line, 'R-Bahn RE1', 'r0,1: line' ); is( $c1->train_destination, 'Aachen, Hbf', 'r0,1: dest' ); is( $c1->departure_stop, 'Essen Hauptbahnhof', 'r0,1: dstop' ); is( $c1->departure_platform, 'Gleis 2', 'r0,1: dplatf' ); is( $c1->departure_stop_and_platform, 'Essen Hauptbahnhof: Gleis 2', 'r0,1: dsp' ); is( $c1->departure_date, '27.11.2011', 'r0,1: drdate' ); is( $c1->departure_sdate, '27.11.2011', 'r0,1: dsdate' ); is( $c1->departure_time, '14:12', 'r0,1: drtime' ); is( $c1->departure_stime, '14:09', 'r0,1: dstime' ); is( $c1->arrival_stop, 'Düsseldorf Hbf', 'r0,1: astop' ); is( $c1->arrival_platform, 'Gleis 16', 'r0,1: aplatf' ); is( $c1->arrival_stop_and_platform, 'Düsseldorf Hbf: Gleis 16', 'r0,1: asp' ); is( $c1->arrival_date, '27.11.2011', 'r0,1: ardate' ); is( $c1->arrival_sdate, '27.11.2011', 'r0,1: asdate' ); is( $c1->arrival_time, '14:40', 'r0,1: artime' ); is( $c1->arrival_stime, '14:37', 'r0,1: astime' ); Travel-Routing-DE-VRR-2.19/t/in000700001750001750 013653243016 15151 5ustar00derfderf000000000000Travel-Routing-DE-VRR-2.19/t/in/ambiguous000444001750001750 11556413653243016 17312 0ustar00derfderf000000000000 Fahrplanauskunft
Aushangfahrplan
Abfahrtsmonitor
Persönlicher Fahrplan
Verbundfahrplan Schnellverkehr
Linienplan Schnellverkehr
Stadtlinienpläne
Bedienungshinweise
Bildschirmschoner
Aktuelle Hinweise
Ihr Link zu uns
Impressum
Homepage
Fahrplanauskunft
*
* von: Stadt/Ort *Essen *
Suche über Karte
Suche über Karte
*
* Haltestelle *
* Bitte auswählen
*
*
* nach: Stadt/Ort *Essen *
Suche über Karte
Suche über Karte
*
* Haltestelle *
* Bitte auswählen
*
*
* Linienauswahl
*
* alle Linien
* alle Linien ohne ICE
* nur Verbund-/Nahverkehrslinien
*
* Umsteigen / Fußwege
* *
zeitkürzeste Verbindungen
Verbindungen mit wenig Umsteigen
Verbindungen mit kurzen Fußwegen
*
Gehgeschwindigkeit
* *
normal
schnell
langsam
*
Berücksichtigung von Nachbarhaltestellen bei Start und Ziel
*
*
*
* Zeit:
* Abfahrt * Uhr * Datum
* Ankunft
*
*
*
* * *
*
*
* *
Travel-Routing-DE-VRR-2.19/t/in/e_alf_d_hbf.xml000444001750001750 40740513653243016 20304 0ustar00derfderf000000000000 Essen Essen Alfredusbad Alfredusbad Düsseldorf Duesseldorf Hbf Hbf Zug S-Bahn U-Bahn Stadtbahn Straßen-/Trambahn Stadtbus Regionalbus Schnellbus Seil-/Zahnradbahn Schiff AST/Rufbus Sonstige 10 12 0 22 21 59 54 56 62 57 60 52 50 58 66 64 69 68 80 110 113 112 130 131 154 156 152 150 172 174 170 190 182 176 186 178 184 180 192 200 202 206 204 194 223 219 208 209 218 217 212 214 216 210 221 232 230 234 240 242 254 252 250 260 270 266 262 268 264 256 272 282 280 302 300 290 306 304 314 312 316 310 322 326 328 321 324 320 334 332 330 340 344 342 350 352 358 356 366 360 364 354 362 368 380 376 382 378 374 372 383 377 370 391 389 384 388 386 414 412 410 416 424 422 420 430 442 444 436 440 438 432 434 446 450 452 463 462 460 466 468 464 476 478 470 472 474 481 491 482 510 509 504 508 506 502 500 512 514 523 521 522 524 526 520 528 530 540 542 554 550 552 586 588 584 587 580 582 622 620 614 612 610 630 632 624 640 644 642 654 652 650 658 668 656 660 666 664 670 677 675 676 678 679 672 674 700 722 720 732 730 740 746 742 750 748 754 760 752 821 822 840 850 11 EVAG Strab DHDN_RAUENBERG_BESSEL_1841 PROJECTION_MDV 3361013 459590 3361022 459573 3361030 459552 3361037 459544 3361040 459498 3361046 459468 3361054 459459 3361062 459428 3361075 459372 3361094 459301 3361107 459236 3361111 459219 3361121 459169 3361117 459140 3361123 459100 3361149 458995 3361398 457763 3361505 457246 3361663 456905 3361663 456905 3361700 456826 3361800 456643 3361872 456515 3361894 456478 3361895 456477 3361896 456477 3361896 456476 3361897 456475 3361898 456474 3361899 456472 3361901 456471 3361902 456468 3361904 456465 3361907 456462 3361909 456458 3361912 456453 3361915 456448 3361918 456443 3361922 456437 3361923 456436 DHDN_RAUENBERG_BESSEL_1841 PROJECTION_MDV 3361923 456436 3362045 456187 00 Daten DB AG Fahrradmitnahme begrenzt möglich 452 350 342 340 330 332 434 432 430 1-2 11 EVAG Strab DHDN_RAUENBERG_BESSEL_1841 PROJECTION_MDV 3361013 459589 3360972 459664 3360866 459818 3360820 459886 3360809 459902 3360809 459902 3360799 459916 3360757 459982 3360749 460003 3360655 460210 3360637 460258 3360620 460292 3360554 460423 3360544 460448 3360539 460462 3360539 460462 3360500 460567 3360502 460624 3360516 460739 3360522 460798 DHDN_RAUENBERG_BESSEL_1841 PROJECTION_MDV 3360524 460798 3360522 460798 3360523 460808 12 EVAG Bus DHDN_RAUENBERG_BESSEL_1841 PROJECTION_MDV 3360523 460808 3360512 460901 3360497 460929 3360464 460959 3360452 460965 3360460 460998 3360451 461040 3360417 461103 3360387 461143 3360366 461168 3360285 461237 3360219 461301 3360171 461393 3360140 461497 3360137 461515 3360137 461577 3360160 461636 3360180 461661 3360225 461708 3360234 461733 3360234 461733 3360238 461746 3360231 461889 3360243 461954 3360254 461990 3360276 462030 3360326 462080 3360353 462097 3360353 462097 3360374 462111 3360387 462121 3360434 462176 3360511 462417 3360539 462457 3360539 462457 3360576 462510 3360593 462529 3360647 462620 3360658 462675 3360658 462706 3360640 462791 3360621 462852 3360603 462971 3360615 463085 3360620 463105 3360672 463228 3360706 463306 3360719 463347 DHDN_RAUENBERG_BESSEL_1841 PROJECTION_MDV 3360718 463347 3360684 463409 PlanLowFloorVehicle 1 00 Daten DB AG Linie S6: Fahrradmitnahme begrenzt möglich 452 450 442 440 432 430 1-3 11 EVAG Strab DHDN_RAUENBERG_BESSEL_1841 PROJECTION_MDV 3361013 459590 3361022 459573 3361030 459552 3361037 459544 3361040 459498 3361046 459468 3361054 459459 3361062 459428 3361075 459372 3361094 459301 3361107 459236 3361111 459219 3361121 459169 3361117 459140 3361123 459100 3361149 458995 3361398 457763 3361505 457246 3361663 456905 3361663 456905 3361700 456826 3361800 456643 3361872 456515 3361894 456478 3361895 456477 3361896 456477 3361896 456476 3361897 456475 3361898 456474 3361899 456472 3361901 456471 3361902 456468 3361904 456465 3361907 456462 3361909 456458 3361912 456453 3361915 456448 3361918 456443 3361922 456437 3361923 456436 DHDN_RAUENBERG_BESSEL_1841 PROJECTION_MDV 3361923 456436 3362045 456187 00 Daten DB AG Fahrradmitnahme begrenzt möglich 00 Daten DB AG Fahrradmitnahme begrenzt möglich 452 350 342 340 330 332 434 432 430 1-3 11 EVAG Strab DHDN_RAUENBERG_BESSEL_1841 PROJECTION_MDV 3361013 459590 3361022 459573 3361030 459552 3361037 459544 3361040 459498 3361046 459468 3361054 459459 3361062 459428 3361075 459372 3361094 459301 3361107 459236 3361111 459219 3361121 459169 3361117 459140 3361123 459100 3361149 458995 3361398 457763 3361505 457246 3361663 456905 DHDN_RAUENBERG_BESSEL_1841 PROJECTION_MDV 3361923 456436 3362045 456187 00 Daten DB AG Fahrradmitnahme begrenzt möglich 452 350 340 330 332 434 432 430 1-2 Travel-Routing-DE-VRR-2.19/t/in/e_hbf_b_hbf.ice000444001750001750 16603413653243016 20237 0ustar00derfderf000000000000 Fahrplanauskunft
Aushangfahrplan
Abfahrtsmonitor
Persönlicher Fahrplan
Verbundfahrplan Schnellverkehr
Linienplan Schnellverkehr
Stadtlinienpläne
Bedienungshinweise
Bildschirmschoner
Aktuelle Hinweise
Ihr Link zu uns
Impressum
Homepage
Fahrplanauskunft
*
*
* von: Essen / Hauptbahnhof nach: Berlin / Hauptbahnhof
*
Abfahrt: 12:00 Uhr Datum: 07.06.2010
*
*
*
* Fahrtdaten Fahrtdauer Umsteigen Preis (Erw./Ki.)
*
* 1. Fahrt: am 07.06.2010 von 11:23 bis 15:08 Uhr 03:45 0
* 2. Fahrt: am 07.06.2010 von 12:23 bis 16:11 Uhr 03:48 0
* 3. Fahrt: am 07.06.2010 von 13:23 bis 17:03 Uhr 03:40 1
* 4. Fahrt: am 07.06.2010 von 13:23 bis 17:08 Uhr 03:45 0
*
*
*
* zur Druckversion der ausgewählten Verbindungen In Datei Drucken zur Druckversion der ausgewählten Verbindungen (Alle Angaben ohne Gewähr.)
*
*
* *
*
*
*
* 1. Fahrt
11:23
früher
ab Essen Hauptbahnhof: Gleis 4 *Umgebungsplan*Umgebungsplan*Umgebungsplan*Stadtplan Zug ICE 547 InterCityExpress
* 12:07 an Hamm (Westf): Gleis 5 E-H *Stadtplan Berlin Ostbahnhof
* Bordrestaurant
* nicht umsteigen,
* Weiterfahrt im selben Fahrzeug möglich
12:11 ab Hamm (Westf): Gleis 5 *Stadtplan Zug ICE 557 InterCityExpress
* 13:34 an Hannover Hauptbahnhof: Gleis 9 Berlin Ostbahnhof
* Bordrestaurant
* nicht umsteigen,
* Weiterfahrt im selben Fahrzeug möglich
13:37 ab Hannover Hauptbahnhof: Gleis 9 Zug ICE 547 InterCityExpress
* 15:08
später
an Berlin Hbf: Gleis 12 D - G Berlin Ostbahnhof
*
* Verbindung zum Drucken auswählen
*
*
*
* 2. Fahrt
12:23
früher
ab Essen Hauptbahnhof: Gleis 4 *Umgebungsplan*Umgebungsplan*Umgebungsplan*Stadtplan Zug ICE 849 InterCityExpress
* 13:07 an Hamm (Westf): Gleis 5 E-H *Stadtplan Berlin Ostbahnhof
* Bordrestaurant
* nicht umsteigen,
* Weiterfahrt im selben Fahrzeug möglich
13:11 ab Hamm (Westf): Gleis 5 *Stadtplan Zug ICE 859 InterCityExpress
* 14:31 an Hannover Hauptbahnhof: Gleis 10 Berlin Ostbahnhof
* Bordrestaurant
* nicht umsteigen,
* Weiterfahrt im selben Fahrzeug möglich
14:34 ab Hannover Hauptbahnhof: Gleis 10 Zug ICE 849 InterCityExpress
* 16:11
später
an Berlin Hbf: Gleis 12 A - D Berlin Ostbahnhof
*
* Verbindung zum Drucken auswählen
*
*
*
* 3. Fahrt
13:23
früher
ab Essen Hauptbahnhof: Gleis 6 *Umgebungsplan*Umgebungsplan*Umgebungsplan*Stadtplan Zug ICE 549 InterCityExpress
* 14:07 an Hamm (Westf): Gleis 5 E-H *Stadtplan Berlin Ostbahnhof
* Bordrestaurant
* nicht umsteigen,
* Weiterfahrt im selben Fahrzeug möglich
14:11 ab Hamm (Westf): Gleis 5 *Stadtplan Zug ICE 559 InterCityExpress
* 15:34 an Hannover Hauptbahnhof: Gleis 9 Berlin Ostbahnhof
* Bordrestaurant
* nicht umsteigen,
* Weiterfahrt im selben Fahrzeug möglich
15:37 ab Hannover Hauptbahnhof: Gleis 9 Zug ICE 549 InterCityExpress
* 16:54
später
an Berlin-Spandau: Gleis 6 A - C Berlin Ostbahnhof
17:03 ab Berlin-Spandau Zug IC 145 InterCity
* 17:03
später
an Berlin Hbf Berlin Hbf
* Linie KBS 202: SnackPoint/Imbiss im Zug
*
* Verbindung zum Drucken auswählen
*
*
*
* 4. Fahrt
13:23
früher
ab Essen Hauptbahnhof: Gleis 6 *Umgebungsplan*Umgebungsplan*Umgebungsplan*Stadtplan Zug ICE 549 InterCityExpress
* 14:07 an Hamm (Westf): Gleis 5 E-H *Stadtplan Berlin Ostbahnhof
* Bordrestaurant
* nicht umsteigen,
* Weiterfahrt im selben Fahrzeug möglich
14:11 ab Hamm (Westf): Gleis 5 *Stadtplan Zug ICE 559 InterCityExpress
* 15:34 an Hannover Hauptbahnhof: Gleis 9 Berlin Ostbahnhof
* Bordrestaurant
* nicht umsteigen,
* Weiterfahrt im selben Fahrzeug möglich
15:37 ab Hannover Hauptbahnhof: Gleis 9 Zug ICE 549 InterCityExpress
* 17:08
später
an Berlin Hbf: Gleis 12 A - D Berlin Ostbahnhof
*
* Verbindung zum Drucken auswählen
*
*
*
Abweichung Verspätungen sind berücksichtigt Pünktlich Fahrt voraussichtlich pünktlich
*
*
*
* zur Druckversion der ausgewählten Verbindungen In Datei Drucken zur Druckversion der ausgewählten Verbindungen (Alle Angaben ohne Gewähr.)
*
*
* *
*
*
* *
Travel-Routing-DE-VRR-2.19/t/in/e_hbf_b_hbf.xml000444001750001750 10460113653243016 20267 0ustar00derfderf000000000000 Essen Essen Hauptbahnhof hbf Köln Koeln Dom/Hbf Dom/Hbf Zug S-Bahn U-Bahn Stadtbahn Straßen-/Trambahn Stadtbus Regionalbus Schnellbus Seil-/Zahnradbahn Schiff AST/Rufbus Sonstige 00 Daten DB AG Bordrestaurant 1-1 00 Daten DB AG Bordbistro WLAN verfügbar zwischen Dortmund-Köln-Frankfurt-Stuttgart-München 1-1 00 Daten DB AG Fahrradmitnahme begrenzt möglich NRW-Tarif: 17,00 ? (2.Kl) / PauschalpreisTickets gültig TicketType NRW-Tarif TicketName SchöneReiseTicket NRW Einzelfahrt PREIS_1KL_ERW 26.50 PREIS_2KL_ERW 17.00 PREIS_1KL_KIND 13.25 PREIS_2KL_KIND 8.50 TicketType NRW-Tarif TicketName SchöneFahrtTicket NRW PREIS_1KL_ERW PREIS_2KL_ERW 16.60 PREIS_1KL_KIND PREIS_2KL_KIND 8.30 TicketType NRW-Tarif TicketName SchönerTagTicket NRW 5 Personen PREIS_1KL_ERW PREIS_2KL_ERW 36.00 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchönerTagTicket NRW Single PREIS_1KL_ERW PREIS_2KL_ERW 26.00 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchöneWocheTicket NRW PREIS_1KL_ERW 118.60 PREIS_2KL_ERW 80.80 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchönerMonatTicket NRW PREIS_1KL_ERW 370.90 PREIS_2KL_ERW 253.70 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchönerMonatTicket NRW Abo PREIS_1KL_ERW 303.80 PREIS_2KL_ERW 207.90 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchönerMonatTicket NRW Azubi PREIS_1KL_ERW PREIS_2KL_ERW 223.50 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchönerMonatTicket NRW Azubi Abo PREIS_1KL_ERW PREIS_2KL_ERW 183.30 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchönesJahrTicket NRW PREIS_1KL_ERW 3675.00 PREIS_2KL_ERW 2600.00 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchönesJahrTicket NRW Abo PREIS_1KL_ERW 320.00 PREIS_2KL_ERW 225.00 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName FahrradTicket NRW PREIS_1KL_ERW PREIS_2KL_ERW 4.00 PREIS_1KL_KIND PREIS_2KL_KIND 1-1 00 Daten DB AG Bordrestaurant 1-1 Travel-Routing-DE-VRR-2.19/t/in/e_hbf_d_hbf.json000444001750001750 21566213653243016 20454 0ustar00derfderf000000000000{ "parameters":[ { "name":"mdvMap_destination", "value":"::" }, { "name":"id_destination", "value":":destination" }, { "name":"ShowFare", "value":" " }, { "name":"mdvMap2_destination", "value":"" }, { "name":"view", "value":"" }, { "name":"mapState_origin", "value":"" }, { "name":"mapState_destination", "value":"" }, { "name":"mdvMap2_origin", "value":"" }, { "name":"enableMobilityRestrictionOptionsWithButton", "value":"" }, { "name":"id_via", "value":":via" }, { "name":"mdvMap_origin", "value":"::" }, { "name":"id_origin", "value":":origin" }, { "name":"command", "value":"" }, { "name":"mdvMap2_via", "value":"" }, { "name":"mdvMap_via", "value":"::" }, { "name":"mapState_via", "value":"" }, { "name":"transpCompany", "value":"vrr" }, { "name":"priceCalculator", "value":"" }, { "name":"requestID", "value":"1" }, { "name":"sessionID", "value":"efa1.vrr.de_46961885" } ], "trips":[ { "trip":{ "duration":"00:49", "interchange":"0", "desc":"4", "legs":[ { "points":[ { "name":"Essen Hauptbahnhof", "place":"Essen", "nameWithPlace":"Essen Hauptbahnhof", "usage":"departure", "omc":"5113000", "placeID":"18", "desc":"", "dateTime":{ "date":"27.02.2014", "time":"15:55" }, "stamp":{ "date":"20140227", "time":"1555" }, "links":[ { "name":"RM", "type":"RM", "href":"FILELOAD?Filename=dwa_530F53EF0.pdf" }, { "name":"SM", "type":"SM", "href":"vrr/09289_e_hbf_1.htm" } ], "ref":{ "id":"20009289", "area":"98", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3362053,456277" } }, { "name":"Düsseldorf Hbf", "place":"Düsseldorf", "nameWithPlace":"Düsseldorf Hbf", "usage":"arrival", "omc":"5111000", "placeID":"6", "desc":"", "dateTime":{ "date":"27.02.2014", "time":"16:44" }, "stamp":{ "date":"20140227", "time":"1644" }, "links":[ { "name":"RM", "type":"RM", "href":"FILELOAD?Filename=dwa_530F53EF1.pdf" }, { "name":"SM", "type":"SM", "href":"vrr/18235_d_hbf_1.htm" } ], "ref":{ "id":"20018235", "area":"98", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3346062,481506" } } ], "mode":{ "name":"S-Bahn S1", "number":"S1", "type":"2", "code":"1", "destination":"Solingen Hbf", "destID":"20013800", "desc":"", "diva":{ "branch":"92", "line":"E01", "supplement":" ", "dir":"R", "project":"j14", "network":"ddb", "stateless":"ddb:92E01: :R:j14", "operator":"DB AG", "opCode":"00" } }, "stopSeq":[ { "name":"Essen Hauptbahnhof", "nameWO":"Hauptbahnhof", "place":"", "nameWithPlace":"", "omc":"5113000", "placeID":"18", "platformName":"Gleis 7", "ref":{ "id":"20009289", "area":"98", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3362053,456277", "depDateTime":"20140227 15:55", "arrDelay":"-1", "depDelay":"0" } }, { "name":"Essen West S", "nameWO":"West S", "place":"", "nameWithPlace":"", "omc":"5113000", "placeID":"18", "platformName":"Gleis 4", "ref":{ "id":"20009643", "area":"98", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3359766,455976", "arrDateTime":"20140227 15:57", "depDateTime":"20140227 15:58", "arrDelay":"0", "depDelay":"0" } }, { "name":"Essen Frohnhausen S", "nameWO":"Frohnhausen S", "place":"", "nameWithPlace":"", "omc":"5113000", "placeID":"18", "platformName":"Gleis 1", "ref":{ "id":"20009244", "area":"98", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3358546,455781", "arrDateTime":"20140227 16:00", "depDateTime":"20140227 16:00", "arrDelay":"0", "depDelay":"0" } }, { "name":"Mülheim Hauptbahnhof", "nameWO":"Hauptbahnhof", "place":"", "nameWithPlace":"", "omc":"5117000", "placeID":"17", "platformName":"Gleis 5", "ref":{ "id":"20015225", "area":"98", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3353190,458255", "arrDateTime":"20140227 16:05", "depDateTime":"20140227 16:05", "arrDelay":"0", "depDelay":"0" } }, { "name":"Mülheim West Bahnhof", "nameWO":"West Bahnhof", "place":"", "nameWithPlace":"", "omc":"5117000", "placeID":"17", "platformName":"", "ref":{ "id":"20015227", "area":"98", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3352083,457301", "arrDelay":"-1", "depDelay":"-1" } }, { "name":"Mülheim Styrum S", "nameWO":"Styrum S", "place":"", "nameWithPlace":"", "omc":"5117000", "placeID":"17", "platformName":"Gleis 5", "ref":{ "id":"20015012", "area":"98", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3350829,456171", "arrDateTime":"20140227 16:08", "depDateTime":"20140227 16:08", "arrDelay":"0", "depDelay":"0" } }, { "name":"Duisburg Hbf", "nameWO":"Duisburg Hbf", "place":"", "nameWithPlace":"", "omc":"5112000", "placeID":"20", "platformName":"Gleis 5", "ref":{ "id":"20016032", "area":"98", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3345397,458061", "arrDateTime":"20140227 16:13", "depDateTime":"20140227 16:15", "arrDelay":"0", "depDelay":"0" } }, { "name":"Duisburg Schlenk Bf", "nameWO":"Schlenk Bf", "place":"", "nameWithPlace":"", "omc":"5112000", "placeID":"20", "platformName":"Gleis 1", "ref":{ "id":"20016341", "area":"98", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3345103,461162", "arrDateTime":"20140227 16:17", "depDateTime":"20140227 16:18", "arrDelay":"0", "depDelay":"0" } }, { "name":"Duisburg Buchholz Bf", "nameWO":"Buchholz Bf", "place":"", "nameWithPlace":"", "omc":"5112000", "placeID":"20", "platformName":"Gleis 1", "ref":{ "id":"20016332", "area":"98", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3345193,463355", "arrDateTime":"20140227 16:20", "depDateTime":"20140227 16:20", "arrDelay":"0", "depDelay":"0" } }, { "name":"Duisburg Großenbaum S", "nameWO":"Großenbaum S", "place":"", "nameWithPlace":"", "omc":"5112000", "placeID":"20", "platformName":"Gleis 5", "ref":{ "id":"20016129", "area":"98", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3345312,465425", "arrDateTime":"20140227 16:22", "depDateTime":"20140227 16:23", "arrDelay":"0", "depDelay":"0" } }, { "name":"Duisburg Rahm BF", "nameWO":"Rahm BF", "place":"", "nameWithPlace":"", "omc":"5112000", "placeID":"20", "platformName":"Gleis 1", "ref":{ "id":"20016416", "area":"98", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3345401,467427", "arrDateTime":"20140227 16:25", "depDateTime":"20140227 16:25", "arrDelay":"0", "depDelay":"0" } }, { "name":"D-Angermund S", "nameWO":"Angermund S", "place":"", "nameWithPlace":"", "omc":"5111000", "placeID":"6", "platformName":"Gleis 1", "ref":{ "id":"20018372", "area":"98", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3345496,469339", "arrDateTime":"20140227 16:27", "depDateTime":"20140227 16:28", "arrDelay":"0", "depDelay":"0" } }, { "name":"Düsseldorf Flughafen Bahnhof", "nameWO":"Flughafen Bahnhof", "place":"", "nameWithPlace":"", "omc":"5111000", "placeID":"6", "platformName":"Gleis 6", "ref":{ "id":"20018488", "area":"98", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3345657,473578", "arrDateTime":"20140227 16:31", "depDateTime":"20140227 16:32", "arrDelay":"0", "depDelay":"0" } }, { "name":"D-Unterrath S", "nameWO":"Unterrath S", "place":"", "nameWithPlace":"", "omc":"5111000", "placeID":"6", "platformName":"Gleis 1", "ref":{ "id":"20018206", "area":"98", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3345800,475246", "arrDateTime":"20140227 16:34", "depDateTime":"20140227 16:34", "arrDelay":"0", "depDelay":"0" } }, { "name":"D-Derendorf S", "nameWO":"Derendorf S", "place":"", "nameWithPlace":"", "omc":"5111000", "placeID":"6", "platformName":"Gleis 1", "ref":{ "id":"20018285", "area":"98", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3346085,478491", "arrDateTime":"20140227 16:37", "depDateTime":"20140227 16:37", "arrDelay":"0", "depDelay":"0" } }, { "name":"D-Zoo S", "nameWO":"Zoo S", "place":"", "nameWithPlace":"", "omc":"5111000", "placeID":"6", "platformName":"Gleis 1", "ref":{ "id":"20018012", "area":"98", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3346214,479740", "arrDateTime":"20140227 16:39", "depDateTime":"20140227 16:39", "arrDelay":"0", "depDelay":"0" } }, { "name":"D-Wehrhahn S", "nameWO":"Wehrhahn S", "place":"", "nameWithPlace":"", "omc":"5111000", "placeID":"6", "platformName":"Gleis 1", "ref":{ "id":"20018019", "area":"98", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3346220,480530", "arrDateTime":"20140227 16:41", "depDateTime":"20140227 16:41", "arrDelay":"0", "depDelay":"0" } }, { "name":"Düsseldorf Hbf", "nameWO":"Hbf", "place":"", "nameWithPlace":"", "omc":"5111000", "placeID":"6", "platformName":"Gleis 11", "ref":{ "id":"20018235", "area":"98", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3346062,481506", "arrDateTime":"20140227 16:44", "arrDelay":"0", "depDelay":"-1" } } ], "frequency":{ "hasFrequency":"0", "tripIndex":"0", "minTimeGap":"0", "maxTimeGap":"0", "avTimeGap":"0", "minDuration":"0", "maxDuration":"0", "avDuration":"0", "modes":[ ] }, "path":"3362050,456250 3361304,456344 3361296,456345 3361247,456350 3361198,456354 3361148,456359 3360976,456380 3360888,456369 3360652,456292 3360486,456189 3360243,456056 3360150,456013 3359790,455900 3359790,455900 3359324,455754 3359121,455711 3358874,455708 3358681,455744 3358546,455781 3358546,455781 3358523,455787 3358386,455822 3358221,455864 3357920,455959 3357678,456071 3357623,456114 3357092,456573 3357066,456595 3356738,456833 3356638,456890 3356466,456967 3356348,457010 3355716,457183 3355651,457195 3355304,457211 3354869,457169 3354739,457179 3354630,457211 3354493,457284 3354422,457341 3354364,457401 3354267,457534 3354174,457703 3354130,457762 3354067,457838 3353839,458055 3353739,458134 3353682,458170 3353532,458230 3353331,458265 3353190,458254 3353190,458254 3353188,458254 3353034,458212 3352953,458188 3352904,458168 3352823,458123 3352619,457977 3352578,457940 3352255,457549 3352224,457502 3352099,457291 3352099,457291 3351887,456934 3351846,456878 3351798,456840 3351624,456650 3351562,456601 3351539,456581 3351217,456369 3350829,456170 3350829,456170 3350808,456159 3350686,456130 3350491,456065 3350341,456035 3350130,456015 3350026,456024 3349615,456126 3349498,456146 3349101,456212 3349052,456220 3348541,456306 3347950,456355 3347834,456370 3347667,456402 3347549,456429 3347302,456514 3347234,456547 3347218,456553 3347206,456560 3347193,456566 3347114,456600 3347101,456607 3346804,456787 3346754,456818 3346745,456825 3346580,456941 3346373,457087 3346157,457235 3345919,457398 3345825,457473 3345673,457636 3345557,457790 3345491,457901 3345487,457906 3345484,457912 3345480,457919 3345476,457926 3345472,457934 3345468,457943 3345464,457953 3345459,457965 3345455,457978 3345450,457993 3345424,458070 3345424,458070 3345383,458188 3345374,458201 3345365,458212 3345327,458255 3345316,458573 3345291,459407 3345280,459489 3345260,459542 3345225,459642 3345088,459946 3345061,460048 3345058,460216 3345059,460429 3345095,461162 3345095,461162 3345105,461375 3345151,462571 3345190,463305 3345193,463355 3345193,463355 3345236,464000 3345250,464051 3345288,464669 3345290,464758 3345294,465298 3345305,465390 3345307,465425 3345307,465425 3345323,465782 3345325,465879 3345348,466339 3345402,467360 3345405,467427 3345405,467427 3345424,467883 3345468,468787 3345495,469339 3345495,469339 3345533,470105 3345584,471152 3345581,471184 3345597,471512 3345634,472271 3345645,472879 3345674,473375 3345692,473394 3345715,473435 3345722,473449 3345729,473574 3345729,473574 3345657,473578 3345657,473578 3345800,475246 3345803,475246 3345805,475512 3345849,476363 3345927,476940 3346000,477393 3346027,477888 3346044,478131 3346075,478438 3346085,478491 3346085,478491 3346114,478639 3346187,478941 3346253,479275 3346259,479499 3346228,479742 3346228,479742 3346226,479760 3346227,479819 3346253,480294 3346258,480370 3346259,480378 3346276,480483 3346283,480518 3346283,480518 3346320,480718 3346366,480837 3346393,480975 3346349,481049 3346329,481112 3346298,481181 3346294,481199 3346231,481290 3346183,481348 3346177,481353 3346192,481452 3346158,481496 3346113,481549" } ], "attrs":[ ] } }, { "trip":{ "duration":"00:42", "interchange":"0", "desc":"1", "legs":[ { "points":[ { "name":"Essen Hauptbahnhof", "place":"Essen", "nameWithPlace":"Essen Hauptbahnhof", "usage":"departure", "omc":"5113000", "placeID":"18", "desc":"", "dateTime":{ "date":"27.02.2014", "time":"16:08" }, "stamp":{ "date":"20140227", "time":"1608" }, "links":[ { "name":"RM", "type":"RM", "href":"FILELOAD?Filename=dwa_530F53F00.pdf" }, { "name":"SM", "type":"SM", "href":"vrr/09289_e_hbf_1.htm" } ], "ref":{ "id":"20009289", "area":"98", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3362053,456277" } }, { "name":"Düsseldorf Hbf", "place":"Düsseldorf", "nameWithPlace":"Düsseldorf Hbf", "usage":"arrival", "omc":"5111000", "placeID":"6", "desc":"", "dateTime":{ "date":"27.02.2014", "time":"16:50" }, "stamp":{ "date":"20140227", "time":"1650" }, "links":[ { "name":"RM", "type":"RM", "href":"FILELOAD?Filename=dwa_530F53F01.pdf" }, { "name":"SM", "type":"SM", "href":"vrr/18235_d_hbf_1.htm" } ], "ref":{ "id":"20018235", "area":"98", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3346062,481506" } } ], "mode":{ "name":"S-Bahn S6", "number":"S6", "type":"2", "code":"1", "destination":"Nippes, Nippes S-Bahn", "destID":"22000750", "desc":"", "diva":{ "branch":"92", "line":"E06", "supplement":" ", "dir":"H", "project":"j14", "network":"ddb", "stateless":"ddb:92E06: :H:j14", "operator":"DB AG", "opCode":"00" } }, "stopSeq":[ { "name":"Essen Hauptbahnhof", "nameWO":"Hauptbahnhof", "place":"", "nameWithPlace":"", "omc":"5113000", "placeID":"18", "platformName":"Gleis 12", "ref":{ "id":"20009289", "area":"98", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3362053,456277", "depDateTime":"20140227 16:08", "arrDelay":"-1", "depDelay":"0" } }, { "name":"Essen Süd S", "nameWO":"Süd S", "place":"", "nameWithPlace":"", "omc":"5113000", "placeID":"18", "platformName":"Gleis 1", "ref":{ "id":"20009590", "area":"98", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3362624,457580", "arrDateTime":"20140227 16:10", "depDateTime":"20140227 16:11", "arrDelay":"0", "depDelay":"0" } }, { "name":"Essen Stadtwald S", "nameWO":"Stadtwald S", "place":"", "nameWithPlace":"", "omc":"5113000", "placeID":"18", "platformName":"Gleis 2", "ref":{ "id":"20009578", "area":"98", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3362585,459515", "arrDateTime":"20140227 16:13", "depDateTime":"20140227 16:13", "arrDelay":"0", "depDelay":"0" } }, { "name":"Essen Hügel S", "nameWO":"Hügel S", "place":"", "nameWithPlace":"", "omc":"5113000", "placeID":"18", "platformName":"Gleis 2", "ref":{ "id":"20009074", "area":"98", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3361530,461457", "arrDateTime":"20140227 16:16", "depDateTime":"20140227 16:16", "arrDelay":"0", "depDelay":"0" } }, { "name":"Essen Werden S", "nameWO":"Werden S", "place":"", "nameWithPlace":"", "omc":"5113000", "placeID":"18", "platformName":"Gleis 2", "ref":{ "id":"20009640", "area":"98", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3360684,463409", "arrDateTime":"20140227 16:19", "depDateTime":"20140227 16:19", "arrDelay":"0", "depDelay":"0" } }, { "name":"Essen Kettwig S", "nameWO":"Kettwig S", "place":"", "nameWithPlace":"", "omc":"5113000", "placeID":"18", "platformName":"Gleis 1", "ref":{ "id":"20009383", "area":"98", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3357590,465910", "arrDateTime":"20140227 16:23", "depDateTime":"20140227 16:23", "arrDelay":"0", "depDelay":"0" } }, { "name":"Essen Kettwig Stausee S", "nameWO":"Kettwig Stausee S", "place":"", "nameWithPlace":"", "omc":"5113000", "placeID":"18", "platformName":"", "ref":{ "id":"20009385", "area":"98", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3356594,466628", "arrDateTime":"20140227 16:25", "depDateTime":"20140227 16:26", "arrDelay":"0", "depDelay":"0" } }, { "name":"Ratingen Hösel S", "nameWO":"Hösel S", "place":"", "nameWithPlace":"", "omc":"5158028", "placeID":"15", "platformName":"Gleis 2", "ref":{ "id":"20019528", "area":"98", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3353335,468247", "arrDateTime":"20140227 16:29", "depDateTime":"20140227 16:30", "arrDelay":"0", "depDelay":"0" } }, { "name":"Ratingen Ost S", "nameWO":"Ost S", "place":"", "nameWithPlace":"", "omc":"5158028", "placeID":"15", "platformName":"Gleis 1", "ref":{ "id":"20018634", "area":"98", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3351063,473346", "arrDateTime":"20140227 16:34", "depDateTime":"20140227 16:34", "arrDelay":"0", "depDelay":"0" } }, { "name":"D-Rath S", "nameWO":"Rath S", "place":"", "nameWithPlace":"", "omc":"5111000", "placeID":"6", "platformName":"Gleis 1", "ref":{ "id":"20018209", "area":"98", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3347993,476752", "arrDateTime":"20140227 16:38", "depDateTime":"20140227 16:39", "arrDelay":"0", "depDelay":"0" } }, { "name":"D-Rath Mitte S", "nameWO":"Rath Mitte S", "place":"", "nameWithPlace":"", "omc":"5111000", "placeID":"6", "platformName":"Gleis 1", "ref":{ "id":"20018210", "area":"98", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3347208,477055", "arrDateTime":"20140227 16:41", "depDateTime":"20140227 16:41", "arrDelay":"0", "depDelay":"0" } }, { "name":"D-Derendorf S", "nameWO":"Derendorf S", "place":"", "nameWithPlace":"", "omc":"5111000", "placeID":"6", "platformName":"Gleis 1", "ref":{ "id":"20018285", "area":"98", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3346085,478491", "arrDateTime":"20140227 16:44", "depDateTime":"20140227 16:44", "arrDelay":"0", "depDelay":"0" } }, { "name":"D-Zoo S", "nameWO":"Zoo S", "place":"", "nameWithPlace":"", "omc":"5111000", "placeID":"6", "platformName":"Gleis 1", "ref":{ "id":"20018012", "area":"98", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3346214,479740", "arrDateTime":"20140227 16:46", "depDateTime":"20140227 16:46", "arrDelay":"0", "depDelay":"0" } }, { "name":"D-Wehrhahn S", "nameWO":"Wehrhahn S", "place":"", "nameWithPlace":"", "omc":"5111000", "placeID":"6", "platformName":"Gleis 1", "ref":{ "id":"20018019", "area":"98", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3346220,480530", "arrDateTime":"20140227 16:48", "depDateTime":"20140227 16:49", "arrDelay":"0", "depDelay":"0" } }, { "name":"Düsseldorf Hbf", "nameWO":"Hbf", "place":"", "nameWithPlace":"", "omc":"5111000", "placeID":"6", "platformName":"Gleis 11", "ref":{ "id":"20018235", "area":"98", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3346062,481506", "arrDateTime":"20140227 16:50", "arrDelay":"0", "depDelay":"-1" } } ], "frequency":{ "hasFrequency":"0", "tripIndex":"0", "minTimeGap":"0", "maxTimeGap":"0", "avTimeGap":"0", "minDuration":"0", "maxDuration":"0", "avDuration":"0", "modes":[ ] }, "path":"3362053,456277 3362624,457580 3362624,457580 3362619,457577 3362619,457577 3362619,457880 3362605,458187 3362606,458357 3362604,458549 3362582,459495 3362582,459515 3362582,459515 3362584,459598 3362581,459720 3362560,459823 3362555,459845 3362534,459948 3362480,460071 3362421,460188 3362377,460248 3362225,460451 3362159,460571 3361963,461069 3361888,461192 3361785,461303 3361746,461337 3361626,461420 3361530,461458 3361530,461458 3361460,461485 3361163,461558 3360958,461623 3360849,461701 3360747,461802 3360705,461863 3360627,462022 3360607,462128 3360598,462260 3360581,462944 3360595,463073 3360641,463192 3360690,463290 3360703,463348 3360705,463395 3360704,463411 3360704,463411 3360699,463461 3360665,463570 3360614,463642 3360531,463729 3360433,463816 3360368,463857 3360290,463890 3360085,463968 3360005,463985 3359518,464017 3359262,464037 3359095,464080 3358425,464362 3358298,464450 3358220,464546 3358159,464663 3358132,464767 3358126,464828 3358115,465143 3358104,465207 3358067,465319 3358007,465451 3357966,465522 3357789,465753 3357595,465916 3357595,465916 3357468,466022 3357252,466193 3357080,466291 3356918,466403 3356853,466451 3356828,466469 3356712,466560 3356643,466604 3356593,466626 3356594,466628 3353335,468247 3353335,468247 3351063,473346 3351062,473346 3350858,473879 3350807,473992 3350768,474055 3350566,474283 3350513,474327 3350439,474370 3350264,474405 3350177,474399 3349602,474412 3349308,474432 3349251,474449 3349136,474502 3349091,474534 3348999,474622 3348887,474769 3348847,474819 3348777,474928 3348739,475001 3348706,475088 3348546,475469 3348445,475662 3348349,475847 3348289,476001 3348022,476648 3348017,476689 3347992,476752 3347992,476752 3347991,476755 3347959,476814 3347907,476909 3347864,476961 3347791,477021 3347666,477074 3347473,477099 3347375,477100 3347306,477083 3347209,477053 3347209,477053 3347142,477033 3347033,477002 3346801,476937 3346297,476786 3346207,476784 3346196,476786 3346119,476808 3346023,476874 3345963,476953 3345940,477022 3345932,477088 3345964,477317 3345955,477400 3345971,477523 3345991,477892 3346075,478438 3346085,478491 3346085,478491 3346114,478639 3346187,478941 3346253,479275 3346259,479499 3346228,479742 3346228,479742 3346226,479760 3346227,479819 3346253,480294 3346258,480370 3346259,480378 3346276,480483 3346283,480518 3346283,480518 3346320,480718 3346366,480837 3346393,480975 3346349,481049 3346329,481112 3346298,481181 3346294,481199 3346231,481290 3346183,481348 3346177,481353 3346192,481452 3346158,481496 3346113,481549" } ], "attrs":[ ] } }, { "trip":{ "duration":"00:32", "interchange":"0", "desc":"2", "legs":[ { "points":[ { "name":"Essen Hauptbahnhof", "place":"Essen", "nameWithPlace":"Essen Hauptbahnhof", "usage":"departure", "omc":"5113000", "placeID":"18", "desc":"", "dateTime":{ "date":"27.02.2014", "time":"16:21" }, "stamp":{ "date":"20140227", "time":"1621" }, "links":[ { "name":"RM", "type":"RM", "href":"FILELOAD?Filename=dwa_530F53F02.pdf" }, { "name":"SM", "type":"SM", "href":"vrr/09289_e_hbf_1.htm" } ], "ref":{ "id":"20009289", "area":"90", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3362045,456187" } }, { "name":"Düsseldorf Hbf", "place":"Düsseldorf", "nameWithPlace":"Düsseldorf Hbf", "usage":"arrival", "omc":"5111000", "placeID":"6", "desc":"", "dateTime":{ "date":"27.02.2014", "time":"16:53" }, "stamp":{ "date":"20140227", "time":"1653" }, "links":[ { "name":"RM", "type":"RM", "href":"FILELOAD?Filename=dwa_530F53F03.pdf" }, { "name":"SM", "type":"SM", "href":"vrr/18235_d_hbf_1.htm" } ], "ref":{ "id":"20018235", "area":"90", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3345974,481458" } } ], "mode":{ "name":"R-Bahn RE2", "number":"RE2", "type":"6", "code":"0", "destination":"Düsseldorf Hbf", "destID":"20018235", "desc":"", "diva":{ "branch":"90", "line":"425", "supplement":"B", "dir":"R", "project":"j14", "network":"ddb", "stateless":"ddb:90425:B:R:j14", "operator":"DB AG", "opCode":"00" } }, "stopSeq":[ { "name":"Essen Hauptbahnhof", "nameWO":"Hauptbahnhof", "place":"", "nameWithPlace":"", "omc":"5113000", "placeID":"18", "platformName":"Gleis 2", "ref":{ "id":"20009289", "area":"90", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3362045,456187", "depDateTime":"20140227 16:21", "arrDelay":"-1", "depDelay":"0" } }, { "name":"Mülheim Hauptbahnhof", "nameWO":"Hauptbahnhof", "place":"", "nameWithPlace":"", "omc":"5117000", "placeID":"17", "platformName":"Gleis 6", "ref":{ "id":"20015225", "area":"90", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3353209,458257", "arrDateTime":"20140227 16:26", "depDateTime":"20140227 16:27", "arrDelay":"0", "depDelay":"0" } }, { "name":"Duisburg Hbf", "nameWO":"Duisburg Hbf", "place":"", "nameWithPlace":"", "omc":"5112000", "placeID":"20", "platformName":"Gleis 3", "ref":{ "id":"20016032", "area":"90", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3345390,458088", "arrDateTime":"20140227 16:33", "depDateTime":"20140227 16:36", "arrDelay":"0", "depDelay":"0" } }, { "name":"Düsseldorf Flughafen Bahnhof", "nameWO":"Flughafen Bahnhof", "place":"", "nameWithPlace":"", "omc":"5111000", "placeID":"6", "platformName":"Gleis 6", "ref":{ "id":"20018488", "area":"90", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3345726,473565", "arrDateTime":"20140227 16:45", "depDateTime":"20140227 16:46", "arrDelay":"0", "depDelay":"0" } }, { "name":"D-Flughafen Terminal S", "nameWO":"Flughafen Terminal S", "place":"", "nameWithPlace":"", "omc":"5111000", "placeID":"6", "platformName":"", "ref":{ "id":"20018517", "area":"98", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3344292,475050", "arrDelay":"-1", "depDelay":"-1" } }, { "name":"Düsseldorf Hbf", "nameWO":"Hbf", "place":"", "nameWithPlace":"", "omc":"5111000", "placeID":"6", "platformName":"Gleis 9", "ref":{ "id":"20018235", "area":"90", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3345974,481458", "arrDateTime":"20140227 16:53", "arrDelay":"0", "depDelay":"-1" } } ], "frequency":{ "hasFrequency":"0", "tripIndex":"0", "minTimeGap":"0", "maxTimeGap":"0", "avTimeGap":"0", "minDuration":"0", "maxDuration":"0", "avDuration":"0", "modes":[ ] }, "path":"3362056,456276 3361586,456332 3361381,456356 3361148,456359 3360976,456380 3360888,456369 3360652,456292 3360486,456189 3360243,456056 3360150,456013 3359324,455754 3359121,455711 3358874,455708 3358681,455744 3358523,455787 3358386,455822 3358221,455864 3357920,455959 3357678,456071 3357623,456114 3357092,456573 3357066,456595 3356738,456833 3356638,456890 3356466,456967 3356348,457010 3355716,457183 3355651,457195 3355304,457211 3354869,457169 3354739,457179 3354630,457211 3354493,457284 3354422,457341 3354364,457401 3354267,457534 3354174,457703 3354130,457762 3354067,457838 3353839,458055 3353739,458134 3353682,458170 3353532,458230 3353331,458265 3353209,458256 3353209,458256 3353188,458254 3353034,458212 3352953,458188 3352904,458168 3352823,458123 3352619,457977 3352578,457940 3352255,457549 3352224,457502 3351887,456934 3351846,456878 3351798,456840 3351624,456650 3351562,456601 3351539,456581 3350731,456179 3350675,456147 3350488,456081 3350335,456049 3350124,456052 3349662,456127 3349615,456126 3349498,456146 3349101,456212 3349052,456220 3348541,456306 3348478,456327 3347895,456461 3347787,456485 3347663,456513 3347334,456586 3347278,456589 3347264,456593 3347250,456597 3347235,456603 3347127,456634 3346973,456711 3346771,456842 3346761,456848 3346598,456966 3346387,457112 3346172,457259 3345939,457412 3345828,457507 3345702,457650 3345644,457737 3345575,457872 3345560,457904 3345550,457919 3345543,457922 3345535,457926 3345528,457930 3345521,457935 3345513,457941 3345506,457948 3345499,457956 3345491,457967 3345484,457979 3345476,457994 3345412,458178 3345412,458178 3345387,458267 3345387,458267 3345389,458608 3345395,458643 3345393,458730 3345355,458842 3345340,458950 3345325,459154 3345339,459324 3345336,459364 3345301,459523 3345273,459591 3345115,459945 3345081,460063 3345058,460216 3345059,460429 3345105,461375 3345151,462571 3345190,463305 3345236,464000 3345250,464051 3345288,464669 3345290,464758 3345294,465298 3345280,465427 3345304,465774 3345313,465860 3345325,465879 3345348,466339 3345402,467360 3345424,467883 3345468,468787 3345533,470105 3345584,471152 3345581,471184 3345597,471512 3345634,472271 3345645,472879 3345674,473375 3345692,473394 3345715,473435 3345725,473452 3345731,473565 3345731,473565 3345744,473812 3345742,473831 3345719,473905 3345709,473919 3345712,474128 3345729,474477 3345693,474571 3345657,474616 3345607,474651 3345471,474686 3345415,474695 3344929,474695 3344724,474695 3344650,474711 3344598,474737 3344469,474837 3344424,474880 3344267,475022 3344267,475022 3344424,474880 3344469,474837 3344598,474737 3344650,474711 3344724,474695 3344929,474695 3345415,474695 3345471,474686 3345547,474696 3345643,474723 3345682,474752 3345729,474814 3345792,474973 3345802,475173 3345805,475512 3345849,476363 3345927,476940 3346000,477393 3346027,477888 3346044,478131 3346075,478438 3346114,478639 3346120,478831 3346149,478899 3346166,478956 3346208,479192 3346217,479403 3346197,479761 3346196,480037 3346207,480294 3346208,480318 3346207,480367 3346206,480488 3346266,480685 3346318,480850 3346320,480893 3346325,480923 3346336,480948 3346341,480992 3346338,481027 3346298,481181 3346294,481199 3346231,481290 3346183,481348 3346177,481353 3346192,481452 3346158,481496 3346099,481565" } ], "attrs":[ ] } }, { "trip":{ "duration":"00:28", "interchange":"0", "desc":"3", "legs":[ { "points":[ { "name":"Essen Hauptbahnhof", "place":"Essen", "nameWithPlace":"Essen Hauptbahnhof", "usage":"departure", "omc":"5113000", "placeID":"18", "desc":"", "dateTime":{ "date":"27.02.2014", "time":"16:26" }, "stamp":{ "date":"20140227", "time":"1626" }, "links":[ { "name":"RM", "type":"RM", "href":"FILELOAD?Filename=dwa_530F53F04.pdf" }, { "name":"SM", "type":"SM", "href":"vrr/09289_e_hbf_1.htm" } ], "ref":{ "id":"20009289", "area":"90", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3362045,456187" } }, { "name":"Düsseldorf Hbf", "place":"Düsseldorf", "nameWithPlace":"Düsseldorf Hbf", "usage":"arrival", "omc":"5111000", "placeID":"6", "desc":"", "dateTime":{ "date":"27.02.2014", "time":"16:54" }, "stamp":{ "date":"20140227", "time":"1654" }, "links":[ { "name":"RM", "type":"RM", "href":"FILELOAD?Filename=dwa_530F53F05.pdf" }, { "name":"SM", "type":"SM", "href":"vrr/18235_d_hbf_1.htm" } ], "ref":{ "id":"20018235", "area":"90", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3345974,481458" } } ], "mode":{ "name":"R-Bahn RE1", "number":"RE1", "type":"6", "code":"0", "destination":"Aachen Hbf", "destID":"21001008", "desc":"", "diva":{ "branch":"90", "line":"415", "supplement":" ", "dir":"H", "project":"j14", "network":"ddb", "stateless":"ddb:90415: :H:j14", "operator":"DB AG", "opCode":"00" } }, "stopSeq":[ { "name":"Essen Hauptbahnhof", "nameWO":"Hauptbahnhof", "place":"", "nameWithPlace":"", "omc":"5113000", "placeID":"18", "platformName":"Gleis 2", "ref":{ "id":"20009289", "area":"90", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3362045,456187", "depDateTime":"20140227 16:09", "arrDelay":"-1", "depDelay":"17" } }, { "name":"Mülheim Hauptbahnhof", "nameWO":"Hauptbahnhof", "place":"", "nameWithPlace":"", "omc":"5117000", "placeID":"17", "platformName":"Gleis 6", "ref":{ "id":"20015225", "area":"90", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3353209,458257", "arrDateTime":"20140227 16:14", "depDateTime":"20140227 16:15", "arrDelay":"17", "depDelay":"17" } }, { "name":"Duisburg Hbf", "nameWO":"Duisburg Hbf", "place":"", "nameWithPlace":"", "omc":"5112000", "placeID":"20", "platformName":"Gleis 4", "ref":{ "id":"20016032", "area":"90", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3345390,458088", "arrDateTime":"20140227 16:20", "depDateTime":"20140227 16:22", "arrDelay":"17", "depDelay":"17" } }, { "name":"Duisburg Großenbaum S", "nameWO":"Großenbaum S", "place":"", "nameWithPlace":"", "omc":"5112000", "placeID":"20", "platformName":"", "ref":{ "id":"20016129", "area":"90", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3345313,465446", "arrDelay":"-1", "depDelay":"-1" } }, { "name":"Düsseldorf Flughafen Bahnhof", "nameWO":"Flughafen Bahnhof", "place":"", "nameWithPlace":"", "omc":"5111000", "placeID":"6", "platformName":"Gleis 4", "ref":{ "id":"20018488", "area":"90", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3345726,473565", "arrDateTime":"20140227 16:31", "depDateTime":"20140227 16:32", "arrDelay":"17", "depDelay":"17" } }, { "name":"D-Flughafen Terminal S", "nameWO":"Flughafen Terminal S", "place":"", "nameWithPlace":"", "omc":"5111000", "placeID":"6", "platformName":"", "ref":{ "id":"20018517", "area":"98", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3344292,475050", "arrDelay":"-1", "depDelay":"-1" } }, { "name":"Düsseldorf Hbf", "nameWO":"Hbf", "place":"", "nameWithPlace":"", "omc":"5111000", "placeID":"6", "platformName":"Gleis 16", "ref":{ "id":"20018235", "area":"90", "platform":"", "NaPTANID":"", "attrs":[ ], "coords":"3345974,481458", "arrDateTime":"20140227 16:37", "arrDelay":"17", "depDelay":"-1" } } ], "frequency":{ "hasFrequency":"0", "tripIndex":"0", "minTimeGap":"0", "maxTimeGap":"0", "avTimeGap":"0", "minDuration":"0", "maxDuration":"0", "avDuration":"0", "modes":[ ] }, "path":"3362056,456276 3361586,456332 3361381,456356 3361148,456359 3360976,456380 3360888,456369 3360652,456292 3360486,456189 3360243,456056 3360150,456013 3359324,455754 3359121,455711 3358874,455708 3358681,455744 3358523,455787 3358386,455822 3358221,455864 3357920,455959 3357678,456071 3357623,456114 3357092,456573 3357066,456595 3356738,456833 3356638,456890 3356466,456967 3356348,457010 3355716,457183 3355651,457195 3355304,457211 3354869,457169 3354739,457179 3354630,457211 3354493,457284 3354422,457341 3354364,457401 3354267,457534 3354174,457703 3354130,457762 3354067,457838 3353839,458055 3353739,458134 3353682,458170 3353532,458230 3353331,458265 3353209,458256 3353209,458256 3353188,458254 3353034,458212 3352953,458188 3352904,458168 3352823,458123 3352619,457977 3352578,457940 3352255,457549 3352224,457502 3351887,456934 3351846,456878 3351798,456840 3351624,456650 3351562,456601 3351539,456581 3350731,456179 3350675,456147 3350488,456081 3350335,456049 3350124,456052 3349662,456127 3349615,456126 3349498,456146 3349101,456212 3349052,456220 3348541,456306 3348478,456327 3347895,456461 3347787,456485 3347663,456513 3347334,456586 3347278,456589 3347264,456593 3347250,456597 3347235,456603 3347127,456634 3346973,456711 3346771,456842 3346761,456848 3346598,456966 3346387,457112 3346172,457259 3345939,457412 3345828,457507 3345702,457650 3345644,457737 3345575,457872 3345560,457904 3345550,457919 3345543,457922 3345535,457926 3345528,457930 3345521,457935 3345513,457941 3345506,457948 3345499,457956 3345491,457967 3345484,457979 3345476,457994 3345412,458178 3345412,458178 3345387,458267 3345387,458267 3345389,458608 3345395,458643 3345393,458730 3345355,458842 3345340,458950 3345325,459154 3345339,459324 3345336,459364 3345301,459523 3345273,459591 3345115,459945 3345081,460063 3345058,460216 3345059,460429 3345105,461375 3345151,462571 3345190,463305 3345236,464000 3345250,464051 3345288,464669 3345290,464758 3345294,465298 3345305,465390 3345308,465446 3345308,465446 3345323,465782 3345325,465879 3345348,466339 3345402,467360 3345424,467883 3345468,468787 3345533,470105 3345584,471152 3345581,471184 3345597,471512 3345634,472271 3345645,472879 3345674,473375 3345692,473394 3345715,473435 3345725,473452 3345731,473565 3345731,473565 3345744,473812 3345742,473831 3345719,473905 3345709,473919 3345712,474128 3345729,474477 3345693,474571 3345657,474616 3345607,474651 3345471,474686 3345415,474695 3344929,474695 3344724,474695 3344650,474711 3344598,474737 3344469,474837 3344424,474880 3344267,475022 3344267,475022 3344424,474880 3344469,474837 3344598,474737 3344650,474711 3344724,474695 3344929,474695 3345415,474695 3345471,474686 3345547,474696 3345643,474723 3345682,474752 3345729,474814 3345792,474973 3345802,475173 3345805,475512 3345849,476363 3345927,476940 3346000,477393 3346027,477888 3346044,478131 3346075,478438 3346114,478639 3346120,478831 3346149,478899 3346166,478956 3346208,479192 3346217,479403 3346197,479761 3346196,480037 3346207,480294 3346208,480318 3346207,480367 3346206,480488 3346266,480685 3346318,480850 3346320,480893 3346325,480923 3346336,480948 3346341,480992 3346338,481027 3346298,481181 3346294,481199 3346231,481290 3346183,481348 3346177,481353 3346192,481452 3346158,481496 3346099,481565" } ], "attrs":[ ] } } ] }Travel-Routing-DE-VRR-2.19/t/in/e_hbf_du_hbf.ice000444001750001750 10310713653243016 20416 0ustar00derfderf000000000000 Fahrplanauskunft
Aushangfahrplan
Abfahrtsmonitor
Persönlicher Fahrplan
Verbundfahrplan Schnellverkehr
Linienplan Schnellverkehr
Stadtlinienpläne
Bedienungshinweise
Bildschirmschoner
Aktuelle Hinweise
Ihr Link zu uns
Impressum
Homepage
Fahrplanauskunft
*
*
* von: Essen / Hauptbahnhof nach: Duisburg / Hbf
*
Abfahrt: 12:00 Uhr Datum: 07.06.2010
*
*
*
* Fahrtdaten Fahrtdauer Umsteigen Preisstufe
*
* 1. Fahrt: am 07.06.2010 von 11:59 bis 12:10 Uhr 00:11 0
* 2. Fahrt: am 07.06.2010 von 12:08 bis 12:21 Uhr 00:13 0 B
* 3. Fahrt: am 07.06.2010 von 12:15 bis 12:33 Uhr 00:18 0 B
*
*
*
* zur Druckversion der ausgewählten Verbindungen In Datei Drucken zur Druckversion der ausgewählten Verbindungen (Alle Angaben ohne Gewähr.)
*
*
* *
*
*
*
* 1. Fahrt
11:59 ab Essen Hauptbahnhof: Gleis 1 *Umgebungsplan*Umgebungsplan*Umgebungsplan*Stadtplan Zug IC 2113 InterCity
* 12:10 an Duisburg Hbf: Gleis 4 *Umgebungsplan*Stadtplan Stuttgart Hauptbahnhof (oben)
* Fahrradmitnahme reservierungspflichtig
* Fahrradmitnahme begrenzt möglich
* Bordrestaurant
*
* Verbindung zum Drucken auswählen
*
*
*
* 2. Fahrt
12:08 ab Essen Hauptbahnhof: Gleis 2 *Umgebungsplan*Umgebungsplan*Umgebungsplan*Stadtplan Zug R-Bahn RE1
* 12:21 an Duisburg Hbf: Gleis 4 *Umgebungsplan*Stadtplan Aachen Hbf
* Fahrradmitnahme begrenzt möglich
*
* Verbindung zum Drucken auswählen
*
*
*
* 3. Fahrt
12:15 ab Essen Hauptbahnhof: Gleis 7 *Umgebungsplan*Umgebungsplan*Umgebungsplan*Stadtplan S-Bahn S-Bahn S1
* 12:33 an Duisburg Hbf: Gleis 5 *Umgebungsplan*Stadtplan Solingen Hbf
* Linie S1: Fahrradmitnahme begrenzt möglich
*
* Verbindung zum Drucken auswählen
*
*
*
Abweichung Verspätungen sind berücksichtigt Pünktlich Fahrt voraussichtlich pünktlich
*
*
*
* zur Druckversion der ausgewählten Verbindungen In Datei Drucken zur Druckversion der ausgewählten Verbindungen (Alle Angaben ohne Gewähr.)
*
*
* *
*
*
* *
Travel-Routing-DE-VRR-2.19/t/in/e_hbf_e_alfredusbad.json000444001750001750 12244513653243016 22166 0ustar00derfderf000000000000{ "parameters":[ { "name":"mdvMap_destination", "value":"::" }, { "name":"id_destination", "value":":destination" }, { "name":"ShowFare", "value":" " }, { "name":"mdvMap2_destination", "value":"" }, { "name":"view", "value":"" }, { "name":"mapState_origin", "value":"" }, { "name":"mapState_destination", "value":"" }, { "name":"mdvMap2_origin", "value":"" }, { "name":"enableMobilityRestrictionOptionsWithButton", "value":"" }, { "name":"id_via", "value":":via" }, { "name":"mdvMap_origin", "value":"::" }, { "name":"id_origin", "value":":origin" }, { "name":"command", "value":"" }, { "name":"mdvMap2_via", "value":"" }, { "name":"mdvMap_via", "value":"::" }, { "name":"mapState_via", "value":"" }, { "name":"transpCompany", "value":"vrr" }, { "name":"priceCalculator", "value":"" }, { "name":"requestID", "value":"1" }, { "name":"sessionID", "value":"efa1.vrr.de_52274265" } ], "trips":[ { "trip":{ "duration":"00:07", "interchange":"0", "desc":"4", "legs":[ { "points":[ { "name":"Essen Hauptbahnhof", "place":"Essen", "nameWithPlace":"Essen Hauptbahnhof", "usage":"departure", "omc":"5113000", "placeID":"18", "desc":"", "dateTime":{ "date":"27.02.2014", "time":"17:31" }, "stamp":{ "date":"20140227", "time":"1731" }, "links":[ { "name":"RM", "type":"RM", "href":"FILELOAD?Filename=dwa_530F68E50.pdf" }, { "name":"SM", "type":"SM", "href":"vrr/09289_e_hbf_1.htm" } ], "ref":{ "id":"20009289", "area":"14", "platform":"4", "NaPTANID":"", "attrs":[ ], "coords":"3361962,456258" } }, { "name":"Essen Alfredusbad", "place":"Essen", "nameWithPlace":"Essen Alfredusbad", "usage":"arrival", "omc":"5113000", "placeID":"18", "desc":"", "dateTime":{ "date":"27.02.2014", "time":"17:38" }, "stamp":{ "date":"20140227", "time":"1738" }, "links":[ { "name":"RM", "type":"RM", "href":"FILELOAD?Filename=dwa_530F68E51.pdf" } ], "ref":{ "id":"20009115", "area":"1", "platform":"2", "NaPTANID":"", "attrs":[ ], "coords":"3361027,459596" } } ], "mode":{ "name":"Straßenbahn 107", "number":"107", "type":"4", "code":"4", "destination":"Essen Bredeney", "destID":"20009172", "desc":"", "diva":{ "branch":"11", "line":"107", "supplement":" ", "dir":"H", "project":"j14", "network":"vrr", "stateless":"vrr:11107: :H:j14", "operator":"EVAG Strab", "opCode":"11" } }, "stopSeq":[ { "name":"Essen Hauptbahnhof", "nameWO":"Hauptbahnhof", "place":"", "nameWithPlace":"", "omc":"5113000", "placeID":"18", "platformName":"Bstg. 4", "ref":{ "id":"20009289", "area":"14", "platform":"4", "NaPTANID":"", "attrs":[ ], "coords":"3361962,456258", "depDateTime":"20140227 17:31", "arrDelay":"-1", "depDelay":"0" } }, { "name":"Essen Philharmonie", "nameWO":"Philharmonie", "place":"", "nameWithPlace":"", "omc":"5113000", "placeID":"18", "platformName":"Bstg. 2", "ref":{ "id":"20009531", "area":"1", "platform":"2", "NaPTANID":"", "attrs":[ ], "coords":"3361660,456901", "arrDateTime":"20140227 17:32", "depDateTime":"20140227 17:32", "arrDelay":"0", "depDelay":"0" } }, { "name":"Essen Rüttenscheider Stern", "nameWO":"Rüttenscheider Stern", "place":"", "nameWithPlace":"", "omc":"5113000", "placeID":"18", "platformName":"Bstg. 2", "ref":{ "id":"20009530", "area":"1", "platform":"2", "NaPTANID":"", "attrs":[ ], "coords":"3361395,457774", "arrDateTime":"20140227 17:34", "depDateTime":"20140227 17:34", "arrDelay":"0", "depDelay":"0" } }, { "name":"Essen Martinstr.", "nameWO":"Martinstr.", "place":"", "nameWithPlace":"", "omc":"5113000", "placeID":"18", "platformName":"Bstg. 2", "ref":{ "id":"20009450", "area":"1", "platform":"2", "NaPTANID":"", "attrs":[ ], "coords":"3361313,458171", "arrDateTime":"20140227 17:35", "depDateTime":"20140227 17:35", "arrDelay":"0", "depDelay":"0" } }, { "name":"Essen Florastr.", "nameWO":"Florastr.", "place":"", "nameWithPlace":"", "omc":"5113000", "placeID":"18", "platformName":"Bstg. 2", "ref":{ "id":"20009234", "area":"1", "platform":"2", "NaPTANID":"", "attrs":[ ], "coords":"3361149,458993", "arrDateTime":"20140227 17:36", "depDateTime":"20140227 17:36", "arrDelay":"0", "depDelay":"0" } }, { "name":"Essen Alfredusbad", "nameWO":"Alfredusbad", "place":"", "nameWithPlace":"", "omc":"5113000", "placeID":"18", "platformName":"Bstg. 2", "ref":{ "id":"20009115", "area":"1", "platform":"2", "NaPTANID":"", "attrs":[ ], "coords":"3361027,459596", "arrDateTime":"20140227 17:38", "arrDelay":"0", "depDelay":"-1" } } ], "frequency":{ "hasFrequency":"0", "tripIndex":"0", "minTimeGap":"0", "maxTimeGap":"0", "avTimeGap":"0", "minDuration":"0", "maxDuration":"0", "avDuration":"0", "modes":[ ] }, "path":"3361962,456258 3361660,456901 3361660,456901 3361641,456938 3361635,456950 3361592,457029 3361579,457052 3361552,457095 3361545,457105 3361523,457149 3361507,457196 3361505,457246 3361396,457774 3361395,457774 3361313,458171 3361313,458171 3361149,458993 3361149,458993 3361123,459100 3361117,459140 3361105,459166 3361096,459218 3361093,459234 3361078,459306 3361063,459369 3361042,459456 3361046,459468 3361040,459498 3361034,459507 3361027,459543 3361030,459552 3361022,459573 3361013,459589" } ], "attrs":[ ] } }, { "trip":{ "duration":"00:07", "interchange":"0", "desc":"1", "legs":[ { "points":[ { "name":"Essen Hauptbahnhof", "place":"Essen", "nameWithPlace":"Essen Hauptbahnhof", "usage":"departure", "omc":"5113000", "placeID":"18", "desc":"", "dateTime":{ "date":"27.02.2014", "time":"17:34" }, "stamp":{ "date":"20140227", "time":"1734" }, "links":[ { "name":"RM", "type":"RM", "href":"FILELOAD?Filename=dwa_530F68E52.pdf" }, { "name":"SM", "type":"SM", "href":"vrr/09289_e_hbf_1.htm" } ], "ref":{ "id":"20009289", "area":"14", "platform":"4", "NaPTANID":"", "attrs":[ ], "coords":"3361962,456258" } }, { "name":"Essen Alfredusbad", "place":"Essen", "nameWithPlace":"Essen Alfredusbad", "usage":"arrival", "omc":"5113000", "placeID":"18", "desc":"", "dateTime":{ "date":"27.02.2014", "time":"17:41" }, "stamp":{ "date":"20140227", "time":"1741" }, "links":[ { "name":"RM", "type":"RM", "href":"FILELOAD?Filename=dwa_530F68E53.pdf" } ], "ref":{ "id":"20009115", "area":"1", "platform":"2", "NaPTANID":"", "attrs":[ ], "coords":"3361027,459596" } } ], "mode":{ "name":"Straßenbahn 101", "number":"101", "type":"4", "code":"4", "destination":"Essen Bredeney", "destID":"20009172", "desc":"", "diva":{ "branch":"11", "line":"101", "supplement":" ", "dir":"H", "project":"j14", "network":"vrr", "stateless":"vrr:11101: :H:j14", "operator":"EVAG Strab", "opCode":"11" } }, "stopSeq":[ { "name":"Essen Hauptbahnhof", "nameWO":"Hauptbahnhof", "place":"", "nameWithPlace":"", "omc":"5113000", "placeID":"18", "platformName":"Bstg. 4", "ref":{ "id":"20009289", "area":"14", "platform":"4", "NaPTANID":"", "attrs":[ ], "coords":"3361962,456258", "depDateTime":"20140227 17:34", "arrDelay":"-1", "depDelay":"-1" } }, { "name":"Essen Philharmonie", "nameWO":"Philharmonie", "place":"", "nameWithPlace":"", "omc":"5113000", "placeID":"18", "platformName":"Bstg. 2", "ref":{ "id":"20009531", "area":"1", "platform":"2", "NaPTANID":"", "attrs":[ ], "coords":"3361660,456901", "arrDateTime":"20140227 17:35", "depDateTime":"20140227 17:35", "arrDelay":"-1", "depDelay":"-1" } }, { "name":"Essen Rüttenscheider Stern", "nameWO":"Rüttenscheider Stern", "place":"", "nameWithPlace":"", "omc":"5113000", "placeID":"18", "platformName":"Bstg. 2", "ref":{ "id":"20009530", "area":"1", "platform":"2", "NaPTANID":"", "attrs":[ ], "coords":"3361395,457774", "arrDateTime":"20140227 17:37", "depDateTime":"20140227 17:37", "arrDelay":"-1", "depDelay":"-1" } }, { "name":"Essen Martinstr.", "nameWO":"Martinstr.", "place":"", "nameWithPlace":"", "omc":"5113000", "placeID":"18", "platformName":"Bstg. 2", "ref":{ "id":"20009450", "area":"1", "platform":"2", "NaPTANID":"", "attrs":[ ], "coords":"3361313,458171", "arrDateTime":"20140227 17:38", "depDateTime":"20140227 17:38", "arrDelay":"-1", "depDelay":"-1" } }, { "name":"Essen Florastr.", "nameWO":"Florastr.", "place":"", "nameWithPlace":"", "omc":"5113000", "placeID":"18", "platformName":"Bstg. 2", "ref":{ "id":"20009234", "area":"1", "platform":"2", "NaPTANID":"", "attrs":[ ], "coords":"3361149,458993", "arrDateTime":"20140227 17:39", "depDateTime":"20140227 17:39", "arrDelay":"-1", "depDelay":"-1" } }, { "name":"Essen Alfredusbad", "nameWO":"Alfredusbad", "place":"", "nameWithPlace":"", "omc":"5113000", "placeID":"18", "platformName":"Bstg. 2", "ref":{ "id":"20009115", "area":"1", "platform":"2", "NaPTANID":"", "attrs":[ ], "coords":"3361027,459596", "arrDateTime":"20140227 17:41", "arrDelay":"-1", "depDelay":"-1" } } ], "frequency":{ "hasFrequency":"0", "tripIndex":"0", "minTimeGap":"0", "maxTimeGap":"0", "avTimeGap":"0", "minDuration":"0", "maxDuration":"0", "avDuration":"0", "modes":[ ] }, "path":"3361962,456258 3361660,456901 3361660,456901 3361641,456938 3361635,456950 3361592,457029 3361579,457052 3361552,457095 3361545,457105 3361523,457149 3361507,457196 3361505,457246 3361396,457774 3361395,457774 3361313,458171 3361313,458171 3361149,458993 3361149,458993 3361123,459100 3361117,459140 3361105,459166 3361096,459218 3361093,459234 3361078,459306 3361063,459369 3361042,459456 3361046,459468 3361040,459498 3361034,459507 3361027,459543 3361030,459552 3361022,459573 3361013,459589" } ], "attrs":[ ] } }, { "trip":{ "duration":"00:07", "interchange":"0", "desc":"2", "legs":[ { "points":[ { "name":"Essen Hauptbahnhof", "place":"Essen", "nameWithPlace":"Essen Hauptbahnhof", "usage":"departure", "omc":"5113000", "placeID":"18", "desc":"", "dateTime":{ "date":"27.02.2014", "time":"17:41" }, "stamp":{ "date":"20140227", "time":"1741" }, "links":[ { "name":"RM", "type":"RM", "href":"FILELOAD?Filename=dwa_530F68E54.pdf" }, { "name":"SM", "type":"SM", "href":"vrr/09289_e_hbf_1.htm" } ], "ref":{ "id":"20009289", "area":"14", "platform":"4", "NaPTANID":"", "attrs":[ ], "coords":"3361962,456258" } }, { "name":"Essen Alfredusbad", "place":"Essen", "nameWithPlace":"Essen Alfredusbad", "usage":"arrival", "omc":"5113000", "placeID":"18", "desc":"", "dateTime":{ "date":"27.02.2014", "time":"17:48" }, "stamp":{ "date":"20140227", "time":"1748" }, "links":[ { "name":"RM", "type":"RM", "href":"FILELOAD?Filename=dwa_530F68E55.pdf" } ], "ref":{ "id":"20009115", "area":"1", "platform":"2", "NaPTANID":"", "attrs":[ ], "coords":"3361027,459596" } } ], "mode":{ "name":"Straßenbahn 107", "number":"107", "type":"4", "code":"4", "destination":"Essen Bredeney", "destID":"20009172", "desc":"", "diva":{ "branch":"11", "line":"107", "supplement":" ", "dir":"H", "project":"j14", "network":"vrr", "stateless":"vrr:11107: :H:j14", "operator":"EVAG Strab", "opCode":"11" } }, "stopSeq":[ { "name":"Essen Hauptbahnhof", "nameWO":"Hauptbahnhof", "place":"", "nameWithPlace":"", "omc":"5113000", "placeID":"18", "platformName":"Bstg. 4", "ref":{ "id":"20009289", "area":"14", "platform":"4", "NaPTANID":"", "attrs":[ ], "coords":"3361962,456258", "depDateTime":"20140227 17:41", "arrDelay":"-1", "depDelay":"-1" } }, { "name":"Essen Philharmonie", "nameWO":"Philharmonie", "place":"", "nameWithPlace":"", "omc":"5113000", "placeID":"18", "platformName":"Bstg. 2", "ref":{ "id":"20009531", "area":"1", "platform":"2", "NaPTANID":"", "attrs":[ ], "coords":"3361660,456901", "arrDateTime":"20140227 17:42", "depDateTime":"20140227 17:42", "arrDelay":"-1", "depDelay":"-1" } }, { "name":"Essen Rüttenscheider Stern", "nameWO":"Rüttenscheider Stern", "place":"", "nameWithPlace":"", "omc":"5113000", "placeID":"18", "platformName":"Bstg. 2", "ref":{ "id":"20009530", "area":"1", "platform":"2", "NaPTANID":"", "attrs":[ ], "coords":"3361395,457774", "arrDateTime":"20140227 17:44", "depDateTime":"20140227 17:44", "arrDelay":"-1", "depDelay":"-1" } }, { "name":"Essen Martinstr.", "nameWO":"Martinstr.", "place":"", "nameWithPlace":"", "omc":"5113000", "placeID":"18", "platformName":"Bstg. 2", "ref":{ "id":"20009450", "area":"1", "platform":"2", "NaPTANID":"", "attrs":[ ], "coords":"3361313,458171", "arrDateTime":"20140227 17:45", "depDateTime":"20140227 17:45", "arrDelay":"-1", "depDelay":"-1" } }, { "name":"Essen Florastr.", "nameWO":"Florastr.", "place":"", "nameWithPlace":"", "omc":"5113000", "placeID":"18", "platformName":"Bstg. 2", "ref":{ "id":"20009234", "area":"1", "platform":"2", "NaPTANID":"", "attrs":[ ], "coords":"3361149,458993", "arrDateTime":"20140227 17:46", "depDateTime":"20140227 17:46", "arrDelay":"-1", "depDelay":"-1" } }, { "name":"Essen Alfredusbad", "nameWO":"Alfredusbad", "place":"", "nameWithPlace":"", "omc":"5113000", "placeID":"18", "platformName":"Bstg. 2", "ref":{ "id":"20009115", "area":"1", "platform":"2", "NaPTANID":"", "attrs":[ ], "coords":"3361027,459596", "arrDateTime":"20140227 17:48", "arrDelay":"-1", "depDelay":"-1" } } ], "frequency":{ "hasFrequency":"0", "tripIndex":"0", "minTimeGap":"0", "maxTimeGap":"0", "avTimeGap":"0", "minDuration":"0", "maxDuration":"0", "avDuration":"0", "modes":[ ] }, "path":"3361962,456258 3361660,456901 3361660,456901 3361641,456938 3361635,456950 3361592,457029 3361579,457052 3361552,457095 3361545,457105 3361523,457149 3361507,457196 3361505,457246 3361396,457774 3361395,457774 3361313,458171 3361313,458171 3361149,458993 3361149,458993 3361123,459100 3361117,459140 3361105,459166 3361096,459218 3361093,459234 3361078,459306 3361063,459369 3361042,459456 3361046,459468 3361040,459498 3361034,459507 3361027,459543 3361030,459552 3361022,459573 3361013,459589" } ], "attrs":[ ] } }, { "trip":{ "duration":"00:07", "interchange":"0", "desc":"3", "legs":[ { "points":[ { "name":"Essen Hauptbahnhof", "place":"Essen", "nameWithPlace":"Essen Hauptbahnhof", "usage":"departure", "omc":"5113000", "placeID":"18", "desc":"", "dateTime":{ "date":"27.02.2014", "time":"17:45" }, "stamp":{ "date":"20140227", "time":"1745" }, "links":[ { "name":"RM", "type":"RM", "href":"FILELOAD?Filename=dwa_530F68E56.pdf" }, { "name":"SM", "type":"SM", "href":"vrr/09289_e_hbf_1.htm" } ], "ref":{ "id":"20009289", "area":"14", "platform":"4", "NaPTANID":"", "attrs":[ ], "coords":"3361962,456258" } }, { "name":"Essen Alfredusbad", "place":"Essen", "nameWithPlace":"Essen Alfredusbad", "usage":"arrival", "omc":"5113000", "placeID":"18", "desc":"", "dateTime":{ "date":"27.02.2014", "time":"17:52" }, "stamp":{ "date":"20140227", "time":"1752" }, "links":[ { "name":"RM", "type":"RM", "href":"FILELOAD?Filename=dwa_530F68E57.pdf" } ], "ref":{ "id":"20009115", "area":"1", "platform":"2", "NaPTANID":"", "attrs":[ ], "coords":"3361027,459596" } } ], "mode":{ "name":"Straßenbahn 101", "number":"101", "type":"4", "code":"4", "destination":"Essen Bredeney", "destID":"20009172", "desc":"", "diva":{ "branch":"11", "line":"101", "supplement":" ", "dir":"H", "project":"j14", "network":"vrr", "stateless":"vrr:11101: :H:j14", "operator":"EVAG Strab", "opCode":"11" } }, "stopSeq":[ { "name":"Essen Hauptbahnhof", "nameWO":"Hauptbahnhof", "place":"", "nameWithPlace":"", "omc":"5113000", "placeID":"18", "platformName":"Bstg. 4", "ref":{ "id":"20009289", "area":"14", "platform":"4", "NaPTANID":"", "attrs":[ ], "coords":"3361962,456258", "depDateTime":"20140227 17:44", "arrDelay":"-1", "depDelay":"1" } }, { "name":"Essen Philharmonie", "nameWO":"Philharmonie", "place":"", "nameWithPlace":"", "omc":"5113000", "placeID":"18", "platformName":"Bstg. 2", "ref":{ "id":"20009531", "area":"1", "platform":"2", "NaPTANID":"", "attrs":[ ], "coords":"3361660,456901", "arrDateTime":"20140227 17:45", "depDateTime":"20140227 17:45", "arrDelay":"1", "depDelay":"1" } }, { "name":"Essen Rüttenscheider Stern", "nameWO":"Rüttenscheider Stern", "place":"", "nameWithPlace":"", "omc":"5113000", "placeID":"18", "platformName":"Bstg. 2", "ref":{ "id":"20009530", "area":"1", "platform":"2", "NaPTANID":"", "attrs":[ ], "coords":"3361395,457774", "arrDateTime":"20140227 17:47", "depDateTime":"20140227 17:47", "arrDelay":"1", "depDelay":"1" } }, { "name":"Essen Martinstr.", "nameWO":"Martinstr.", "place":"", "nameWithPlace":"", "omc":"5113000", "placeID":"18", "platformName":"Bstg. 2", "ref":{ "id":"20009450", "area":"1", "platform":"2", "NaPTANID":"", "attrs":[ ], "coords":"3361313,458171", "arrDateTime":"20140227 17:48", "depDateTime":"20140227 17:48", "arrDelay":"1", "depDelay":"1" } }, { "name":"Essen Florastr.", "nameWO":"Florastr.", "place":"", "nameWithPlace":"", "omc":"5113000", "placeID":"18", "platformName":"Bstg. 2", "ref":{ "id":"20009234", "area":"1", "platform":"2", "NaPTANID":"", "attrs":[ ], "coords":"3361149,458993", "arrDateTime":"20140227 17:49", "depDateTime":"20140227 17:49", "arrDelay":"1", "depDelay":"1" } }, { "name":"Essen Alfredusbad", "nameWO":"Alfredusbad", "place":"", "nameWithPlace":"", "omc":"5113000", "placeID":"18", "platformName":"Bstg. 2", "ref":{ "id":"20009115", "area":"1", "platform":"2", "NaPTANID":"", "attrs":[ ], "coords":"3361027,459596", "arrDateTime":"20140227 17:51", "arrDelay":"1", "depDelay":"-1" } } ], "frequency":{ "hasFrequency":"0", "tripIndex":"0", "minTimeGap":"0", "maxTimeGap":"0", "avTimeGap":"0", "minDuration":"0", "maxDuration":"0", "avDuration":"0", "modes":[ ] }, "path":"3361962,456258 3361660,456901 3361660,456901 3361641,456938 3361635,456950 3361592,457029 3361579,457052 3361552,457095 3361545,457105 3361523,457149 3361507,457196 3361505,457246 3361396,457774 3361395,457774 3361313,458171 3361313,458171 3361149,458993 3361149,458993 3361123,459100 3361117,459140 3361105,459166 3361096,459218 3361093,459234 3361078,459306 3361063,459369 3361042,459456 3361046,459468 3361040,459498 3361034,459507 3361027,459543 3361030,459552 3361022,459573 3361013,459589" } ], "attrs":[ ] } } ] }Travel-Routing-DE-VRR-2.19/t/in/e_hbf_k_hbf.xml000444001750001750 27365613653243016 20321 0ustar00derfderf000000000000 Essen Essen Hauptbahnhof hbf Köln Koeln Dom/Hbf Dom/Hbf Zug S-Bahn U-Bahn Stadtbahn Straßen-/Trambahn Stadtbus Regionalbus Schnellbus Seil-/Zahnradbahn Schiff AST/Rufbus Sonstige 00 Daten DB AG Fahrradmitnahme begrenzt möglich 00 Daten DB AG Fahrradmitnahme begrenzt möglich NRW-Tarif: 17,00 ? (2.Kl) / PauschalpreisTickets gültig TicketType NRW-Tarif TicketName SchöneReiseTicket NRW Einzelfahrt PREIS_1KL_ERW 26.50 PREIS_2KL_ERW 17.00 PREIS_1KL_KIND 13.25 PREIS_2KL_KIND 8.50 TicketType NRW-Tarif TicketName SchöneFahrtTicket NRW PREIS_1KL_ERW PREIS_2KL_ERW 16.60 PREIS_1KL_KIND PREIS_2KL_KIND 8.30 TicketType NRW-Tarif TicketName SchönerTagTicket NRW 5 Personen PREIS_1KL_ERW PREIS_2KL_ERW 36.00 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchönerTagTicket NRW Single PREIS_1KL_ERW PREIS_2KL_ERW 26.00 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchöneWocheTicket NRW PREIS_1KL_ERW 118.60 PREIS_2KL_ERW 80.80 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchönerMonatTicket NRW PREIS_1KL_ERW 370.90 PREIS_2KL_ERW 253.70 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchönerMonatTicket NRW Abo PREIS_1KL_ERW 303.80 PREIS_2KL_ERW 207.90 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchönerMonatTicket NRW Azubi PREIS_1KL_ERW PREIS_2KL_ERW 223.50 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchönerMonatTicket NRW Azubi Abo PREIS_1KL_ERW PREIS_2KL_ERW 183.30 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchönesJahrTicket NRW PREIS_1KL_ERW 3675.00 PREIS_2KL_ERW 2600.00 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchönesJahrTicket NRW Abo PREIS_1KL_ERW 320.00 PREIS_2KL_ERW 225.00 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName FahrradTicket NRW PREIS_1KL_ERW PREIS_2KL_ERW 4.00 PREIS_1KL_KIND PREIS_2KL_KIND 1-2 00 Daten DB AG Fahrradmitnahme begrenzt möglich NRW-Tarif: 17,00 ? (2.Kl) / PauschalpreisTickets gültig TicketType NRW-Tarif TicketName SchöneReiseTicket NRW Einzelfahrt PREIS_1KL_ERW 26.50 PREIS_2KL_ERW 17.00 PREIS_1KL_KIND 13.25 PREIS_2KL_KIND 8.50 TicketType NRW-Tarif TicketName SchöneFahrtTicket NRW PREIS_1KL_ERW PREIS_2KL_ERW 16.60 PREIS_1KL_KIND PREIS_2KL_KIND 8.30 TicketType NRW-Tarif TicketName SchönerTagTicket NRW 5 Personen PREIS_1KL_ERW PREIS_2KL_ERW 36.00 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchönerTagTicket NRW Single PREIS_1KL_ERW PREIS_2KL_ERW 26.00 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchöneWocheTicket NRW PREIS_1KL_ERW 118.60 PREIS_2KL_ERW 80.80 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchönerMonatTicket NRW PREIS_1KL_ERW 370.90 PREIS_2KL_ERW 253.70 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchönerMonatTicket NRW Abo PREIS_1KL_ERW 303.80 PREIS_2KL_ERW 207.90 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchönerMonatTicket NRW Azubi PREIS_1KL_ERW PREIS_2KL_ERW 223.50 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchönerMonatTicket NRW Azubi Abo PREIS_1KL_ERW PREIS_2KL_ERW 183.30 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchönesJahrTicket NRW PREIS_1KL_ERW 3675.00 PREIS_2KL_ERW 2600.00 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchönesJahrTicket NRW Abo PREIS_1KL_ERW 320.00 PREIS_2KL_ERW 225.00 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName FahrradTicket NRW PREIS_1KL_ERW PREIS_2KL_ERW 4.00 PREIS_1KL_KIND PREIS_2KL_KIND 1-1 00 Daten DB AG Linie S6: Fahrradmitnahme begrenzt möglich NRW-Tarif: 15,10 ? (2.Kl) / PauschalpreisTickets gültig TicketType NRW-Tarif TicketName SchöneReiseTicket NRW Einzelfahrt PREIS_1KL_ERW 23.40 PREIS_2KL_ERW 15.10 PREIS_1KL_KIND 11.70 PREIS_2KL_KIND 7.55 TicketType NRW-Tarif TicketName SchönerTagTicket NRW 5 Personen PREIS_1KL_ERW PREIS_2KL_ERW 36.00 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchönerTagTicket NRW Single PREIS_1KL_ERW PREIS_2KL_ERW 26.00 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchöneWocheTicket NRW PREIS_1KL_ERW 117.60 PREIS_2KL_ERW 80.10 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchönerMonatTicket NRW PREIS_1KL_ERW 368.50 PREIS_2KL_ERW 252.10 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchönerMonatTicket NRW Abo PREIS_1KL_ERW 301.90 PREIS_2KL_ERW 206.60 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchönerMonatTicket NRW Azubi PREIS_1KL_ERW PREIS_2KL_ERW 217.80 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchönerMonatTicket NRW Azubi Abo PREIS_1KL_ERW PREIS_2KL_ERW 178.30 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchönesJahrTicket NRW PREIS_1KL_ERW 3675.00 PREIS_2KL_ERW 2600.00 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchönesJahrTicket NRW Abo PREIS_1KL_ERW 320.00 PREIS_2KL_ERW 225.00 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName FahrradTicket NRW PREIS_1KL_ERW PREIS_2KL_ERW 4.00 PREIS_1KL_KIND PREIS_2KL_KIND 1-1 00 Daten DB AG Fahrradmitnahme begrenzt möglich 00 Daten DB AG Linie S6: Fahrradmitnahme begrenzt möglich NRW-Tarif: 17,00 ? (2.Kl) / PauschalpreisTickets gültig TicketType NRW-Tarif TicketName SchöneReiseTicket NRW Einzelfahrt PREIS_1KL_ERW 26.50 PREIS_2KL_ERW 17.00 PREIS_1KL_KIND 13.25 PREIS_2KL_KIND 8.50 TicketType NRW-Tarif TicketName SchöneFahrtTicket NRW PREIS_1KL_ERW PREIS_2KL_ERW 16.60 PREIS_1KL_KIND PREIS_2KL_KIND 8.30 TicketType NRW-Tarif TicketName SchönerTagTicket NRW 5 Personen PREIS_1KL_ERW PREIS_2KL_ERW 36.00 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchönerTagTicket NRW Single PREIS_1KL_ERW PREIS_2KL_ERW 26.00 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchöneWocheTicket NRW PREIS_1KL_ERW 118.60 PREIS_2KL_ERW 80.80 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchönerMonatTicket NRW PREIS_1KL_ERW 370.90 PREIS_2KL_ERW 253.70 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchönerMonatTicket NRW Abo PREIS_1KL_ERW 303.80 PREIS_2KL_ERW 207.90 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchönerMonatTicket NRW Azubi PREIS_1KL_ERW PREIS_2KL_ERW 223.50 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchönerMonatTicket NRW Azubi Abo PREIS_1KL_ERW PREIS_2KL_ERW 183.30 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchönesJahrTicket NRW PREIS_1KL_ERW 3675.00 PREIS_2KL_ERW 2600.00 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchönesJahrTicket NRW Abo PREIS_1KL_ERW 320.00 PREIS_2KL_ERW 225.00 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName FahrradTicket NRW PREIS_1KL_ERW PREIS_2KL_ERW 4.00 PREIS_1KL_KIND PREIS_2KL_KIND 1-2 00 Daten DB AG Fahrradmitnahme begrenzt möglich NRW-Tarif: 17,00 ? (2.Kl) / PauschalpreisTickets gültig TicketType NRW-Tarif TicketName SchöneReiseTicket NRW Einzelfahrt PREIS_1KL_ERW 26.50 PREIS_2KL_ERW 17.00 PREIS_1KL_KIND 13.25 PREIS_2KL_KIND 8.50 TicketType NRW-Tarif TicketName SchöneFahrtTicket NRW PREIS_1KL_ERW PREIS_2KL_ERW 16.60 PREIS_1KL_KIND PREIS_2KL_KIND 8.30 TicketType NRW-Tarif TicketName SchönerTagTicket NRW 5 Personen PREIS_1KL_ERW PREIS_2KL_ERW 36.00 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchönerTagTicket NRW Single PREIS_1KL_ERW PREIS_2KL_ERW 26.00 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchöneWocheTicket NRW PREIS_1KL_ERW 118.60 PREIS_2KL_ERW 80.80 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchönerMonatTicket NRW PREIS_1KL_ERW 370.90 PREIS_2KL_ERW 253.70 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchönerMonatTicket NRW Abo PREIS_1KL_ERW 303.80 PREIS_2KL_ERW 207.90 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchönerMonatTicket NRW Azubi PREIS_1KL_ERW PREIS_2KL_ERW 223.50 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchönerMonatTicket NRW Azubi Abo PREIS_1KL_ERW PREIS_2KL_ERW 183.30 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchönesJahrTicket NRW PREIS_1KL_ERW 3675.00 PREIS_2KL_ERW 2600.00 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName SchönesJahrTicket NRW Abo PREIS_1KL_ERW 320.00 PREIS_2KL_ERW 225.00 PREIS_1KL_KIND PREIS_2KL_KIND TicketType NRW-Tarif TicketName FahrradTicket NRW PREIS_1KL_ERW PREIS_2KL_ERW 4.00 PREIS_1KL_KIND PREIS_2KL_KIND 1-1 Travel-Routing-DE-VRR-2.19/t/in/e_hbf_mh_hbf000444001750001750 10263013653243016 17653 0ustar00derfderf000000000000 Fahrplanauskunft
Aushangfahrplan
Abfahrtsmonitor
Persönlicher Fahrplan
Verbundfahrplan Schnellverkehr
Linienplan Schnellverkehr
Stadtlinienpläne
Bedienungshinweise
Bildschirmschoner
Aktuelle Hinweise
Ihr Link zu uns
Impressum
Homepage
Fahrplanauskunft
*
*
* von: Essen / Hauptbahnhof nach: Mülheim a.d. Ruhr / Hbf
*
Abfahrt: 12:00 Uhr Datum: 07.06.2010
*
*
*
* Fahrtdaten Fahrtdauer Umsteigen Preisstufe
*
* 1. Fahrt: am 07.06.2010 von 11:55 bis 12:05 Uhr 00:10 0 A2*
* 2. Fahrt: am 07.06.2010 von 12:08 bis 12:13 Uhr 00:05 0 A2*
* 3. Fahrt: am 07.06.2010 von 12:15 bis 12:25 Uhr 00:10 0 A2*
*
*
*
* zur Druckversion der ausgewählten Verbindungen In Datei Drucken zur Druckversion der ausgewählten Verbindungen (Alle Angaben ohne Gewähr.)
*
*
* *
*
*
*
* 1. Fahrt
11:55 ab Essen Hauptbahnhof: Gleis 7 *Umgebungsplan*Umgebungsplan*Umgebungsplan*Stadtplan S-Bahn S-Bahn S1
* 12:05 an Mülheim Hbf: Gleis 5 *Umgebungsplan*Stadtplan Solingen Hbf
* Linie S1: Fahrradmitnahme begrenzt möglich
*
* Verbindung zum Drucken auswählen
*
*
*
* 2. Fahrt
12:08 ab Essen Hauptbahnhof: Gleis 2 *Umgebungsplan*Umgebungsplan*Umgebungsplan*Stadtplan Zug R-Bahn RE1
* 12:13 an Mülheim Hbf: Gleis 6 *Umgebungsplan*Stadtplan Aachen Hbf
* Fahrradmitnahme begrenzt möglich
*
* Verbindung zum Drucken auswählen
*
*
*
* 3. Fahrt
12:15 ab Essen Hauptbahnhof: Gleis 7 *Umgebungsplan*Umgebungsplan*Umgebungsplan*Stadtplan S-Bahn S-Bahn S1
* 12:25 an Mülheim Hbf: Gleis 5 *Umgebungsplan*Stadtplan Solingen Hbf
* Linie S1: Fahrradmitnahme begrenzt möglich
*
* Verbindung zum Drucken auswählen
*
*
*
Abweichung Verspätungen sind berücksichtigt Pünktlich Fahrt voraussichtlich pünktlich
*
*
*
* zur Druckversion der ausgewählten Verbindungen In Datei Drucken zur Druckversion der ausgewählten Verbindungen (Alle Angaben ohne Gewähr.)
*
*
* *
*
*
* *
Travel-Routing-DE-VRR-2.19/t/in/e_hbf_mh_hbf.xml000444001750001750 16344713653243016 20467 0ustar00derfderf000000000000 Essen Essen Hauptbahnhof hbf Mülheim a.d. Ruhr mh Hbf Hbf Hbf Hauptbahnhof Nordeingang Kaiserplatz Zug S-Bahn U-Bahn Stadtbahn Straßen-/Trambahn Stadtbus Regionalbus Schnellbus Seil-/Zahnradbahn Schiff AST/Rufbus Sonstige 10 12 0 22 21 59 54 56 62 57 60 52 50 58 66 64 69 68 80 110 113 112 130 131 154 156 152 150 172 174 170 190 182 176 186 178 184 180 192 200 202 206 204 194 223 219 208 209 218 217 212 214 216 210 221 232 230 234 240 242 254 252 250 260 270 266 262 268 264 256 272 282 280 302 300 290 306 304 314 312 316 310 322 326 328 321 324 320 334 332 330 340 344 342 350 352 358 356 366 360 364 354 362 368 380 376 382 378 374 372 383 377 370 391 389 384 388 386 414 412 410 416 424 422 420 430 442 444 436 440 438 432 434 446 450 452 463 462 460 466 468 464 476 478 470 472 474 481 491 482 510 509 504 508 506 502 500 512 514 523 521 522 524 526 520 528 530 540 542 554 550 552 586 588 584 587 580 582 622 620 614 612 610 630 632 624 640 644 642 654 652 650 658 668 656 660 666 664 670 677 675 676 678 679 672 674 700 722 720 732 730 740 746 742 750 748 754 760 752 821 822 840 850 00 Daten DB AG Linie S3: Fahrradmitnahme begrenzt möglich 350 342 1-1 00 Daten DB AG Fahrradmitnahme begrenzt möglich 350 342 1-1 00 Daten DB AG Fahrradmitnahme begrenzt möglich 350 342 1-1 00 Daten DB AG Linie S1: Achtung! Baumaßnahmen. Infos: www.bahn.de/bauarbeiten Linie S1: Fahrradmitnahme begrenzt möglich 350 342 1-1 Travel-Routing-DE-VRR-2.19/t/in/e_martinstr_e_florastr000444001750001750 10257213653243016 22061 0ustar00derfderf000000000000 Fahrplanauskunft
Aushangfahrplan
Abfahrtsmonitor
Persönlicher Fahrplan
Verbundfahrplan Schnellverkehr
Linienplan Schnellverkehr
Stadtlinienpläne
Bedienungshinweise
Bildschirmschoner
Aktuelle Hinweise
Ihr Link zu uns
Impressum
Homepage
Fahrplanauskunft
*
*
* von: Essen / Martinstr. nach: Essen / Florastr.
*
Abfahrt: 12:00 Uhr Datum: 07.06.2010
*
*
*
* Fahrtdaten Fahrtdauer Umsteigen Preisstufe
*
* 1. Fahrt: am 07.06.2010 von 11:58 bis 11:59 Uhr 00:01 0 A2*
* 2. Fahrt: am 07.06.2010 von 12:05 bis 12:06 Uhr 00:01 0 A2*
* 3. Fahrt: am 07.06.2010 von 12:08 bis 12:09 Uhr 00:01 0 A2*
* 4. Fahrt: am 07.06.2010 von 12:00 bis 12:12 Uhr 00:12 0
*
*
*
* zur Druckversion der ausgewählten Verbindungen In Datei Drucken zur Druckversion der ausgewählten Verbindungen (Alle Angaben ohne Gewähr.)
*
*
* *
*
*
*
* 1. Fahrt
11:58 ab Essen Martinstr.: Bstg. 2 *Stadtplan Tram Straßenbahn 101
* 11:59 an Essen Florastr.: Bstg. 2 *Umgebungsplan*Stadtplan Bredeney
*
* Verbindung zum Drucken auswählen
*
*
*
* 2. Fahrt
12:05 ab Essen Martinstr.: Bstg. 2 *Stadtplan Tram Straßenbahn 107
* 12:06 an Essen Florastr.: Bstg. 2 *Umgebungsplan*Stadtplan Bredeney
*
* Verbindung zum Drucken auswählen
*
*
*
* 3. Fahrt
12:08 ab Essen Martinstr.: Bstg. 2 *Stadtplan Tram Straßenbahn 101
* 12:09 an Essen Florastr.: Bstg. 2 *Umgebungsplan*Stadtplan Bredeney
*
* Verbindung zum Drucken auswählen
*
*
*
* 4. Fahrt
ab Essen Martinstr. *Stadtplan Fußweg Fußweg ca. 12 Minuten
* an Essen Florastr. *Stadtplan
*
* Verbindung zum Drucken auswählen
*
*
*
Abweichung Verspätungen sind berücksichtigt Pünktlich Fahrt voraussichtlich pünktlich
*
*
*
* zur Druckversion der ausgewählten Verbindungen In Datei Drucken zur Druckversion der ausgewählten Verbindungen (Alle Angaben ohne Gewähr.)
*
*
* *
*
*
* *
Travel-Routing-DE-VRR-2.19/t/in/e_werden_e_hbf000444001750001750 11614613653243016 20227 0ustar00derfderf000000000000 Fahrplanauskunft
Aushangfahrplan
Abfahrtsmonitor
Persönlicher Fahrplan
Verbundfahrplan Schnellverkehr
Linienplan Schnellverkehr
Stadtlinienpläne
Bedienungshinweise
Bildschirmschoner
Aktuelle Hinweise
Ihr Link zu uns
Impressum
Homepage
Fahrplanauskunft
*
*
* von: Essen / Werden S nach: Essen / Hauptbahnhof
*
Abfahrt: 12:00 Uhr Datum: 07.06.2010
*
*
*
* Fahrtdaten Fahrtdauer Umsteigen Preisstufe
*
* 1. Fahrt: am 07.06.2010 von 11:46 bis 12:08 Uhr 00:22 1 A2*
* 2. Fahrt: am 07.06.2010 von 12:01 bis 12:12 Uhr 00:11 0 A2*
* 3. Fahrt: am 07.06.2010 von 12:06 bis 12:28 Uhr 00:22 1 A2*
*
*
*
* zur Druckversion der ausgewählten Verbindungen In Datei Drucken zur Druckversion der ausgewählten Verbindungen (Alle Angaben ohne Gewähr.)
*
*
* *
*
*
*
* 1. Fahrt
11:46
früher
ab Essen Werden S: Bstg. 4 *Umgebungsplan*Stadtplan Niederflurbus Niederflurbus 169
* 11:53 an Essen Bredeney: Bstg. 3 *Umgebungsplan*Stadtplan Margarethenhöhe
* Level ca. 1 Minute
11:57 ab Essen Bredeney: Bstg. 5 Tram Straßenbahn 107
* 12:08
später
an Essen Hauptbahnhof: Bstg. 1 *Umgebungsplan*Umgebungsplan*Umgebungsplan*Stadtplan Gelsenkirchen Hbf
*
* Verbindung zum Drucken auswählen
*
*
*
* 2. Fahrt
12:01 ab Essen Werden S: Gleis 1 *Umgebungsplan*Stadtplan S-Bahn S-Bahn S6
* 12:12 an Essen Hauptbahnhof: Gleis 12 *Umgebungsplan*Umgebungsplan*Umgebungsplan*Stadtplan Essen Hauptbahnhof
* Linie S6: Fahrradmitnahme begrenzt möglich
*
* Verbindung zum Drucken auswählen
*
*
*
* 3. Fahrt
12:06
früher
ab Essen Werden S: Bstg. 4 *Umgebungsplan*Stadtplan Niederflurbus Niederflurbus 169
* 12:13 an Essen Bredeney: Bstg. 3 *Umgebungsplan*Stadtplan Margarethenhöhe
* Level ca. 1 Minute
12:17 ab Essen Bredeney: Bstg. 5 Tram Straßenbahn 107
* 12:28
später
an Essen Hauptbahnhof: Bstg. 1 *Umgebungsplan*Umgebungsplan*Umgebungsplan*Stadtplan Gelsenkirchen Hbf
*
* Verbindung zum Drucken auswählen
*
*
*
Abweichung Verspätungen sind berücksichtigt Pünktlich Fahrt voraussichtlich pünktlich
*
*
*
* zur Druckversion der ausgewählten Verbindungen In Datei Drucken zur Druckversion der ausgewählten Verbindungen (Alle Angaben ohne Gewähr.)
*
*
* *
*
*
* *
Travel-Routing-DE-VRR-2.19/t/in/invalid_input000444001750001750 11625213653243016 20157 0ustar00derfderf000000000000 Fahrplanauskunft
Aushangfahrplan
Abfahrtsmonitor
Persönlicher Fahrplan
Verbundfahrplan Schnellverkehr
Linienplan Schnellverkehr
Stadtlinienpläne
Bedienungshinweise
Bildschirmschoner
Aktuelle Hinweise
Ihr Link zu uns
Impressum
Homepage
 
Fahrplanauskunft
*
*  von: Stadt/Ort *Essen *
 
*
* Haltestelle *Hauptbahnhof
* *
*
*
*  nach: Stadt/Ort *Düsseldorf *
 
*
* Haltestelle *Hbf
* *
*
*
*  Linienauswahl
*
* alle Linien
* alle Linien ohne ICE
* nur Verbund-/Nahverkehrslinien
*
*  Umsteigen / Fußwege
* *
zeitkürzeste Verbindungen
Verbindungen mit wenig Umsteigen
Verbindungen mit kurzen Fußwegen
*
 Gehgeschwindigkeit 
* *
normal
schnell
langsam
*
  Berücksichtigung von Nachbarhaltestellen bei Start und Ziel
*
*
*
*  Zeit:
*  Abfahrt * Uhr * Datum
*  Ankunft        
* Uhrzeit unbrauchbar
*
*
*
* * *
*
*
* *
Travel-Routing-DE-VRR-2.19/t/in/no_connections000444001750001750 12325613653243016 20332 0ustar00derfderf000000000000 Fahrplanauskunft
Aushangfahrplan
Abfahrtsmonitor
Persönlicher Fahrplan
Verbundfahrplan Schnellverkehr
Linienplan Schnellverkehr
Stadtlinienpläne
Bedienungshinweise
Bildschirmschoner
Aktuelle Hinweise
Ihr Link zu uns
Impressum
Homepage
 
Fahrplanauskunft
*
*
* Leider konnte für Ihre Anfrage keine Verbindung gefunden werden! Bitte ändern Sie Ihre Eingabe (z.B. Fußwegezeit in den Mobilitätseinstellungen) oder starten Sie eine neue Anfrage! *
*
*
*
*
*
* Leider konnte für Ihre Anfrage keine Verbindung gefunden werden! Bitte ändern Sie Ihre Eingabe (z.B. Fußwegezeit in den Mobilitätseinstellungen) oder starten Sie eine neue Anfrage! *
*
*
*
*
*  von: Stadt/Ort *Zürich *
 
*
* Haltestelle *Hauptbahnhof
* *
*
*
*  nach: Stadt/Ort *Essen *
 
*
* Haltestelle *Hauptbahnhof
* *
*
*
*  Linienauswahl
*
* alle Linien
* alle Linien ohne ICE
* nur Verbund-/Nahverkehrslinien
*
*  Umsteigen / Fußwege
* *
zeitkürzeste Verbindungen
Verbindungen mit wenig Umsteigen
Verbindungen mit kurzen Fußwegen
*
 Gehgeschwindigkeit 
* *
normal
schnell
langsam
*
  Berücksichtigung von Nachbarhaltestellen bei Start und Ziel
*
*
*
*  Zeit:
*  Abfahrt * Uhr * Datum
*  Ankunft        
*
*
*
* * *
*
*
* *
Travel-Routing-DE-VRR-2.19/t/out000700001750001750 013653243016 15352 5ustar00derfderf000000000000Travel-Routing-DE-VRR-2.19/t/out/e_hbf_b_hbf.ice000444001750001750 422713653243016 20373 0ustar00derfderf00000000000011:23 ab Essen Hauptbahnhof: Gleis 4 ICE 547 InterCityExpress Berlin Ostbahnhof 12:07 an Hamm (Westf): Gleis 5 E-H # nicht umsteigen, # Weiterfahrt im selben Fahrzeug möglich 12:11 ab Hamm (Westf): Gleis 5 ICE 557 InterCityExpress Berlin Ostbahnhof 13:34 an Hannover Hauptbahnhof: Gleis 9 # nicht umsteigen, # Weiterfahrt im selben Fahrzeug möglich 13:37 ab Hannover Hauptbahnhof: Gleis 9 ICE 547 InterCityExpress Berlin Ostbahnhof 15:08 an Berlin Hbf: Gleis 12 D - G ------ 12:23 ab Essen Hauptbahnhof: Gleis 4 ICE 849 InterCityExpress Berlin Ostbahnhof 13:07 an Hamm (Westf): Gleis 5 E-H # nicht umsteigen, # Weiterfahrt im selben Fahrzeug möglich 13:11 ab Hamm (Westf): Gleis 5 ICE 859 InterCityExpress Berlin Ostbahnhof 14:31 an Hannover Hauptbahnhof: Gleis 10 # nicht umsteigen, # Weiterfahrt im selben Fahrzeug möglich 14:34 ab Hannover Hauptbahnhof: Gleis 10 ICE 849 InterCityExpress Berlin Ostbahnhof 16:11 an Berlin Hbf: Gleis 12 A - D ------ 13:23 ab Essen Hauptbahnhof: Gleis 6 ICE 549 InterCityExpress Berlin Ostbahnhof 14:07 an Hamm (Westf): Gleis 5 E-H # nicht umsteigen, # Weiterfahrt im selben Fahrzeug möglich 14:11 ab Hamm (Westf): Gleis 5 ICE 559 InterCityExpress Berlin Ostbahnhof 15:34 an Hannover Hauptbahnhof: Gleis 9 # nicht umsteigen, # Weiterfahrt im selben Fahrzeug möglich 15:37 ab Hannover Hauptbahnhof: Gleis 9 ICE 549 InterCityExpress Berlin Ostbahnhof 16:54 an Berlin-Spandau: Gleis 6 A - C # Linie KBS 202: SnackPoint/Imbiss im Zug 17:03 ab Berlin-Spandau IC 145 InterCity Berlin Hbf 17:03 an Berlin Hbf ------ 13:23 ab Essen Hauptbahnhof: Gleis 6 ICE 549 InterCityExpress Berlin Ostbahnhof 14:07 an Hamm (Westf): Gleis 5 E-H # nicht umsteigen, # Weiterfahrt im selben Fahrzeug möglich 14:11 ab Hamm (Westf): Gleis 5 ICE 559 InterCityExpress Berlin Ostbahnhof 15:34 an Hannover Hauptbahnhof: Gleis 9 # nicht umsteigen, # Weiterfahrt im selben Fahrzeug möglich 15:37 ab Hannover Hauptbahnhof: Gleis 9 ICE 549 InterCityExpress Berlin Ostbahnhof 17:08 an Berlin Hbf: Gleis 12 A - D Travel-Routing-DE-VRR-2.19/t/out/e_hbf_b_hbf.ice.ignore_all000444001750001750 316513653243016 22505 0ustar00derfderf00000000000011:23 ab Essen Hauptbahnhof: Gleis 4 ICE 547 InterCityExpress Berlin Ostbahnhof 12:07 an Hamm (Westf): Gleis 5 E-H 12:11 ab Hamm (Westf): Gleis 5 ICE 557 InterCityExpress Berlin Ostbahnhof 13:34 an Hannover Hauptbahnhof: Gleis 9 13:37 ab Hannover Hauptbahnhof: Gleis 9 ICE 547 InterCityExpress Berlin Ostbahnhof 15:08 an Berlin Hbf: Gleis 12 D - G ------ 12:23 ab Essen Hauptbahnhof: Gleis 4 ICE 849 InterCityExpress Berlin Ostbahnhof 13:07 an Hamm (Westf): Gleis 5 E-H 13:11 ab Hamm (Westf): Gleis 5 ICE 859 InterCityExpress Berlin Ostbahnhof 14:31 an Hannover Hauptbahnhof: Gleis 10 14:34 ab Hannover Hauptbahnhof: Gleis 10 ICE 849 InterCityExpress Berlin Ostbahnhof 16:11 an Berlin Hbf: Gleis 12 A - D ------ 13:23 ab Essen Hauptbahnhof: Gleis 6 ICE 549 InterCityExpress Berlin Ostbahnhof 14:07 an Hamm (Westf): Gleis 5 E-H 14:11 ab Hamm (Westf): Gleis 5 ICE 559 InterCityExpress Berlin Ostbahnhof 15:34 an Hannover Hauptbahnhof: Gleis 9 15:37 ab Hannover Hauptbahnhof: Gleis 9 ICE 549 InterCityExpress Berlin Ostbahnhof 16:54 an Berlin-Spandau: Gleis 6 A - C 17:03 ab Berlin-Spandau IC 145 InterCity Berlin Hbf 17:03 an Berlin Hbf ------ 13:23 ab Essen Hauptbahnhof: Gleis 6 ICE 549 InterCityExpress Berlin Ostbahnhof 14:07 an Hamm (Westf): Gleis 5 E-H 14:11 ab Hamm (Westf): Gleis 5 ICE 559 InterCityExpress Berlin Ostbahnhof 15:34 an Hannover Hauptbahnhof: Gleis 9 15:37 ab Hannover Hauptbahnhof: Gleis 9 ICE 549 InterCityExpress Berlin Ostbahnhof 17:08 an Berlin Hbf: Gleis 12 A - D Travel-Routing-DE-VRR-2.19/t/out/e_hbf_du_hbf.ice000444001750001750 61713653243016 20541 0ustar00derfderf000000000000# Bordrestaurant 11:59 ab Essen Hauptbahnhof: Gleis 1 IC 2113 InterCity Stuttgart Hauptbahnhof (oben) 12:10 an Duisburg Hbf: Gleis 4 ------ 12:08 ab Essen Hauptbahnhof: Gleis 2 R-Bahn RE1 Aachen Hbf 12:21 an Duisburg Hbf: Gleis 4 ------ 12:15 ab Essen Hauptbahnhof: Gleis 7 S-Bahn S1 Solingen Hbf 12:33 an Duisburg Hbf: Gleis 5 Travel-Routing-DE-VRR-2.19/t/out/e_hbf_mh_hbf000444001750001750 56313653243016 17776 0ustar00derfderf00000000000011:55 ab Essen Hauptbahnhof: Gleis 7 S-Bahn S1 Solingen Hbf 12:05 an Mülheim Hbf: Gleis 5 ------ 12:08 ab Essen Hauptbahnhof: Gleis 2 R-Bahn RE1 Aachen Hbf 12:13 an Mülheim Hbf: Gleis 6 ------ 12:15 ab Essen Hauptbahnhof: Gleis 7 S-Bahn S1 Solingen Hbf 12:25 an Mülheim Hbf: Gleis 5 Travel-Routing-DE-VRR-2.19/t/out/e_hbf_mh_hbf.ignore_none000444001750001750 77113653243016 22300 0ustar00derfderf000000000000# Linie S1: Fahrradmitnahme begrenzt möglich 11:55 ab Essen Hauptbahnhof: Gleis 7 S-Bahn S1 Solingen Hbf 12:05 an Mülheim Hbf: Gleis 5 ------ # Fahrradmitnahme begrenzt möglich 12:08 ab Essen Hauptbahnhof: Gleis 2 R-Bahn RE1 Aachen Hbf 12:13 an Mülheim Hbf: Gleis 6 ------ # Linie S1: Fahrradmitnahme begrenzt möglich 12:15 ab Essen Hauptbahnhof: Gleis 7 S-Bahn S1 Solingen Hbf 12:25 an Mülheim Hbf: Gleis 5 Travel-Routing-DE-VRR-2.19/t/out/e_martinstr_e_florastr000444001750001750 73613653243016 22201 0ustar00derfderf00000000000011:58 ab Essen Martinstr.: Bstg. 2 Straßenbahn 101 Bredeney 11:59 an Essen Florastr.: Bstg. 2 ------ 12:05 ab Essen Martinstr.: Bstg. 2 Straßenbahn 107 Bredeney 12:06 an Essen Florastr.: Bstg. 2 ------ 12:08 ab Essen Martinstr.: Bstg. 2 Straßenbahn 101 Bredeney 12:09 an Essen Florastr.: Bstg. 2 ------ ab Essen Martinstr. Fußweg ca. 12 Minuten an Essen Florastr. Travel-Routing-DE-VRR-2.19/t/out/e_werden_e_hbf000444001750001750 117113653243016 20357 0ustar00derfderf00000000000011:46 ab Essen Werden S: Bstg. 4 Niederflurbus 169 Margarethenhöhe 11:53 an Essen Bredeney: Bstg. 3 11:57 ab Essen Bredeney: Bstg. 5 Straßenbahn 107 Gelsenkirchen Hbf 12:08 an Essen Hauptbahnhof: Bstg. 1 ------ 12:01 ab Essen Werden S: Gleis 1 S-Bahn S6 Essen Hauptbahnhof 12:12 an Essen Hauptbahnhof: Gleis 12 ------ 12:06 ab Essen Werden S: Bstg. 4 Niederflurbus 169 Margarethenhöhe 12:13 an Essen Bredeney: Bstg. 3 12:17 ab Essen Bredeney: Bstg. 5 Straßenbahn 107 Gelsenkirchen Hbf 12:28 an Essen Hauptbahnhof: Bstg. 1 Travel-Routing-DE-VRR-2.19/xt000700001750001750 013653243016 14733 5ustar00derfderf000000000000Travel-Routing-DE-VRR-2.19/xt/00-compile-pm.t000555001750001750 16013653243016 17526 0ustar00derfderf000000000000#!/usr/bin/env perl use strict; use warnings; use 5.010; use Test::More; use Test::Compile; all_pm_files_ok(); Travel-Routing-DE-VRR-2.19/xt/01-compile-pl.t000555001750001750 16013653243016 17526 0ustar00derfderf000000000000#!/usr/bin/env perl use strict; use warnings; use 5.010; use Test::More; use Test::Compile; all_pl_files_ok(); Travel-Routing-DE-VRR-2.19/xt/10-pod.t000555001750001750 15513653243016 16253 0ustar00derfderf000000000000#!/usr/bin/env perl use strict; use warnings; use 5.010; use Test::More; use Test::Pod; all_pod_files_ok();