diff --git a/.eslintrc.json b/.eslintrc.json index 45c9cf2fa..42d47d826 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -29,9 +29,11 @@ "@stylistic/function-paren-newline": "off", "@stylistic/indent": ["error", "tab"], "@stylistic/indent-binary-ops": ["error", "tab"], + "@stylistic/lines-around-comment": ["error", { "ignorePattern": "Bergmann" }], "@stylistic/max-len": "off", "@stylistic/multiline-ternary": ["error", "always-multiline"], "@stylistic/newline-per-chained-call": ["error", { "ignoreChainWithDepth": 1 }], + "@stylistic/no-extra-parens": "off", /* J.B. tsc doc typing needs parens */ "@stylistic/no-mixed-operators": "off", "@stylistic/no-tabs": "off", "@stylistic/object-property-newline": "off", diff --git a/.github/workflows/test-types.yml b/.github/workflows/test-types.yml new file mode 100644 index 000000000..8b0f497df --- /dev/null +++ b/.github/workflows/test-types.yml @@ -0,0 +1,29 @@ +name: test types + +on: + push: + branches: [ add-types-in-jsdoc ] + +jobs: + + build: + + runs-on: ubuntu-latest + + steps: + + - name: Checkout + uses: actions/checkout@v2 + with: + ref: add-types-in-jsdoc + + - name: setup node + uses: actions/setup-node@v3 + with: + node-version: 16 + + - run: npm install + + - run: npm run tsc + - run: npm run lint + - run: npm run test-unit diff --git a/.gitignore b/.gitignore index 0c5b91e99..0c21cd25f 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ npm-debug.log package-lock.json /.tap +/build \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 000000000..824559ba4 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,17 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "node", + "request": "launch", + "name": "Launch Program", + "skipFiles": [ + "/**" + ], + "program": "${workspaceFolder}/test/index.js", + } + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..e46111f13 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "editor.insertSpaces": false +} \ No newline at end of file diff --git a/changed-files.txt b/changed-files.txt new file mode 100644 index 000000000..a9a34597c --- /dev/null +++ b/changed-files.txt @@ -0,0 +1 @@ +.gitignore create-declaration-file.sh export-defaultProfile.js format/ index.d.ts index.js lib/ p/ package.json parse/ tsconfig.json types-private.ts types.ts typescript-readme.md diff --git a/create-declaration-file.sh b/create-declaration-file.sh new file mode 100755 index 000000000..3eae01352 --- /dev/null +++ b/create-declaration-file.sh @@ -0,0 +1,33 @@ +#!/bin/bash +# create a TypeScript declaration file for DefinitelyTyped ./build/index.d.ts are included + +if [ ! -f "./tsconfig.json" ]; then + echo "please run from project directory" + exit 1 +fi + +npx tsc --emitDeclarationOnly true --noEmit false + +if [ $? -ne 0 ] +then + exit 1 +fi + +VERSION=$(grep "version" package.json | sed -E 's/.*([0-9]+\.[0-9]+)\..*/\1/') + +cat > ./index.d.ts << EOF +// Type definitions for hafas-client ${VERSION} +// Project: https://github.com/public-transport/hafas-client +// Definitions by: Jürgen Bergmann +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +EOF + +cat ./build/types.d.ts >> ./index.d.ts + +cat >> ./index.d.ts << EOF + +export function createClient(commonProfile: Profile, userAgent: string, opt?: any): HafasClient; +EOF + +sed -i 's/export declare type/export type/' index.d.ts diff --git a/create-types-test-file.sh b/create-types-test-file.sh new file mode 100755 index 000000000..fada58f1e --- /dev/null +++ b/create-types-test-file.sh @@ -0,0 +1,48 @@ +#!/bin/bash +# create a TypeScript file from test fixture js and json files and tools/debug-cli/cli.js results + +if [ ! -f "./tsconfig.json" ]; then + echo "please run from project directory" + exit 1 +fi + +DATE=$(date) +OUTFILE="types-test-generated.ts" + +echo "// created with script './create-types-test-file.sh' at ${DATE}" > ${OUTFILE} +echo "" >> ${OUTFILE} +echo "import { Journeys, Journey, Alternative, Station, Stop, Location, Departures, Arrivals } from './types'" >> ${OUTFILE} +echo "import { RawResult, RawResponse } from './types-raw-api'" >> ${OUTFILE} + +echo "const r1 : RawResult = " >> ${OUTFILE} +cat test/fixtures/db-journey.json >> ${OUTFILE} + +echo "const r2 : RawResult = " >> ${OUTFILE} +cat test/fixtures/db-journey-2.json >> ${OUTFILE} + +echo "const r3 : RawResult = " >> ${OUTFILE} +cat test/fixtures/db-journey-polyline.json >> ${OUTFILE} + +sed -e '/use strict/d' -e 's/const dbJourney/const dbJourney: Journey/' test/fixtures/db-journey.js >> ${OUTFILE} + +sed -e '/use strict/d' -e 's/const dbJourneyPolyline/const dbJourneyPolyline: Journey/' test/fixtures/db-journey-polyline.js >> ${OUTFILE} + +sed -e '/use strict/d' -e 's/const dbArrivals/const dbArrivals: Alternative[]/' test/fixtures/db-arrivals.js >> ${OUTFILE} + +sed -e '/use strict/d' -e 's/const bvgRadar/const bvgRadar: Alternative[]/' test/fixtures/bvg-radar.js >> ${OUTFILE} + +echo "const journeys : Journeys = " >> ${OUTFILE} +DEBUG=hafas-client node tools/debug-cli/cli.js db journeys 8000149 8000152 '{"results": 10, "transfers": 0, "stopovers": true}' >> ${OUTFILE} 2>x.txt + +echo "const rawResponse : RawResponse = " >> ${OUTFILE} +tail -1 x.txt >> ${OUTFILE} +rm x.txt + +echo "const locations : (Station | Stop | Location)[] = " >> ${OUTFILE} +node tools/debug-cli/cli.js db locations Hannover >> ${OUTFILE} + +echo "const departures : Departures = " >> ${OUTFILE} +node tools/debug-cli/cli.js db departures 8000152 >> ${OUTFILE} + +echo "const arrivals : Arrivals = " >> ${OUTFILE} +node tools/debug-cli/cli.js db arrivals 8000152 >> ${OUTFILE} diff --git a/format/lines-req.js b/format/lines-req.js index 6d78a93c5..73b8f013e 100644 --- a/format/lines-req.js +++ b/format/lines-req.js @@ -1,3 +1,8 @@ +/** + * @typedef {import("../types-private").DefaultProfile} DefaultProfile + */ + +/** @type {DefaultProfile["formatLinesReq"]} */ const formatLinesReq = (ctx, query) => { return { meth: 'LineMatch', diff --git a/format/location.js b/format/location.js index 28650fadd..ea2225c1a 100644 --- a/format/location.js +++ b/format/location.js @@ -1,3 +1,8 @@ +/** + * @typedef {import("../types-private").DefaultProfile} DefaultProfile + */ + +/** @type {DefaultProfile["formatLocation"]} */ const formatLocation = (profile, l, name = 'location') => { if ('string' === typeof l) { return profile.formatStation(l); diff --git a/format/locations-req.js b/format/locations-req.js index 704af61d4..6942afc78 100644 --- a/format/locations-req.js +++ b/format/locations-req.js @@ -1,3 +1,9 @@ +/** + * @typedef {import("../types-private").ProfileEx} ProfileEx + * @typedef {import("../types-private").DefaultProfile} DefaultProfile + */ + +/** @type {DefaultProfile["formatLocationsReq"]} */ const formatLocationsReq = (ctx, query) => { const {profile, opt} = ctx; diff --git a/format/nearby-req.js b/format/nearby-req.js index 5e4f8f7ee..020c1cacd 100644 --- a/format/nearby-req.js +++ b/format/nearby-req.js @@ -1,3 +1,9 @@ +/** + * @typedef {import("../types-private").ProfileEx} ProfileEx + * @typedef {import("../types-private").DefaultProfile} DefaultProfile + */ + +/** @type {DefaultProfile["formatNearbyReq"]} */ const formatNearbyReq = (ctx, location) => { const {profile, opt} = ctx; diff --git a/format/products-filter.js b/format/products-filter.js index 6158ec0e6..9d6059d60 100644 --- a/format/products-filter.js +++ b/format/products-filter.js @@ -1,7 +1,13 @@ import isObj from 'lodash/isObject.js'; +/** + * @typedef {import("../types-private").ProfileEx} ProfileEx + * @typedef {import("../types-private").DefaultProfile} DefaultProfile + */ + const hasProp = (o, k) => Object.prototype.hasOwnProperty.call(o, k); +/** @type {DefaultProfile["formatProductsFilter"]} */ const formatProductsFilter = (ctx, filter) => { if (!isObj(filter)) { throw new TypeError('products filter must be an object'); diff --git a/format/radar-req.js b/format/radar-req.js index 54d007230..031a2b45e 100644 --- a/format/radar-req.js +++ b/format/radar-req.js @@ -1,3 +1,8 @@ +/** + * @typedef {import("../types-private").DefaultProfile} DefaultProfile + */ + +/** @type {DefaultProfile["formatRadarReq"]} */ const formatRadarReq = (ctx, north, west, south, east) => { const {profile, opt} = ctx; diff --git a/format/reachable-from-req.js b/format/reachable-from-req.js index 1a0f49066..76d6f353e 100644 --- a/format/reachable-from-req.js +++ b/format/reachable-from-req.js @@ -1,3 +1,8 @@ +/** + * @typedef {import("../types-private").DefaultProfile} DefaultProfile + */ + +/** @type {DefaultProfile["formatReachableFromReq"]} */ const formatReachableFromReq = (ctx, address) => { const {profile, opt} = ctx; diff --git a/format/rectangle.js b/format/rectangle.js index c36fd8271..a8940ab3f 100644 --- a/format/rectangle.js +++ b/format/rectangle.js @@ -1,3 +1,8 @@ +/** + * @typedef {import("../types-private").DefaultProfile} DefaultProfile + */ + +/** @type {DefaultProfile["formatRectangle"]} */ const formatRectangle = (profile, north, west, south, east) => { return { llCrd: { diff --git a/format/refresh-journey-req.js b/format/refresh-journey-req.js index 92f23b185..4f892104f 100644 --- a/format/refresh-journey-req.js +++ b/format/refresh-journey-req.js @@ -1,6 +1,12 @@ +/** + * @typedef {import("../types-private").DefaultProfile} DefaultProfile + */ + +/** @type {DefaultProfile["formatRefreshJourneyReq"]} */ const formatRefreshJourneyReq = (ctx, refreshToken) => { const {profile, opt} = ctx; + /** @type {import("../types-raw-api").ReconstructionRequest} */ const req = { getIST: true, // todo: make an option getPasslist: Boolean(opt.stopovers), diff --git a/format/remarks-req.js b/format/remarks-req.js index ba45bc3ec..42f8d9387 100644 --- a/format/remarks-req.js +++ b/format/remarks-req.js @@ -1,3 +1,8 @@ +/** + * @typedef {import("../types-private").DefaultProfile} DefaultProfile + */ + +/** @type {DefaultProfile["formatRemarksReq"]} */ const formatRemarksReq = (ctx) => { const {profile, opt} = ctx; @@ -7,6 +12,7 @@ const formatRemarksReq = (ctx) => { himFltrL.push(profile.formatProductsFilter(ctx, opt.products)); } + /** @type {import("../types-raw-api").HimSearchRequest} */ const req = { himFltrL, }; diff --git a/format/station-board-req.js b/format/station-board-req.js index 9a8e779f1..5e109c37f 100644 --- a/format/station-board-req.js +++ b/format/station-board-req.js @@ -1,3 +1,8 @@ +/** + * @typedef {import("../types-private").DefaultProfile} DefaultProfile + */ + +/** @type {DefaultProfile["formatStationBoardReq"]} */ const formatStationBoardReq = (ctx, station, type) => { const {profile, opt} = ctx; @@ -8,6 +13,7 @@ const formatStationBoardReq = (ctx, station, type) => { jnyFltrL.push({type: 'LINEID', mode: 'INC', value: opt.line}); } + /** @type {import("../types-raw-api").StationBoardRequest} */ const req = { type, date: profile.formatDate(profile, opt.when), diff --git a/format/stop-req.js b/format/stop-req.js index 11f3a5f43..1581db2a6 100644 --- a/format/stop-req.js +++ b/format/stop-req.js @@ -1,3 +1,8 @@ +/** + * @typedef {import("../types-private").DefaultProfile} DefaultProfile + */ + +/** @type {DefaultProfile["formatStopReq"]} */ const formatStopReq = (ctx, stopRef) => { return { // todo: there's also `StationDetails`, are there differences? diff --git a/format/trip-req.js b/format/trip-req.js index 7a4af097c..fd012f190 100644 --- a/format/trip-req.js +++ b/format/trip-req.js @@ -1,3 +1,8 @@ +/** + * @typedef {import("../types-private").DefaultProfile} DefaultProfile + */ + +/** @type {DefaultProfile["formatTripReq"]} */ const formatTripReq = ({opt}, id) => { return { cfg: {polyEnc: 'GPA'}, diff --git a/index.d.ts b/index.d.ts new file mode 100644 index 000000000..4337e73a0 --- /dev/null +++ b/index.d.ts @@ -0,0 +1,1178 @@ +// Type definitions for hafas-client 6.2 +// Project: https://github.com/public-transport/hafas-client +// Definitions by: Jürgen Bergmann +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +/** + * A ProductType relates to how a means of transport "works" in local context. + * Example: Even though S-Bahn and U-Bahn in Berlin are both trains, they have different operators, service patterns, + * stations and look different. Therefore, they are two distinct products subway and suburban. + */ +export interface ProductType { + id: string; + mode: 'train' | 'bus' | 'watercraft' | 'taxi' | 'gondola' | 'aircraft' | 'car' | 'bicycle' | 'walking'; + name: string; + short: string; + bitmasks: number[]; + default: boolean; +} +/** + * A profile is a specific customisation for each endpoint. + * It parses data from the API differently, add additional information, or enable non-default methods. + */ +export interface Profile { + locale: string; + timezone: string; + endpoint: string; + products: ReadonlyArray; + trip?: boolean; + radar?: boolean; + refreshJourney?: boolean; + journeysFromTrip?: boolean; + reachableFrom?: boolean; + journeysWalkingSpeed?: boolean; + tripsByName?: boolean; + remarks?: boolean; + remarksGetPolyline?: boolean; + lines?: boolean; +} +/** + * A location object is used by other items to indicate their locations. + */ +export interface Location { + type: 'location'; + id?: string; + name?: string; + poi?: boolean; + address?: string; + longitude?: number; + latitude?: number; + altitude?: number; + distance?: number; +} +/** Each public transportation network exposes its products as boolean properties. See {@link ProductType} */ +export interface Products { + [product: string]: boolean; +} +export interface Facilities { + [product: string]: string | boolean; +} +export interface ReisezentrumOpeningHours { + Mo?: string; + Di?: string; + Mi?: string; + Do?: string; + Fr?: string; + Sa?: string; + So?: string; +} +/** + * A station is a larger building or area that can be identified by a name. + * It is usually represented by a single node on a public transport map. + * Whereas a stop usually specifies a location, a station often is a broader area + * that may span across multiple levels or buildings. + */ +export interface Station { + type: 'station'; + id?: string; + name?: string; + station?: Station; + location?: Location; + products?: Products; + lines?: ReadonlyArray; + isMeta?: boolean; + /** region ids */ + regions?: ReadonlyArray; + facilities?: Facilities; + reisezentrumOpeningHours?: ReisezentrumOpeningHours; + stops?: ReadonlyArray; + entrances?: ReadonlyArray; + transitAuthority?: string; + distance?: number; +} +/** + * Ids of a Stop, i.e. dhid as 'DELFI Haltestellen ID' + */ +export interface Ids { + [id: string]: string; +} +/** + * A stop is a single small point or structure at which vehicles stop. + * A stop always belongs to a station. It may for example be a sign, a basic shelter or a railway platform. + */ +export interface Stop { + type: 'stop'; + id?: string; + name?: string; + location?: Location; + station?: Station; + products?: Products; + lines?: ReadonlyArray; + isMeta?: boolean; + reisezentrumOpeningHours?: ReisezentrumOpeningHours; + ids?: Ids; + loadFactor?: string; + entrances?: ReadonlyArray; + transitAuthority?: string; + distance?: number; +} +/** + * A region is a group of stations, for example a metropolitan area or a geographical or cultural region. + */ +export interface Region { + type: 'region'; + id: string; + name: string; + /** station ids */ + stations: ReadonlyArray; +} +export interface Line { + type: 'line'; + id?: string; + name?: string; + adminCode?: string; + fahrtNr?: string; + additionalName?: string; + product?: string; + public?: boolean; + mode?: 'train' | 'bus' | 'watercraft' | 'taxi' | 'gondola' | 'aircraft' | 'car' | 'bicycle' | 'walking'; + /** routes ids */ + routes?: ReadonlyArray; + operator?: Operator; + express?: boolean; + metro?: boolean; + night?: boolean; + nr?: number; + symbol?: string; + directions?: ReadonlyArray; + productName?: string; +} +export interface RealtimeDataUpdatedAt { + realtimeDataUpdatedAt?: number; +} +/** + * A route represents a single set of stations, of a single line. + */ +export interface Route { + type: 'route'; + id: string; + line: string; + mode: 'train' | 'bus' | 'watercraft' | 'taxi' | 'gondola' | 'aircraft' | 'car' | 'bicycle' | 'walking'; + /** stop ids */ + stops: ReadonlyArray; +} +export interface Cycle { + min?: number; + max?: number; + nr?: number; +} +export interface ArrivalDeparture { + arrival?: number; + departure?: number; +} +/** + * There are many ways to format schedules of public transport routes. + * This one tries to balance the amount of data and consumability. + * It is specifically geared towards urban public transport, with frequent trains and homogenous travels. + */ +export interface Schedule { + type: 'schedule'; + id: string; + route: string; + mode: 'train' | 'bus' | 'watercraft' | 'taxi' | 'gondola' | 'aircraft' | 'car' | 'bicycle' | 'walking'; + sequence: ReadonlyArray; + /** array of Unix timestamps */ + starts: ReadonlyArray; +} +export interface Operator { + type: 'operator'; + id: string; + name: string; +} +export interface Hint { + type: 'hint' | 'status' | 'foreign-id' | 'local-fare-zone' | 'stop-website' | 'stop-dhid' | 'transit-authority'; + code?: string; + summary?: string; + text: string; + tripId?: string; +} +export interface Status { + type: 'hint' | 'status' | 'foreign-id' | 'local-fare-zone' | 'stop-website' | 'stop-dhid' | 'transit-authority'; + code?: string; + summary?: string; + text: string; + tripId?: string; +} +export interface IcoCrd { + x: number; + y: number; + type?: string; +} +export interface Edge { + fromLocation?: Station | Stop | Location; + toLocation?: Station | Stop | Location; + icon?: object; + dir?: number; + icoCrd?: IcoCrd; +} +export interface Event { + fromLocation?: Station | Stop | Location; + toLocation?: Station | Stop | Location; + start?: string; + end?: string; + sections?: string[]; +} +export interface Warning { + type: 'status' | 'warning'; + id?: string; + icon?: object; + summary?: string; + text?: string; + category?: string | number; + priority?: number; + products?: Products; + edges?: Edge[]; + events?: Event[]; + validFrom?: string | number; + validUntil?: string | number; + modified?: string | number; + company?: string; + categories?: number[]; + affectedLines?: Line[]; + fromStops?: ReadonlyArray; + toStops?: ReadonlyArray; +} +export interface Geometry { + type: 'Point'; + coordinates: number[]; +} +export interface Feature { + type: 'Feature'; + properties: Station | Stop | Location | object; + geometry: Geometry; +} +export interface FeatureCollection { + type: 'FeatureCollection'; + features: ReadonlyArray; +} +export type PrognosisType = 'prognosed' | 'calculated'; +/** + * A stopover represents a vehicle stopping at a stop/station at a specific time. + */ +export interface StopOver { + stop?: Station | Stop; + /** null, if last stopOver of trip */ + departure?: string; + departureDelay?: number; + prognosedDeparture?: string; + plannedDeparture?: string; + departurePlatform?: string; + prognosedDeparturePlatform?: string; + plannedDeparturePlatform?: string; + /** null, if first stopOver of trip */ + arrival?: string; + arrivalDelay?: number; + prognosedArrival?: string; + plannedArrival?: string; + arrivalPlatform?: string; + prognosedArrivalPlatform?: string; + plannedArrivalPlatform?: string; + remarks?: ReadonlyArray; + passBy?: boolean; + cancelled?: boolean; + departurePrognosisType?: PrognosisType; + arrivalPrognosisType?: PrognosisType; + additional?: boolean; +} +/** + * Trip – a vehicle stopping at a set of stops at specific times + */ +export interface Trip { + id: string; + origin?: Station | Stop | Location; + destination?: Station | Stop | Location; + departure?: string; + plannedDeparture?: string; + prognosedArrival?: string; + departureDelay?: number; + departurePlatform?: string; + prognosedDeparturePlatform?: string; + plannedDeparturePlatform?: string; + arrival?: string; + plannedArrival?: string; + prognosedDeparture?: string; + arrivalDelay?: number; + arrivalPlatform?: string; + prognosedArrivalPlatform?: string; + plannedArrivalPlatform?: string; + stopovers?: ReadonlyArray; + schedule?: number; + price?: Price; + operator?: number; + direction?: string; + line?: Line; + cancelled?: boolean; + walking?: boolean; + loadFactor?: string; + distance?: number; + public?: boolean; + transfer?: boolean; + cycle?: Cycle; + alternatives?: ReadonlyArray; + polyline?: FeatureCollection; + remarks?: ReadonlyArray; + currentLocation?: Location; + departurePrognosisType?: PrognosisType; + arrivalPrognosisType?: PrognosisType; + checkin?: boolean; + scheduledDays?: ScheduledDays; +} +export interface TripWithRealtimeData extends RealtimeDataUpdatedAt { + trip: Trip; +} +export interface TripsWithRealtimeData extends RealtimeDataUpdatedAt { + trips: ReadonlyArray; +} +export interface WarningsWithRealtimeData extends RealtimeDataUpdatedAt { + remarks: ReadonlyArray; +} +export interface LinesWithRealtimeData extends RealtimeDataUpdatedAt { + lines?: ReadonlyArray; +} +export interface Price { + amount: number; + currency: string; + hint?: string; +} +export interface Alternative { + tripId: string; + direction?: string; + location?: Location; + line?: Line; + stop?: Station | Stop; + when?: string; + plannedWhen?: string; + prognosedWhen?: string; + delay?: number; + platform?: string; + plannedPlatform?: string; + prognosedPlatform?: string; + remarks?: ReadonlyArray; + cancelled?: boolean; + loadFactor?: string; + provenance?: string; + previousStopovers?: ReadonlyArray; + nextStopovers?: ReadonlyArray; + frames?: Frame[]; + polyline?: FeatureCollection; + currentTripPosition?: Location; + origin?: Station | Stop | Location; + destination?: Station | Stop | Location; + prognosisType?: PrognosisType; +} +export interface Departures extends RealtimeDataUpdatedAt { + departures: ReadonlyArray; +} +export interface Arrivals extends RealtimeDataUpdatedAt { + arrivals: ReadonlyArray; +} +/** + * Leg of journey + */ +export interface Leg { + tripId?: string; + origin?: Station | Stop | Location; + destination?: Station | Stop | Location; + departure?: string; + plannedDeparture?: string; + prognosedArrival?: string; + departureDelay?: number; + departurePlatform?: string; + prognosedDeparturePlatform?: string; + plannedDeparturePlatform?: string; + arrival?: string; + plannedArrival?: string; + prognosedDeparture?: string; + arrivalDelay?: number; + arrivalPlatform?: string; + prognosedArrivalPlatform?: string; + plannedArrivalPlatform?: string; + stopovers?: ReadonlyArray; + schedule?: number; + price?: Price; + operator?: number; + direction?: string; + line?: Line; + reachable?: boolean; + cancelled?: boolean; + walking?: boolean; + loadFactor?: string; + distance?: number; + public?: boolean; + transfer?: boolean; + cycle?: Cycle; + alternatives?: ReadonlyArray; + polyline?: FeatureCollection; + remarks?: ReadonlyArray; + currentLocation?: Location; + departurePrognosisType?: PrognosisType; + arrivalPrognosisType?: PrognosisType; + checkin?: boolean; +} +export interface ScheduledDays { + [day: string]: boolean; +} +/** + * A journey is a computed set of directions to get from A to B at a specific time. + * It would typically be the result of a route planning algorithm. + */ +export interface Journey { + type: 'journey'; + legs: ReadonlyArray; + refreshToken?: string; + remarks?: ReadonlyArray; + price?: Price; + cycle?: Cycle; + scheduledDays?: ScheduledDays; +} +export interface Journeys extends RealtimeDataUpdatedAt { + earlierRef?: string; + laterRef?: string; + journeys?: ReadonlyArray; +} +export interface JourneyWithRealtimeData extends RealtimeDataUpdatedAt { + journey: Journey; +} +export interface Duration { + duration: number; + stations: ReadonlyArray; +} +export interface DurationsWithRealtimeData extends RealtimeDataUpdatedAt { + reachable: ReadonlyArray; +} +export interface Frame { + origin: Stop | Location; + destination: Stop | Location; + t?: number; +} +export interface Movement { + direction?: string; + tripId?: string; + line?: Line; + location?: Location; + nextStopovers?: ReadonlyArray; + frames?: Frame[]; + polyline?: FeatureCollection; +} +export interface Radar extends RealtimeDataUpdatedAt { + movements?: ReadonlyArray; +} +export interface ServerInfo extends RealtimeDataUpdatedAt { + hciVersion?: string; + timetableStart?: string; + timetableEnd?: string; + serverTime?: string | number; +} +export interface JourneysOptionsCommon { + /** + * departure date, undefined corresponds to Date.Now + * @default undefined + */ + departure?: Date; + /** + * arrival date, departure and arrival are mutually exclusive. + * @default undefined + */ + arrival?: Date; + /** + * earlierThan, use {@link Journeys#earlierRef}, earlierThan and departure/arrival are mutually exclusive. + * @default undefined + */ + earlierThan?: string; + /** + * laterThan, use {@link Journeys#laterRef}, laterThan and departure/arrival are mutually exclusive. + * @default undefined + */ + laterThan?: string; + /** + * how many search results? + * @default 3 + */ + results?: number; + /** + * let journeys pass this station + * @default undefined + */ + via?: string; + /** + * return stations on the way? + * @default false + */ + stopovers?: boolean; + /** + * Maximum nr of transfers. Default: Let HAFAS decide. + * @default 10 + */ + transfers?: number; + /** + * minimum time for a single transfer in minutes + * @default 10 + */ + transferTime?: number; + /** + * 'none', 'partial' or 'complete' + * @default none + */ + accessibility?: string; + /** + * only bike-friendly journeys + * @default false + */ + bike?: boolean; + products?: Products; + /** + * return tickets? only available with some profiles + * @default false + */ + tickets?: boolean; + /** + * return a shape for each leg? + * @default false + */ + polylines?: boolean; + /** + * parse & expose sub-stops of stations? + * @default false + */ + subStops?: boolean; + /** + * parse & expose entrances of stops/stations? + * @default true + */ + entrances?: boolean; + /** + * parse & expose hints & warnings? + * @default true + */ + remarks?: boolean; + /** + * 'slow', 'normal', 'fast' + * @default slow + */ + walkingSpeed?: string; + /** + * start with walking + * @default false + */ + startWithWalking?: boolean; + /** + * language to get results in + * @default en + */ + language?: string; + /** + * parse which days each journey is valid on + * @default false + */ + scheduledDays?: boolean; + /** + * @deprecated + */ + when?: Date; +} +export interface LoyaltyCard { + type: string; + discount?: number; + class?: number; +} +export type AgeGroup = 'B' | 'K' | 'Y' | 'E' | 'S'; +export type RoutingMode = 'OFF' | 'INFOS' | 'FULL' | 'REALTIME' | 'SERVER_DEFAULT' | 'HYBRID'; +/** + * JourneysOptions specific to Db Profile + */ +export interface JourneysOptionsDbProfile { + /** + * firstClass + * @default false + */ + firstClass?: boolean; + /** + * ageGroup + * @default none + */ + ageGroup?: AgeGroup; + /** + * age + * @default none + */ + age?: number; + /** + * LoyaltyCard + * @default none + */ + loyaltyCard?: LoyaltyCard; + /** + * RoutingMode + * @default none + */ + routingMode?: RoutingMode; +} +export type JourneysOptions = JourneysOptionsCommon & JourneysOptionsDbProfile; +export interface JourneysFromTripOptions { + /** + * return stations on the way? + * @default false + */ + stopovers?: boolean; + /** + * minimum time for a single transfer in minutes + * @default 0 + */ + transferTime?: number; + /** + * 'none', 'partial' or 'complete' + * @default 'none' + */ + accessibility?: string; + /** + * return stations on the way? + * @default false + */ + /** + * return tickets? + * @default false + */ + tickets?: boolean; + /** + * return leg shapes? + * @default false + */ + polylines?: boolean; + /** + * parse & expose sub-stops of stations? + * @default true + */ + subStops?: boolean; + /** + * parse & expose entrances of stops/stations? + * @default true + */ + entrances?: boolean; + /** + * parse & expose hints & warnings? + * @default true + */ + remarks?: boolean; + /** + * products + * @default undefined + */ + products?: Products; +} +export interface LocationsOptions { + /** + * find only exact matches? + * @default true + */ + fuzzy?: boolean; + /** + * how many search results? + * @default 10 + */ + results?: number; + /** + * return stops/stations? + * @default true + */ + stops?: boolean; + /** + * return addresses + * @default false + */ + addresses?: boolean; + /** + * points of interest + * @default true + */ + poi?: boolean; + /** + * parse & expose sub-stops of stations? + * @default false + */ + subStops?: boolean; + /** + * parse & expose entrances of stops/stations? + * @default true + */ + entrances?: boolean; + /** + * parse & expose lines at each stop/station? + * @default false + */ + linesOfStops?: boolean; + /** + * Language of the results + * @default en + */ + language?: string; +} +export interface TripOptions { + /** + * return stations on the way? + * @default true + */ + stopovers?: boolean; + /** + * return a shape for the trip? + * @default false + */ + polyline?: boolean; + /** + * parse & expose sub-stops of stations? + * @default true + */ + subStops?: boolean; + /** + * parse & expose entrances of stops/stations? + * @default true + */ + entrances?: boolean; + /** + * parse & expose hints & warnings? + * @default true + */ + remarks?: boolean; + /** + * parse which days each journey is valid on + * @default false + */ + scheduledDays?: boolean; + /** + * Language of the results + * @default en + */ + language?: string; +} +export interface StopOptions { + /** + * parse & expose lines at the stop/station? + * @default false + */ + linesOfStops?: boolean; + /** + * parse & expose sub-stops of stations? + * @default true + */ + subStops?: boolean; + /** + * parse & expose entrances of stops/stations? + * @default true + */ + entrances?: boolean; + /** + * parse & expose hints & warnings? + * @default true + */ + remarks?: boolean; + /** + * Language of the results + * @default en + */ + language?: string; +} +export interface DeparturesArrivalsOptions { + /** + * departure date, undefined corresponds to Date.Now + * @default undefined + */ + when?: Date; + /** + * only show departures heading to this station + * @default undefined + */ + direction?: string; + /** + * filter by line ID + * @default undefined + */ + line?: string; + /** + * show departures for the next n minutes + * @default 120 + */ + duration?: number; + /** + * max. number of results; `null` means "whatever HAFAS wants" + * @default 10 + */ + results?: number; + /** + * parse & expose sub-stops of stations? + * @default true + */ + subStops?: boolean; + /** + * parse & expose entrances of stops/stations? + * @default true + */ + entrances?: boolean; + /** + * parse & expose lines at the stop/station? + * @default false + */ + linesOfStops?: boolean; + /** + * parse & expose hints & warnings? + * @default false + */ + remarks?: boolean; + /** + * fetch & parse previous/next stopovers? + * @default false + */ + stopovers?: boolean; + /** + * departures at related stations + * @default false + */ + includeRelatedStations?: boolean; + /** + * products + * @default undefined + */ + products?: Products; + /** + * language + * @default en + */ + language?: string; +} +export interface RefreshJourneyOptions { + /** + * return stations on the way? + * @default false + */ + stopovers?: boolean; + /** + * return a shape for each leg? + * @default false + */ + polylines?: boolean; + /** + * return tickets? only available with some profiles + * @default false + */ + tickets?: boolean; + /** + * parse & expose sub-stops of stations? + * @default true + */ + subStops?: boolean; + /** + * parse & expose entrances of stops/stations? + * @default true + */ + entrances?: boolean; + /** + * parse & expose hints & warnings? + * @default true + */ + remarks?: boolean; + /** + * parse & expose dates the journey is valid on? + * @default false + */ + scheduledDays?: boolean; + /** + * language + * @default en + */ + language?: string; +} +export interface NearByOptions { + /** + * maximum number of results + * @default 8 + */ + results?: number; + /** + * maximum walking distance in meters + * @default undefined + */ + distance?: number; + /** + * return points of interest? + * @default false + */ + poi?: boolean; + /** + * return stops/stations? + * @default true + */ + stops?: boolean; + /** + * products + * @default undefined + */ + products?: Products; + /** + * parse & expose sub-stops of stations? + * @default true + */ + subStops?: boolean; + /** + * parse & expose entrances of stops/stations? + * @default true + */ + entrances?: boolean; + /** + * parse & expose lines at each stop/station? + * @default false + */ + linesOfStops?: boolean; + /** + * language + * @default en + */ + language?: string; +} +export interface ReachableFromOptions { + /** + * when + * @default undefined + */ + when?: Date; + /** + * maximum of transfers + * @default 5 + */ + maxTransfers?: number; + /** + * maximum travel duration in minutes, pass `null` for infinite + * @default 20 + */ + maxDuration?: number; + /** + * products + * @default undefined + */ + products?: Products; + /** + * parse & expose sub-stops of stations? + * @default true + */ + subStops?: boolean; + /** + * parse & expose entrances of stops/stations? + * @default true + */ + entrances?: boolean; + /** + * return leg shapes? + * @default false + */ + polylines?: boolean; +} +export interface BoundingBox { + north: number; + west: number; + south: number; + east: number; +} +export interface RadarOptions { + /** + * maximum number of vehicles + * @default 256 + */ + results?: number; + /** + * nr of frames to compute + * @default 3 + */ + frames?: number; + /** + * optionally an object of booleans + * @default null + */ + products?: Products; + /** + * compute frames for the next n seconds + * @default 20 + */ + duration?: number; + /** + * parse & expose sub-stops of stations? + * @default true + */ + subStops?: boolean; + /** + * parse & expose entrances of stops/stations? + * @default true + */ + entrances?: boolean; + /** + * return a shape for the trip? + * @default false + */ + polylines?: boolean; + /** + * when + * @default undefined + */ + when?: Date; +} +export interface Filter { + type: string; + mode: string; + value: string; +} +export interface TripsByNameOptions { + /** + * departure date, undefined corresponds to Date.Now + * @default undefined + */ + when?: Date; + fromWhen?: Date; + untilWhen?: Date; + onlyCurrentlyRunning?: boolean; + products?: Products; + currentlyStoppingAt?: string; + lineName?: string; + operatorNames?: string[]; + additionalFilters?: Filter[]; +} +export interface RemarksOptions { + from?: Date | number; + to?: Date | number; + /** + * maximum number of remarks + * @default 100 + */ + results?: number; + products?: Products; + /** + * return leg shapes? (not supported by all endpoints) + * @default false + */ + polylines?: boolean; + /** + * Language of the results + * @default en + */ + language?: string; +} +export interface LinesOptions { + /** + * Language of the results + * @default en + */ + language?: string; +} +export interface ServerOptions { + /** + * versionInfo + * @default true + */ + versionInfo?: boolean; + /** + * Language of the results + * @default en + */ + language?: string; +} +export interface HafasClient { + /** + * Retrieves journeys + * @param from uid of station + * @param to uid of station + * @param options options + */ + journeys: (from: string | Station | Stop | Location, to: string | Station | Stop | Location, options: JourneysOptions | undefined) => Promise; + /** + * refreshes a Journey + * @param refreshToken refreshToken must be a string, taken from {@link journey#refreshToken} + * @param options options + */ + refreshJourney?: (refreshToken: string, options: RefreshJourneyOptions | undefined) => Promise; + /** + * Refetch information about a trip + * @param id trip id, see {@link Leg#tripId} + * @param name name + * @param options options + */ + trip?: (id: string, options: TripOptions | undefined) => Promise; + /** + * Retrieves departures + * @param station uid of station + * @param options options + */ + departures: (station: string | Station | Stop | Location, options: DeparturesArrivalsOptions | undefined) => Promise; + /** + * Retrieves arrivals + * @param station uid of station + * @param options options + */ + arrivals: (station: string | Station | Stop | Location, options: DeparturesArrivalsOptions | undefined) => Promise; + /** + * Retrieves journeys from trip id to station + * @param fromTripId id of trip + * @param previousStopover previous stopover + * @param to uid of station or Station or Stop + * @param options options + */ + journeysFromTrip?: (fromTripId: string, previousStopover: StopOver, to: string | Station | Stop | Location, opt: JourneysFromTripOptions | undefined) => Promise; + /** + * Retrieves locations or stops + * @param name name of station + * @param options options for search + */ + locations: (name: string, options: LocationsOptions | undefined) => Promise>; + /** + * Retrieves information about a stop + * @param id uid of station + * @param options options for search + */ + stop: (id: string | Stop, options: StopOptions | undefined) => Promise; + /** + * Retrieves nearby stops from location + * @param location location + * @param options options for search + */ + nearby: (location: Location, options: NearByOptions | undefined) => Promise>; + /** + * Retrieves stations reachable within a certain time from a location + * @param address location + * @param options options for search + */ + reachableFrom?: (address: Location, options: ReachableFromOptions | undefined) => Promise; + /** + * Retrieves all vehicles currently in an area. + * @param box area + * @param options options for search + */ + radar?: (box: BoundingBox, options: RadarOptions | undefined) => Promise; + /** + * Retrieves trips by name. + * @param lineNameOrFahrtNr string + * @param options options for search + */ + tripsByName?: (lineNameOrFahrtNr: string, options: TripsByNameOptions | undefined) => Promise; + /** + * Fetches all remarks known to the HAFAS endpoint + * @param opt RemarksOptions + */ + remarks?: (opt: RemarksOptions | undefined) => Promise; + /** + * Fetches all lines known to the HAFAS endpoint + * @param query string + * @param opt LinesOptions + */ + lines?: (query: string, opt: LinesOptions | undefined) => Promise; + /** + * Fetches meta information from the HAFAS endpoint + * @param opt ServerOptions + */ + serverInfo: (opt: ServerOptions | undefined) => Promise; +} + +export function createClient(commonProfile: Profile, userAgent: string, opt?: any): HafasClient; diff --git a/index.js b/index.js index d665b9cf0..e38bddf9b 100644 --- a/index.js +++ b/index.js @@ -8,6 +8,39 @@ import {INVALID_REQUEST} from './lib/errors.js'; import {sliceLeg} from './lib/slice-leg.js'; import {HafasError} from './lib/errors.js'; +/** + * @typedef {import("./types").HafasClient} HafasClient + * @typedef {import("./types").Profile} Profile + * @typedef {import("./types").Location} Location + * @typedef {import("./types").Station} Station + * @typedef {import("./types").Stop} Stop + * @typedef {import("./types").Line} Line + * @typedef {import("./types").Alternative} Alternative + * @typedef {import("./types").Departures} Departures + * @typedef {import("./types").Arrivals} Arrivals + * @typedef {import("./types").DeparturesArrivalsOptions} DeparturesArrivalsOptions + * @typedef {import("./types").JourneysOptions} JourneysOptions + * @typedef {import("./types").Journey} Journey + * @typedef {import("./types").Journeys} Journeys + * @typedef {import("./types").BoundingBox} BoundingBox + * @typedef {import("./types").StopOver} StopOver + * @typedef {import("./types").RefreshJourneyOptions} RefreshJourneyOptions + * @typedef {import("./types").JourneysFromTripOptions} JourneysFromTripOptions + * @typedef {import("./types").LocationsOptions} LocationsOptions + * @typedef {import("./types").StopOptions} StopOptions + * @typedef {import("./types").NearByOptions} NearByOptions + * @typedef {import("./types").TripOptions} TripOptions + * @typedef {import("./types").RadarOptions} RadarOptions + * @typedef {import("./types").ReachableFromOptions} ReachableFromOptions + * @typedef {import("./types").TripsByNameOptions} TripsByNameOptions + * @typedef {import("./types").RemarksOptions} RemarksOptions + * @typedef {import("./types").LinesOptions} LinesOptions + * @typedef {import("./types").ServerOptions} ServerOptions + * @typedef {import("./types-private").ProfileEx} ProfileEx + * @typedef {import("./types-raw-api").Loc} Loc + * @typedef {import("./types-raw-api").JourneyMatchRequest} JourneyMatchRequest + */ + // background info: https://github.com/public-transport/hafas-client/issues/286 const FORBIDDEN_USER_AGENTS = [ 'my-awesome-program', // previously used in readme.md, p/*/readme.md & docs/*.md @@ -17,6 +50,9 @@ const FORBIDDEN_USER_AGENTS = [ const isNonEmptyString = str => 'string' === typeof str && str.length > 0; +/** + * @param {Location} loc + */ const validateLocation = (loc, name = 'location') => { if (!isObj(loc)) { throw new TypeError(name + ' must be an object.'); @@ -35,8 +71,17 @@ const validateWhen = (when, name = 'when') => { } }; -const createClient = (profile, userAgent, opt = {}) => { - profile = Object.assign({}, defaultProfile, profile); +/** + * + * @param {Profile} commonProfile + * @param {string} userAgent + * @param {any} opt + */ +const createClient = (commonProfile, userAgent, opt = {}) => { + + /** @author Jürgen Bergmann + * commonProfile and profile have differnt types */ + const profile = /** @type {ProfileEx} */(/** @type {unknown} */(Object.assign({}, defaultProfile, commonProfile))); validateProfile(profile); if ('string' !== typeof userAgent) { @@ -46,11 +91,19 @@ const createClient = (profile, userAgent, opt = {}) => { throw new TypeError(`userAgent should tell the HAFAS API operators how to contact you. If you have copied "${userAgent}" value from the documentation, please adapt it.`); } - const _stationBoard = async (station, type, resultsField, parse, opt = {}) => { - if (isObj(station)) { - station = profile.formatStation(station.id); - } else if ('string' === typeof station) { - station = profile.formatStation(station); + /** + * @param {string | Station | Stop | Location} _station + * @param {(cty: any, s: any) => Alternative} parse + * @param {DeparturesArrivalsOptions} opt + */ + const _stationBoard = async (_station, type, resultsField, parse, opt = {}) => { + /** @author Jürgen Bergmann, cast to other type of station */ + /** @type {Loc} */ + let station; + if (isObj(_station)) { + station = profile.formatStation(/** @type {Station | Stop | Location} */(_station).id); + } else if ('string' === typeof _station) { + station = profile.formatStation(_station); } else { throw new TypeError('station must be an object or a string.'); } @@ -66,7 +119,10 @@ const createClient = (profile, userAgent, opt = {}) => { throw new Error('opt.includeRelatedStations is not supported by this endpoint'); } - opt = Object.assign({ + /** @type {DeparturesArrivalsOptions} */ + let target; + // eslint-disable-next-line no-unused-vars + opt = Object.assign(target = { // todo: for arrivals(), this is actually a station it *has already* stopped by direction: null, // only show departures stopping by this station line: null, // filter by line ID @@ -95,7 +151,11 @@ const createClient = (profile, userAgent, opt = {}) => { ? res.jnyL : []; const results = jnyL.map(res => parse(ctx, res)) - .sort((a, b) => new Date(a.when) - new Date(b.when)); // todo + /** @author Jürgen Bergmann, add getDate() */ + .sort((a, b) => new Date(a.when) + .getDate() + - new Date(b.when) + .getDate()); // todo return { [resultsField]: results, @@ -105,16 +165,37 @@ const createClient = (profile, userAgent, opt = {}) => { }; }; + /** + * @param {string | Station | Stop | Location} station + * @param {DeparturesArrivalsOptions} opt + * @returns {Promise} + */ const departures = async (station, opt = {}) => { - return await _stationBoard(station, 'DEP', 'departures', profile.parseDeparture, opt); + return /** @type {any} */(await _stationBoard(station, 'DEP', 'departures', profile.parseDeparture, opt)); }; + + /** + * @param {string | Station | Stop | Location} station + * @param {DeparturesArrivalsOptions} opt + * @returns {Promise} + */ const arrivals = async (station, opt = {}) => { - return await _stationBoard(station, 'ARR', 'arrivals', profile.parseArrival, opt); + return /** @type {any} */(await _stationBoard(station, 'ARR', 'arrivals', profile.parseArrival, opt)); }; - const journeys = async (from, to, opt = {}) => { - from = profile.formatLocation(profile, from, 'from'); - to = profile.formatLocation(profile, to, 'to'); + /** + * @param {string | Station | Stop | Location} _from + * @param {string | Station | Stop | Location} _to + * @param {JourneysOptions | undefined} opt + */ + const journeys = async (_from, _to, opt = {}) => { + /** @author Jürgen Bergmann, cast to other type of from and to */ + + /** @type {Loc} */ + let from = profile.formatLocation(profile, _from, 'from'); + + /** @type {Loc} */ + let to = profile.formatLocation(profile, _to, 'to'); if ('earlierThan' in opt && 'laterThan' in opt) { throw new TypeError('opt.earlierThan and opt.laterThan are mutually exclusive.'); @@ -142,7 +223,10 @@ const createClient = (profile, userAgent, opt = {}) => { journeysRef = opt.laterThan; } - opt = Object.assign({ + /** @type {JourneysOptions} */ + let target; + // eslint-disable-next-line no-unused-vars + opt = Object.assign(target = { results: null, // number of journeys – `null` means "whatever HAFAS returns" via: null, // let journeys pass this station? stopovers: false, // return stations on the way? @@ -162,7 +246,7 @@ const createClient = (profile, userAgent, opt = {}) => { scheduledDays: false, // parse & expose dates each journey is valid on? }, opt); if (opt.via) { - opt.via = profile.formatLocation(profile, opt.via, 'opt.via'); + opt.via = /** @type {any} */(profile.formatLocation(profile, opt.via, 'opt.via')); } if (opt.when !== undefined) { @@ -268,12 +352,20 @@ const createClient = (profile, userAgent, opt = {}) => { }; }; + /** + * + * @param {string} refreshToken + * @param {RefreshJourneyOptions} opt + */ const refreshJourney = async (refreshToken, opt = {}) => { if ('string' !== typeof refreshToken || !refreshToken) { throw new TypeError('refreshToken must be a non-empty string.'); } - opt = Object.assign({ + /** @type {RefreshJourneyOptions} */ + let target; + // eslint-disable-next-line no-unused-vars + opt = Object.assign(target = { stopovers: false, // return stations on the way? tickets: false, // return tickets? polylines: false, // return leg shapes? (not supported by all endpoints) @@ -302,15 +394,24 @@ const createClient = (profile, userAgent, opt = {}) => { // Although the DB Navigator app passes the *first* stopover of the trip // (instead of the previous one), it seems to work with the previous one as well. - const journeysFromTrip = async (fromTripId, previousStopover, to, opt = {}) => { + /** + * @param {string} fromTripId + * @param {StopOver} previousStopover + * @param {string | Station | Stop} _to + * @param {JourneysFromTripOptions | undefined} opt + */ + const journeysFromTrip = async (fromTripId, previousStopover, _to, opt = {}) => { if (!isNonEmptyString(fromTripId)) { throw new Error('fromTripId must be a non-empty string.'); } - if ('string' === typeof to) { - to = profile.formatStation(to); + /** @author Jürgen Bergmann, cast to other type of station */ + /** @type {Loc}*/ + let to; + if ('string' === typeof _to) { + to = profile.formatStation(_to); } else if (isObj(to) && (to.type === 'station' || to.type === 'stop')) { - to = profile.formatStation(to.id); + to = profile.formatStation(_to.id); } else { throw new Error('to must be a valid stop or station.'); } @@ -319,15 +420,18 @@ const createClient = (profile, userAgent, opt = {}) => { throw new Error('previousStopover must be an object.'); } - let prevStop = previousStopover.stop; - if (isObj(prevStop)) { - prevStop = profile.formatStation(prevStop.id); - } else if ('string' === typeof prevStop) { - prevStop = profile.formatStation(prevStop); + /** @author Jürgen Bergmann, cast to other type of station */ + /** @type {Loc}*/ + let prevStop; + if (isObj(previousStopover.stop)) { + prevStop = profile.formatStation(previousStopover.stop.id); + } else if ('string' === typeof previousStopover.stop) { + prevStop = profile.formatStation(previousStopover.stop); } else { throw new Error('previousStopover.stop must be a valid stop or station.'); } + /** @type {string|number}*/ let depAtPrevStop = previousStopover.departure || previousStopover.plannedDeparture; if (!isNonEmptyString(depAtPrevStop)) { throw new Error('previousStopover.(planned)departure must be a string'); @@ -352,13 +456,13 @@ const createClient = (profile, userAgent, opt = {}) => { }, opt); // make clear that `departure`/`arrival`/`when` are not supported - if (opt.departure) { + if (/** @type {any} */(opt).departure) { throw new Error('journeysFromTrip + opt.departure is not supported by HAFAS.'); } - if (opt.arrival) { + if (/** @type {any} */(opt).arrival) { throw new Error('journeysFromTrip + opt.arrival is not supported by HAFAS.'); } - if (opt.when) { + if (/** @type {any} */(opt).when) { throw new Error('journeysFromTrip + opt.when is not supported by HAFAS.'); } @@ -445,11 +549,19 @@ const createClient = (profile, userAgent, opt = {}) => { }; }; + /** + * @param {string} query + * @param {LocationsOptions | undefined} opt + */ const locations = async (query, opt = {}) => { if (!isNonEmptyString(query)) { throw new TypeError('query must be a non-empty string.'); } - opt = Object.assign({ + + /** @type {LocationsOptions} */ + let target; + // eslint-disable-next-line no-unused-vars + opt = Object.assign(target = { fuzzy: true, // find only exact matches? results: 5, // how many search results? stops: true, // return stops/stations? @@ -471,16 +583,27 @@ const createClient = (profile, userAgent, opt = {}) => { return res.match.locL.map(loc => profile.parseLocation(ctx, loc)); }; - const stop = async (stop, opt = {}) => { - if ('object' === typeof stop) { - stop = profile.formatStation(stop.id); - } else if ('string' === typeof stop) { - stop = profile.formatStation(stop); + /** + * + * @param {string | Stop} _stop + * @param {StopOptions} opt + */ + const stop = async (_stop, opt = {}) => { + /** @author Jürgen Bergmann, cast to other type of stop */ + /** @type {Loc} */ + let stop; + if ('object' === typeof _stop) { + stop = profile.formatStation(_stop.id); + } else if ('string' === typeof _stop) { + stop = profile.formatStation(_stop); } else { throw new TypeError('stop must be an object or a string.'); } - opt = Object.assign({ + /** @type {StopOptions} */ + let target; + // eslint-disable-next-line no-unused-vars + opt = Object.assign(target = { linesOfStops: false, // parse & expose lines at the stop/station? subStops: true, // parse & expose sub-stops of stations? entrances: true, // parse & expose entrances of stops/stations? @@ -501,10 +624,18 @@ const createClient = (profile, userAgent, opt = {}) => { return profile.parseLocation(ctx, res.locL[0]); }; + /** + * + * @param {Location} location + * @param {NearByOptions} opt + */ const nearby = async (location, opt = {}) => { validateLocation(location, 'location'); - opt = Object.assign({ + /** @type {NearByOptions} */ + let target; + // eslint-disable-next-line no-unused-vars + opt = Object.assign(target = { results: 8, // maximum number of results distance: null, // maximum walking distance in meters poi: false, // return points of interest? @@ -529,6 +660,11 @@ const createClient = (profile, userAgent, opt = {}) => { : results; }; + /** + * + * @param {string} id + * @param {TripOptions} opt + */ const trip = async (id, opt = {}) => { if (!isNonEmptyString(id)) { throw new TypeError('id must be a non-empty string.'); @@ -557,6 +693,11 @@ const createClient = (profile, userAgent, opt = {}) => { }; }; + /** + * + * @param {string} lineNameOrFahrtNr + * @param {TripsByNameOptions} opt + */ // todo [breaking]: rename to trips()? const tripsByName = async (lineNameOrFahrtNr = '*', opt = {}) => { if (!isNonEmptyString(lineNameOrFahrtNr)) { @@ -573,6 +714,7 @@ const createClient = (profile, userAgent, opt = {}) => { additionalFilters: [], // undocumented }, opt); + /** @type {JourneyMatchRequest} */ const req = { // fields: https://github.com/marudor/BahnhofsAbfahrten/blob/f619e754f212980261eb7e2b151cd73ba0213da8/packages/types/HAFAS/JourneyMatch.ts#L4-L23 input: lineNameOrFahrtNr, @@ -644,6 +786,11 @@ const createClient = (profile, userAgent, opt = {}) => { }; }; + /** + * + * @param {BoundingBox} param + * @param {RadarOptions} opt + */ const radar = async ({north, west, south, east}, opt) => { if ('number' !== typeof north) { throw new TypeError('north must be a number.'); @@ -664,7 +811,10 @@ const createClient = (profile, userAgent, opt = {}) => { throw new Error('east must be larger than west.'); } - opt = Object.assign({ + /** @type {RadarOptions} */ + let target; + // eslint-disable-next-line no-unused-vars + opt = Object.assign(target = { results: 256, // maximum number of vehicles duration: 30, // compute frames for the next n seconds // todo: what happens with `frames: 0`? @@ -697,11 +847,21 @@ const createClient = (profile, userAgent, opt = {}) => { }; }; + /** + * + * @param {Location} address + * @param {ReachableFromOptions} opt + */ const reachableFrom = async (address, opt = {}) => { validateLocation(address, 'address'); - opt = Object.assign({ - when: Date.now(), + /** @type {ReachableFromOptions} */ + let target; + // eslint-disable-next-line no-unused-vars + opt = Object.assign(target = { + /** @author Jürgen Bergmann + * Date.now() is no date */ + when: new Date(Date.now()), maxTransfers: 5, // maximum of 5 transfers maxDuration: 20, // maximum travel duration in minutes, pass `null` for infinite products: {}, @@ -749,6 +909,10 @@ const createClient = (profile, userAgent, opt = {}) => { }; }; + /** + * + * @param {RemarksOptions} opt + */ const remarks = async (opt = {}) => { opt = { results: 100, // maximum number of remarks @@ -786,6 +950,11 @@ const createClient = (profile, userAgent, opt = {}) => { }; }; + /** + * + * @param {string} query + * @param {LinesOptions} opt + */ const lines = async (query, opt = {}) => { if (!isNonEmptyString(query)) { throw new TypeError('query must be a non-empty string.'); @@ -803,7 +972,7 @@ const createClient = (profile, userAgent, opt = {}) => { const lines = res.lineL.map(l => { const parseDirRef = i => (res.common.dirL[i] || {}).txt || null; return { - ...omit(l.line, ['id', 'fahrtNr']), + ...omit(/** @type {Line} */(l.line), ['id', 'fahrtNr']), id: l.lineId, // todo: what is locX? directions: Array.isArray(l.dirRefL) @@ -823,6 +992,10 @@ const createClient = (profile, userAgent, opt = {}) => { }; }; + /** + * + * @param {ServerOptions} opt + */ const serverInfo = async (opt = {}) => { opt = { versionInfo: true, // query HAFAS versions? diff --git a/lib/request.js b/lib/request.js index ff65e91e3..a9fb0135b 100644 --- a/lib/request.js +++ b/lib/request.js @@ -10,6 +10,12 @@ import {Request, fetch} from 'cross-fetch'; import {parse as parseContentType} from 'content-type'; import {HafasError, byErrorCode} from './errors.js'; +/** + * @typedef {import("../types-private").ProfileEx} ProfileEx + * @typedef {import("../types-raw-api").RawResponse} RawResponse + * @typedef {import("../types-private").DefaultProfile} DefaultProfile + */ + const proxyAddress = process.env.HTTPS_PROXY || process.env.HTTP_PROXY || null; const localAddresses = process.env.LOCAL_ADDRESS || null; @@ -24,6 +30,7 @@ const plainAgent = new HttpsAgent({ let getAgent = () => plainAgent; if (proxyAddress) { + // @ts-ignore const agent = new ProxyAgent(proxyAddress, { keepAlive: true, keepAliveMsecs: 10 * 1000, // 10s @@ -149,7 +156,7 @@ const request = async (ctx, userAgent, reqData) => { throw new TypeError('profile.salt must be a Buffer or a string.'); } // Buffer.from(buf, 'hex') just returns buf - const salt = Buffer.from(profile.salt, 'hex'); + const salt = Buffer.from(/** @type {any} */(profile.salt), 'hex'); if (profile.addChecksum) { const checksum = md5(Buffer.concat([ diff --git a/lib/slice-leg.js b/lib/slice-leg.js index 94e3f4f51..9a51446d4 100644 --- a/lib/slice-leg.js +++ b/lib/slice-leg.js @@ -1,3 +1,11 @@ +/** + * @typedef {import("../types").Leg} Leg + * @typedef {import("../types").Station} Station + * @typedef {import("../types").Stop} Stop + * @typedef {import("../types").Location} Location + * @typedef {import("../types").StopOver} StopOver + */ + const findById = (needle) => { const needleStopId = needle.id; const needleStationId = needle.station @@ -19,6 +27,11 @@ const findById = (needle) => { }; }; +/** + * @param {Leg} leg + * @param {Station | Stop} from + * @param {Station | Stop | Location} to + */ const sliceLeg = (leg, from, to) => { if (!Array.isArray(leg.stopovers)) { throw new Error('leg.stopovers must be an array.'); @@ -46,13 +59,17 @@ const sliceLeg = (leg, from, to) => { newLeg.origin = fromStopover.stop; newLeg.departure = fromStopover.departure; newLeg.departureDelay = fromStopover.departureDelay; - newLeg.scheduledDeparture = fromStopover.scheduledDeparture; + /** @author Jürgen Bergmann + * ?? */ + /** @type {any} */(newLeg).scheduledDeparture = /** @type {any} */(fromStopover).scheduledDeparture; newLeg.departurePlatform = fromStopover.departurePlatform; newLeg.destination = toStopover.stop; newLeg.arrival = toStopover.arrival; newLeg.arrivalDelay = toStopover.arrivalDelay; - newLeg.scheduledArrival = toStopover.scheduledArrival; + /** @author Jürgen Bergmann + * ?? */ + /** @type {any} */(newLeg).scheduledArrival = /** @type {any} */(toStopover).scheduledArrival; newLeg.arrivalPlatform = toStopover.arrivalPlatform; return newLeg; diff --git a/p/avv/index.d.ts b/p/avv/index.d.ts new file mode 100644 index 000000000..4e09d025d --- /dev/null +++ b/p/avv/index.d.ts @@ -0,0 +1,3 @@ +import { Profile } from '../../index'; + +export const profile: Profile; diff --git a/p/bart/index.d.ts b/p/bart/index.d.ts new file mode 100644 index 000000000..4e09d025d --- /dev/null +++ b/p/bart/index.d.ts @@ -0,0 +1,3 @@ +import { Profile } from '../../index'; + +export const profile: Profile; diff --git a/p/bls/index.d.ts b/p/bls/index.d.ts new file mode 100644 index 000000000..4e09d025d --- /dev/null +++ b/p/bls/index.d.ts @@ -0,0 +1,3 @@ +import { Profile } from '../../index'; + +export const profile: Profile; diff --git a/p/bvg/index.d.ts b/p/bvg/index.d.ts new file mode 100644 index 000000000..4e09d025d --- /dev/null +++ b/p/bvg/index.d.ts @@ -0,0 +1,3 @@ +import { Profile } from '../../index'; + +export const profile: Profile; diff --git a/p/cfl/index.d.ts b/p/cfl/index.d.ts new file mode 100644 index 000000000..4e09d025d --- /dev/null +++ b/p/cfl/index.d.ts @@ -0,0 +1,3 @@ +import { Profile } from '../../index'; + +export const profile: Profile; diff --git a/p/cmta/index.d.ts b/p/cmta/index.d.ts new file mode 100644 index 000000000..4e09d025d --- /dev/null +++ b/p/cmta/index.d.ts @@ -0,0 +1,3 @@ +import { Profile } from '../../index'; + +export const profile: Profile; diff --git a/p/db-busradar-nrw/index.d.ts b/p/db-busradar-nrw/index.d.ts new file mode 100644 index 000000000..4e09d025d --- /dev/null +++ b/p/db-busradar-nrw/index.d.ts @@ -0,0 +1,3 @@ +import { Profile } from '../../index'; + +export const profile: Profile; diff --git a/p/db/ageGroup.js b/p/db/ageGroup.js index ad79638a3..028142074 100644 --- a/p/db/ageGroup.js +++ b/p/db/ageGroup.js @@ -1,9 +1,13 @@ +/** + * @typedef {import("../../types").AgeGroup} AgeGroup + */ + const ageGroup = { - BABY: 'B', - CHILD: 'K', - YOUNG: 'Y', - ADULT: 'E', - SENIOR: 'S', + BABY: /** @type {AgeGroup} */('B'), + CHILD: /** @type {AgeGroup} */('K'), + YOUNG: /** @type {AgeGroup} */('Y'), + ADULT: /** @type {AgeGroup} */('E'), + SENIOR: /** @type {AgeGroup} */('S'), upperBoundOf: { BABY: 6, CHILD: 15, @@ -13,6 +17,10 @@ const ageGroup = { }, }; +/** + * @param {number} age + * @returns {AgeGroup} + */ const ageGroupFromAge = (age) => { const {upperBoundOf} = ageGroup; if (age < upperBoundOf.BABY) { diff --git a/p/db/index.d.ts b/p/db/index.d.ts new file mode 100644 index 000000000..4e09d025d --- /dev/null +++ b/p/db/index.d.ts @@ -0,0 +1,3 @@ +import { Profile } from '../../index'; + +export const profile: Profile; diff --git a/p/db/index.js b/p/db/index.js index eaba8da55..32ed940ef 100644 --- a/p/db/index.js +++ b/p/db/index.js @@ -3,6 +3,12 @@ import {createRequire} from 'module'; const require = createRequire(import.meta.url); +/** + * @typedef {import("../../types").RoutingMode} RoutingMode + * @typedef {import("../../types-private").ProfileEx} ProfileEx + * @typedef {import("../../types-raw-api").RawGrid} RawGridL + */ + import trim from 'lodash/trim.js'; import uniqBy from 'lodash/uniqBy.js'; import slugg from 'slugg'; @@ -25,10 +31,12 @@ import {formatLoyaltyCard} from './loyalty-cards.js'; import {ageGroup, ageGroupFromAge} from './ageGroup.js'; import {routingModes} from './routing-modes.js'; +/** @type {ProfileEx["transformReqBody"]} */ const transformReqBody = (ctx, body) => { const req = body.svcReqL[0] || {}; // see https://pastebin.com/qZ9WS3Cx + /** @type {RoutingMode} */ const rtMode = 'routingMode' in ctx.opt ? ctx.opt.routingMode : routingModes.REALTIME; @@ -41,6 +49,7 @@ const transformReqBody = (ctx, body) => { return body; }; +/** @type {ProfileEx["transformReq"]} */ const transformReq = (ctx, req) => { const body = JSON.parse(req.body); // stop() a.k.a. LocDetails seems broken with ver >1.16, all other methods work @@ -68,6 +77,7 @@ const slices = (n, arr) => { }, initialState).slices; }; +/** @param {RawGridL} g */ const parseGrid = (g) => { // todo: g.type, e.g. `S` // todo: respect `g.itemL[].(col|row)`? @@ -146,8 +156,11 @@ const parseLocWithDetails = ({parsed, common}, l) => { rows: grid.rows.map(row => row.map(cell => cell && cell.text)), }); + /** @type RawGridL[] */ let grids = l.gridL - .map(grid => parseGrid(grid, common)) + /** @author Jürgen Bergmann + * arg common removed */ + .map(grid => parseGrid(grid)) .map(resolveCells); const ausstattung = grids.find(g => slugg(g.title) === 'ausstattung'); @@ -194,6 +207,7 @@ const parseArrOrDepWithLoadFactor = ({parsed, res, opt}, d) => { return parsed; }; +/** @type {ProfileEx["transformJourneysQuery"]} */ const transformJourneysQuery = ({opt}, query) => { const filters = query.jnyFltrL; if (opt.bike) { diff --git a/p/db/products.js b/p/db/products.js index 4e5f44d14..a57545662 100644 --- a/p/db/products.js +++ b/p/db/products.js @@ -1,8 +1,13 @@ +/** + * @typedef {import("../../types").ProductType} ProductType + */ + // todo: https://gist.github.com/anonymous/d3323a5d2d6e159ed42b12afd0380434#file-haf_products-properties-L1-L95 +/** @type {ProductType []} */ const products = [ { id: 'nationalExpress', - mode: 'train', + mode: /** @type {'train'} */('train'), bitmasks: [1], name: 'InterCityExpress', short: 'ICE', @@ -10,7 +15,7 @@ const products = [ }, { id: 'national', - mode: 'train', + mode: /** @type {'train'} */('train'), bitmasks: [2], name: 'InterCity & EuroCity', short: 'IC/EC', @@ -18,7 +23,7 @@ const products = [ }, { id: 'regionalExpress', - mode: 'train', + mode: /** @type {'train'} */('train'), bitmasks: [4], name: 'RegionalExpress & InterRegio', short: 'RE/IR', @@ -26,7 +31,7 @@ const products = [ }, { id: 'regional', - mode: 'train', + mode: /** @type {'train'} */('train'), bitmasks: [8], name: 'Regio', short: 'RB', @@ -34,7 +39,7 @@ const products = [ }, { id: 'suburban', - mode: 'train', + mode: /** @type {'train'} */('train'), bitmasks: [16], name: 'S-Bahn', short: 'S', @@ -42,7 +47,7 @@ const products = [ }, { id: 'bus', - mode: 'bus', + mode: /** @type {'bus'} */('bus'), bitmasks: [32], name: 'Bus', short: 'B', @@ -50,7 +55,7 @@ const products = [ }, { id: 'ferry', - mode: 'watercraft', + mode: /** @type {'watercraft'} */('watercraft'), bitmasks: [64], name: 'Ferry', short: 'F', @@ -58,7 +63,7 @@ const products = [ }, { id: 'subway', - mode: 'train', + mode: /** @type {'train'} */('train'), bitmasks: [128], name: 'U-Bahn', short: 'U', @@ -66,7 +71,7 @@ const products = [ }, { id: 'tram', - mode: 'train', + mode: /** @type {'train'} */('train'), bitmasks: [256], name: 'Tram', short: 'T', @@ -74,7 +79,7 @@ const products = [ }, { id: 'taxi', - mode: 'taxi', + mode: /** @type {'taxi'} */('taxi'), bitmasks: [512], name: 'Group Taxi', short: 'Taxi', diff --git a/p/db/routing-modes.js b/p/db/routing-modes.js index b356ffeb6..84f950194 100644 --- a/p/db/routing-modes.js +++ b/p/db/routing-modes.js @@ -1,11 +1,15 @@ +/** + * @typedef {import("../../types").RoutingMode} RoutingMode + */ + // see https://pastebin.com/qZ9WS3Cx const routingModes = { - OFF: 'OFF', - INFOS: 'INFOS', - FULL: 'FULL', - REALTIME: 'REALTIME', - SERVER_DEFAULT: 'SERVER_DEFAULT', - HYBRID: 'HYBRID', + OFF: /** @type {RoutingMode} */('OFF'), + INFOS: /** @type {RoutingMode} */('INFOS'), + FULL: /** @type {RoutingMode} */('FULL'), + REALTIME: /** @type {RoutingMode} */('REALTIME'), + SERVER_DEFAULT: /** @type {RoutingMode} */('SERVER_DEFAULT'), + HYBRID: /** @type {RoutingMode} */('HYBRID'), }; export { diff --git a/p/hvv/index.d.ts b/p/hvv/index.d.ts new file mode 100644 index 000000000..4e09d025d --- /dev/null +++ b/p/hvv/index.d.ts @@ -0,0 +1,3 @@ +import { Profile } from '../../index'; + +export const profile: Profile; diff --git a/p/insa/index.d.ts b/p/insa/index.d.ts new file mode 100644 index 000000000..4e09d025d --- /dev/null +++ b/p/insa/index.d.ts @@ -0,0 +1,3 @@ +import { Profile } from '../../index'; + +export const profile: Profile; diff --git a/p/invg/index.d.ts b/p/invg/index.d.ts new file mode 100644 index 000000000..4e09d025d --- /dev/null +++ b/p/invg/index.d.ts @@ -0,0 +1,3 @@ +import { Profile } from '../../index'; + +export const profile: Profile; diff --git a/p/irish-rail/index.d.ts b/p/irish-rail/index.d.ts new file mode 100644 index 000000000..4e09d025d --- /dev/null +++ b/p/irish-rail/index.d.ts @@ -0,0 +1,3 @@ +import { Profile } from '../../index'; + +export const profile: Profile; diff --git a/p/mobil-nrw/index.d.ts b/p/mobil-nrw/index.d.ts new file mode 100644 index 000000000..4e09d025d --- /dev/null +++ b/p/mobil-nrw/index.d.ts @@ -0,0 +1,3 @@ +import { Profile } from '../../index'; + +export const profile: Profile; diff --git a/p/mobiliteit-lu/index.d.ts b/p/mobiliteit-lu/index.d.ts new file mode 100644 index 000000000..4e09d025d --- /dev/null +++ b/p/mobiliteit-lu/index.d.ts @@ -0,0 +1,3 @@ +import { Profile } from '../../index'; + +export const profile: Profile; diff --git a/p/nahsh/index.d.ts b/p/nahsh/index.d.ts new file mode 100644 index 000000000..4e09d025d --- /dev/null +++ b/p/nahsh/index.d.ts @@ -0,0 +1,3 @@ +import { Profile } from '../../index'; + +export const profile: Profile; diff --git a/p/nvv/index.d.ts b/p/nvv/index.d.ts new file mode 100644 index 000000000..4e09d025d --- /dev/null +++ b/p/nvv/index.d.ts @@ -0,0 +1,3 @@ +import { Profile } from '../../index'; + +export const profile: Profile; diff --git a/p/oebb/index.d.ts b/p/oebb/index.d.ts new file mode 100644 index 000000000..4e09d025d --- /dev/null +++ b/p/oebb/index.d.ts @@ -0,0 +1,3 @@ +import { Profile } from '../../index'; + +export const profile: Profile; diff --git a/p/pkp/index.d.ts b/p/pkp/index.d.ts new file mode 100644 index 000000000..4e09d025d --- /dev/null +++ b/p/pkp/index.d.ts @@ -0,0 +1,3 @@ +import { Profile } from '../../index'; + +export const profile: Profile; diff --git a/p/rejseplanen/index.d.ts b/p/rejseplanen/index.d.ts new file mode 100644 index 000000000..4e09d025d --- /dev/null +++ b/p/rejseplanen/index.d.ts @@ -0,0 +1,3 @@ +import { Profile } from '../../index'; + +export const profile: Profile; diff --git a/p/rmv/index.d.ts b/p/rmv/index.d.ts new file mode 100644 index 000000000..4e09d025d --- /dev/null +++ b/p/rmv/index.d.ts @@ -0,0 +1,3 @@ +import { Profile } from '../../index'; + +export const profile: Profile; diff --git a/p/rsag/index.d.ts b/p/rsag/index.d.ts new file mode 100644 index 000000000..4e09d025d --- /dev/null +++ b/p/rsag/index.d.ts @@ -0,0 +1,3 @@ +import { Profile } from '../../index'; + +export const profile: Profile; diff --git a/p/saarfahrplan/index.d.ts b/p/saarfahrplan/index.d.ts new file mode 100644 index 000000000..4e09d025d --- /dev/null +++ b/p/saarfahrplan/index.d.ts @@ -0,0 +1,3 @@ +import { Profile } from '../../index'; + +export const profile: Profile; diff --git a/p/sbahn-muenchen/index.d.ts b/p/sbahn-muenchen/index.d.ts new file mode 100644 index 000000000..4e09d025d --- /dev/null +++ b/p/sbahn-muenchen/index.d.ts @@ -0,0 +1,3 @@ +import { Profile } from '../../index'; + +export const profile: Profile; diff --git a/p/sbb/index.d.ts b/p/sbb/index.d.ts new file mode 100644 index 000000000..4e09d025d --- /dev/null +++ b/p/sbb/index.d.ts @@ -0,0 +1,3 @@ +import { Profile } from '../../index'; + +export const profile: Profile; diff --git a/p/sncb/index.d.ts b/p/sncb/index.d.ts new file mode 100644 index 000000000..4e09d025d --- /dev/null +++ b/p/sncb/index.d.ts @@ -0,0 +1,3 @@ +import { Profile } from '../../index'; + +export const profile: Profile; diff --git a/p/sncb/index.js b/p/sncb/index.js index 1756f5385..0e8aab526 100644 --- a/p/sncb/index.js +++ b/p/sncb/index.js @@ -5,7 +5,12 @@ const require = createRequire(import.meta.url); import {readFileSync} from 'fs'; import {Agent} from 'https'; -import {strictEqual as eql} from 'assert'; +/** @author Jürgen Bergmann + * explicit typing of eql assertion */ +import {strictEqual} from 'assert'; + +/** @type { ( actual:string, expected: string, message?: string | Error) => asserts actual is string} */ +const eql = strictEqual; import {parseHook} from '../../lib/profile-hooks.js'; import {parseLine} from '../../parse/line.js'; const baseProfile = require('./base.json'); diff --git a/p/svv/index.d.ts b/p/svv/index.d.ts new file mode 100644 index 000000000..4e09d025d --- /dev/null +++ b/p/svv/index.d.ts @@ -0,0 +1,3 @@ +import { Profile } from '../../index'; + +export const profile: Profile; diff --git a/p/tpg/index.d.ts b/p/tpg/index.d.ts new file mode 100644 index 000000000..4e09d025d --- /dev/null +++ b/p/tpg/index.d.ts @@ -0,0 +1,3 @@ +import { Profile } from '../../index'; + +export const profile: Profile; diff --git a/p/vbb/index.d.ts b/p/vbb/index.d.ts new file mode 100644 index 000000000..4e09d025d --- /dev/null +++ b/p/vbb/index.d.ts @@ -0,0 +1,3 @@ +import { Profile } from '../../index'; + +export const profile: Profile; diff --git a/p/vbn/index.d.ts b/p/vbn/index.d.ts new file mode 100644 index 000000000..4e09d025d --- /dev/null +++ b/p/vbn/index.d.ts @@ -0,0 +1,3 @@ +import { Profile } from '../../index'; + +export const profile: Profile; diff --git a/p/vkg/index.d.ts b/p/vkg/index.d.ts new file mode 100644 index 000000000..4e09d025d --- /dev/null +++ b/p/vkg/index.d.ts @@ -0,0 +1,3 @@ +import { Profile } from '../../index'; + +export const profile: Profile; diff --git a/p/vmt/index.d.ts b/p/vmt/index.d.ts new file mode 100644 index 000000000..4e09d025d --- /dev/null +++ b/p/vmt/index.d.ts @@ -0,0 +1,3 @@ +import { Profile } from '../../index'; + +export const profile: Profile; diff --git a/p/vos/index.d.ts b/p/vos/index.d.ts new file mode 100644 index 000000000..4e09d025d --- /dev/null +++ b/p/vos/index.d.ts @@ -0,0 +1,3 @@ +import { Profile } from '../../index'; + +export const profile: Profile; diff --git a/p/vrn/index.d.ts b/p/vrn/index.d.ts new file mode 100644 index 000000000..4e09d025d --- /dev/null +++ b/p/vrn/index.d.ts @@ -0,0 +1,3 @@ +import { Profile } from '../../index'; + +export const profile: Profile; diff --git a/p/vsn/index.d.ts b/p/vsn/index.d.ts new file mode 100644 index 000000000..4e09d025d --- /dev/null +++ b/p/vsn/index.d.ts @@ -0,0 +1,3 @@ +import { Profile } from '../../index'; + +export const profile: Profile; diff --git a/p/vvt/index.d.ts b/p/vvt/index.d.ts new file mode 100644 index 000000000..4e09d025d --- /dev/null +++ b/p/vvt/index.d.ts @@ -0,0 +1,3 @@ +import { Profile } from '../../index'; + +export const profile: Profile; diff --git a/p/zvv/index.d.ts b/p/zvv/index.d.ts new file mode 100644 index 000000000..4e09d025d --- /dev/null +++ b/p/zvv/index.d.ts @@ -0,0 +1,3 @@ +import { Profile } from '../../index'; + +export const profile: Profile; diff --git a/package.json b/package.json index d5f3c5b36..f3160fd59 100644 --- a/package.json +++ b/package.json @@ -4,8 +4,10 @@ "version": "6.2.1", "type": "module", "main": "index.js", + "types": "index.d.ts", "files": [ "index.js", + "index.d.ts", "throttle.js", "retry.js", "lib", @@ -67,6 +69,7 @@ "@pollyjs/core": "^6.0.5", "@pollyjs/persister-fs": "^6.0.5", "@stylistic/eslint-plugin": "^1.5.1", + "@stylistic/eslint-plugin-ts": "^1.6.1", "eslint": "^8.56.0", "is-coordinates": "^2.0.2", "is-roughly-equal": "^0.1.0", @@ -81,7 +84,8 @@ "test-integration:record": "VCR_MODE=record tap -t60 -j1 test/e2e/*.js", "test-e2e": "VCR_OFF=true tap -t60 -j16 test/e2e/*.js", "test": "npm run test-unit && npm run test-integration", - "prepublishOnly": "npm run lint && npm test" + "prepublishOnly": "npm run lint && npm test", + "tsc": "tsc" }, "tap": { "disable-coverage": true, diff --git a/parse/arrival-or-departure.js b/parse/arrival-or-departure.js index b0ea6ef3e..faf3d0ef9 100644 --- a/parse/arrival-or-departure.js +++ b/parse/arrival-or-departure.js @@ -1,3 +1,10 @@ +/** + * @typedef {import("../types").Alternative} Alternative + * @typedef {import("../types-private").ProfileEx} ProfileEx + * @typedef {import("../types-private").Context} Context + * @typedef {import("../types-raw-api").RawJny} RawArrivalDeparture + */ + import {findRemarks} from './find-remarks.js'; const ARRIVAL = 'a'; @@ -12,6 +19,10 @@ const createParseArrOrDep = (prefix) => { throw new Error('invalid prefix'); } + /** + * @param {Context} ctx + * @param {RawArrivalDeparture} d + */ const parseArrOrDep = (ctx, d) => { // d = raw arrival/departure const {profile, opt} = ctx; const {locL} = ctx.res.common; @@ -23,6 +34,7 @@ const createParseArrOrDep = (prefix) => { const plPlanned = d.stbStop[prefix + 'PlatfS'] || d.stbStop[prefix + 'PltfS'] && d.stbStop[prefix + 'PltfS'].txt || null; const plPrognosed = d.stbStop[prefix + 'PlatfR'] || d.stbStop[prefix + 'PltfR'] && d.stbStop[prefix + 'PltfR'].txt || null; + /** @type {Alternative} */ const res = { tripId: d.jid, stop: d.stbStop.location || null, diff --git a/parse/common.js b/parse/common.js index 0e86b6de6..260897256 100644 --- a/parse/common.js +++ b/parse/common.js @@ -1,6 +1,15 @@ import omit from 'lodash/omit.js'; import {createFindInTree} from '../lib/find-in-tree.js'; +/** + * @typedef {import("../types-private").ProfileEx} ProfileEx + * @typedef {import("../types-private").Options} Options + * @typedef {import("../types").Line} Line + * @typedef {import("../types").Station} Station + * @typedef {import("../types-private").DefaultProfile} DefaultProfile + * @typedef {import("../types-raw-api").RawCommon} RawCommon + */ + const findInTree = createFindInTree([ '**.oprX', '**.icoX', @@ -21,9 +30,10 @@ const findInTree = createFindInTree([ // there are circular references (e.g. warning -> loc -> warning) // todo: parse either on-the-fly or in a recursive/iterative process +/** @type {DefaultProfile["parseCommon"]} */ const parseCommonData = (_ctx) => { const {profile, opt, res} = _ctx; - const c = res.common || {}; + const c = res.common || /** @type {RawCommon} */({}); const matches = findInTree(res); const common = {}; @@ -49,6 +59,7 @@ const parseCommonData = (_ctx) => { }); } + /** @type {Array} */ common.lines = []; if (Array.isArray(c.prodL)) { common.lines = c.prodL.map(l => profile.parseLine(ctx, l)); diff --git a/parse/date-time.js b/parse/date-time.js index 554580953..884b88c1d 100644 --- a/parse/date-time.js +++ b/parse/date-time.js @@ -1,6 +1,10 @@ import {DateTime, FixedOffsetZone, IANAZone} from 'luxon'; import {luxonIANAZonesByProfile as timezones} from '../lib/luxon-timezones.js'; +/** + * @typedef {import("../types-private").DefaultProfile} DefaultProfile + */ + const parseDaysOffset = (_, time) => { return time.length > 6 ? parseInt(time.slice(0, -6)) diff --git a/parse/find-remarks.js b/parse/find-remarks.js index 33942e570..6f1a6696f 100644 --- a/parse/find-remarks.js +++ b/parse/find-remarks.js @@ -1,5 +1,11 @@ import flatMap from 'lodash/flatMap.js'; +/** + * @typedef {import("../types").Warning} Warning + * @typedef {import("../types").Hint} Hint + * @typedef {import("../types-raw-api").RawMsg} RawMsgL + */ + // There are two kinds of notes: "remarks" (in `remL`) and HAFAS // Information Manager (HIM) notes (in `himL`). The former describe // the regular operating situation, e.g. "bicycles allows", whereas @@ -10,11 +16,14 @@ import flatMap from 'lodash/flatMap.js'; // - warnings: notes from `himL` for cancellations, construction, etc // - remarks: both "notes" and "warnings" +/** + * @param {Array} refs + */ const findRemarks = (refs) => { return flatMap(refs, (ref) => { return [ref.warning, ref.hint] .filter(rem => Boolean(rem)) - .map(rem => [rem, ref]); + .map(rem => /** @type {[Warning|Hint,{fromLocation?:any, toLocation?:any}]} */([rem, ref])); }); }; diff --git a/parse/hint.js b/parse/hint.js index dcc75a2bb..56cc4da48 100644 --- a/parse/hint.js +++ b/parse/hint.js @@ -1,3 +1,8 @@ +/** + * @typedef {import("../types").Hint} Hint + * @typedef {import("../types-private").DefaultProfile} DefaultProfile + */ + const codesByIcon = Object.assign(Object.create(null), { cancel: 'cancelled', himWarn: 'disturbance', diff --git a/parse/icon.js b/parse/icon.js index 16f763ee3..593b2313e 100644 --- a/parse/icon.js +++ b/parse/icon.js @@ -1,3 +1,8 @@ +/** + * @typedef {import("../types-private").DefaultProfile} DefaultProfile + */ + +/** @type {DefaultProfile["parseIcon"]} */ const parseIcon = (ctx, i) => { if (i.res === 'Empty') { return null; diff --git a/parse/journey-leg.js b/parse/journey-leg.js index 8e66d345a..05cff4048 100644 --- a/parse/journey-leg.js +++ b/parse/journey-leg.js @@ -1,5 +1,12 @@ import {findRemarks} from './find-remarks.js'; +/** + * @typedef {import("../types").Leg} Leg + * @typedef {import("../types").Alternative} Alternative + * @typedef {import("../types-private").ProfileEx} ProfileEx + * @typedef {import("../types-private").DefaultProfile} DefaultProfile + */ + const clone = obj => Object.assign({}, obj); const addRemark = (stopoverOrLeg, remark) => { @@ -58,9 +65,11 @@ const applyRemarks = (leg, refs) => { // todo: pt.planrtTS // todo: what is pt.jny.lPassSt? +/** @type {DefaultProfile["parseJourneyLeg"]} */ const parseJourneyLeg = (ctx, pt, date) => { // pt = raw leg const {profile, opt} = ctx; + /** @type {Leg} */ const res = { origin: clone(pt.dep.location) || null, destination: clone(pt.arr.location), diff --git a/parse/journey.js b/parse/journey.js index b39fc7eeb..0f80a4b91 100644 --- a/parse/journey.js +++ b/parse/journey.js @@ -1,5 +1,11 @@ import {findRemarks} from './find-remarks.js'; +/** + * @typedef {import("../types").Journey} Journey + * @typedef {import("../types-private").DefaultProfile} DefaultProfile + */ + + // todo: c.conSubscr (e.g. `F`) // todo: c.trfRes x vbb-parse-ticket // todo: c.sotRating, c.isSotCon, c.sotCtxt @@ -11,7 +17,7 @@ import {findRemarks} from './find-remarks.js'; // todo: c.bfATS, c.bfIOSTS // todo: c.recState (e.g. `U`) // todo: c.intvlSubscr (e.g. `F`) - +/** @type {DefaultProfile["parseJourney"]} */ const parseJourney = (ctx, j) => { // j = raw jouney const {profile, opt} = ctx; @@ -37,6 +43,7 @@ const parseJourney = (ctx, j) => { // j = raw jouney legs.push(leg); } + /** @type {Journey} */ const res = { type: 'journey', legs, diff --git a/parse/line.js b/parse/line.js index 995a15f17..457cf6c29 100644 --- a/parse/line.js +++ b/parse/line.js @@ -1,10 +1,17 @@ import slugg from 'slugg'; +/** + * @typedef {import("../types").Line} Line + * @typedef {import("../types-private").DefaultProfile} DefaultProfile + */ + +/** @type {DefaultProfile["parseLine"]} */ const parseLine = ({profile}, p) => { if (!p) { return null; } // todo: handle this upstream const name = p.line || p.addName || p.name || null; // wtf + /** @type {Line} */ const res = { type: 'line', // This is terrible, but FPTF demands an ID. Let's pray for HAFAS. @@ -41,7 +48,7 @@ const parseLine = ({profile}, p) => { } // todo: what if `p.cls` is the sum of two bitmasks? - const product = byBitmask[parseInt(p.cls)]; + const product = byBitmask[parseInt(/** @type {any} */(p.cls))]; res.mode = product && product.mode || null; res.product = product && product.id || null; } diff --git a/parse/location.js b/parse/location.js index c62599da1..35b620ca9 100644 --- a/parse/location.js +++ b/parse/location.js @@ -1,6 +1,14 @@ import {parse} from 'qs'; import get from 'lodash/get.js'; +/** + * @typedef {import("../types").Location} Location + * @typedef {import("../types").Station} Station + * @typedef {import("../types").Stop} Stop + * @typedef {import("../types-private").ProfileEx} ProfileEx + * @typedef {import("../types-private").DefaultProfile} DefaultProfile + */ + const POI = 'P'; const STATION = 'S'; const ADDRESS = 'A'; @@ -14,10 +22,15 @@ const leadingZeros = /^0+/; // todo: l.gidL (e.g. `["A×de:15088:8013414"]`) // todo: `i` param in `lid` (e.g. `A=1@O=Zöberitz@X=12033455@Y=51504612@U=80@L=8013414@i=A×de:15088:8013414@`) -const parseLocation = (ctx, l) => { +/** @author Jürgen Bergmann + * add paramter ...args */ +/** @type {DefaultProfile["parseLocation"]} */ +const parseLocation = (ctx, l, ...args) => { const {profile, opt} = ctx; const lid = parse(l.lid, {delimiter: '@'}); + + /** @type {Location} */ const res = { type: 'location', id: (l.extId || lid.L || '').replace(leadingZeros, '') || null, @@ -45,10 +58,11 @@ const parseLocation = (ctx, l) => { .map(s => profile.parseLocation(ctx, s)) .filter(stop => Boolean(stop)); + /** @type {Station | Stop} */ const stop = { - type: l.isMainMast || subStops.length > 0 + type: /** @type {'station'|'stop'} */(l.isMainMast || subStops.length > 0 ? 'station' - : 'stop', + : 'stop'), id: res.id, name: l.name || lid.O ? profile.parseStationName(ctx, l.name || lid.O) @@ -58,7 +72,7 @@ const parseLocation = (ctx, l) => { : null, // todo: remove `.id` }; if (opt.subStops && subStops.length > 0) { - stop.stops = subStops; + /** @type {Station} */(stop).stops = subStops; } if ('pCls' in l) { @@ -70,7 +84,7 @@ const parseLocation = (ctx, l) => { const mMastLoc = locL[mMastLocX]; if (mMastLoc) { - stop.station = { + /** @type {Station} */(stop).station = { ...profile.parseLocation(ctx, mMastLoc), type: 'station', // todo: this should be handled differently }; @@ -82,7 +96,7 @@ const parseLocation = (ctx, l) => { .filter(l => Boolean(l)) .map(l => profile.parseLocation(ctx, l)) .filter(loc => Boolean(loc)) - .map(loc => loc.location); + .map(loc => /** @type Stop*/(loc).location); if (entrances.length > 0) { stop.entrances = entrances; } @@ -111,10 +125,10 @@ const parseLocation = (ctx, l) => { const dhid = (byType('stop-dhid') || {}).text; if (dhid) { - if (!stop.ids) { - stop.ids = {}; + if (!(/** @type {Stop} */(stop).ids)) { + /** @type {Stop} */(stop).ids = {}; } - stop.ids.dhid = dhid; + /** @type {Stop} */(stop).ids.dhid = dhid; } const otherIds = hints @@ -126,11 +140,11 @@ const parseLocation = (ctx, l) => { }) .filter(([src]) => src !== 'NULL'); if (otherIds.length > 0) { - if (!stop.ids) { - stop.ids = {}; + if (!(/** @type {Stop} */(stop).ids)) { + /** @type {Stop} */(stop).ids = {}; } for (const [src, id] of otherIds) { - stop.ids[src] = id; + /** @type {Stop} */(stop).ids[src] = id; } } diff --git a/parse/movement.js b/parse/movement.js index ba9691c62..93c378429 100644 --- a/parse/movement.js +++ b/parse/movement.js @@ -1,12 +1,20 @@ +/** + * @typedef {import("../types").Movement} Movement + * @typedef {import("../types-private").ProfileEx} ProfileEx + * @typedef {import("../types-private").DefaultProfile} DefaultProfile + */ + // todo: what is m.dirGeo? maybe the speed? // todo: what is m.stopL? // todo: what is m.proc? wut? // todo: what is m.pos? // todo: what is m.ani.dirGeo[n]? maybe the speed? // todo: what is m.ani.proc[n]? wut? +/** @type {DefaultProfile["parseMovement"]} */ const parseMovement = (ctx, m) => { // m = raw movement const {profile, opt} = ctx; + /** @type {Movement} */ const res = { direction: m.dirTxt ? profile.parseStationName(ctx, m.dirTxt) @@ -15,7 +23,7 @@ const parseMovement = (ctx, m) => { // m = raw movement line: m.line || null, location: m.pos ? { - type: 'location', + type: /** @type {'location'} */('location'), latitude: m.pos.y / 1000000, longitude: m.pos.x / 1000000, } @@ -33,7 +41,7 @@ const parseMovement = (ctx, m) => { // m = raw movement if (Array.isArray(m.ani.mSec)) { for (let i = 0; i < m.ani.mSec.length; i++) { - res.frames.push({ + (res.frames).push({ origin: m.ani.fromLocations[i] || null, destination: m.ani.toLocations[i] || null, t: m.ani.mSec[i], diff --git a/parse/nearby.js b/parse/nearby.js index 68bbafef7..f8ab009c6 100644 --- a/parse/nearby.js +++ b/parse/nearby.js @@ -1,9 +1,14 @@ +/** + * @typedef {import("../types-private").DefaultProfile} DefaultProfile + */ + // todo: remarks // todo: lines // todo: what is s.pCls? // todo: what is s.wt? // todo: what is s.dur? +/** @type {DefaultProfile["parseNearby"]} */ const parseNearby = (ctx, n) => { // n = raw nearby location const res = ctx.profile.parseLocation(ctx, n); res.distance = n.dist; diff --git a/parse/operator.js b/parse/operator.js index 8e7a99186..77e1e6310 100644 --- a/parse/operator.js +++ b/parse/operator.js @@ -1,5 +1,10 @@ import slugg from 'slugg'; +/** + * @typedef {import("../types-private").DefaultProfile} DefaultProfile + */ + +/** @type {DefaultProfile["parseOperator"]} */ const parseOperator = (ctx, a) => { const name = a.name && a.name.trim(); if (!name) { diff --git a/parse/polyline.js b/parse/polyline.js index 8582ab3bd..ff3b433e1 100644 --- a/parse/polyline.js +++ b/parse/polyline.js @@ -1,18 +1,28 @@ import _googlePolyline from 'google-polyline'; import distance from 'gps-distance'; +/** + * @typedef {import("../types").Feature} Feature + * @typedef {import("../types").FeatureCollection} FeatureCollection + * @typedef {import("../types-private").DefaultProfile} DefaultProfile + */ + const {decode} = _googlePolyline; // todo: what is p.delta? // todo: what is p.type? // todo: what is p.crdEncS? // todo: what is p.crdEncF? +/** @type {DefaultProfile["parsePolyline"]} */ const parsePolyline = (ctx, p) => { // p = raw polyline + + /** @type {Array} */ const points = decode(p.crdEncYX); if (points.length === 0) { return null; } + /** @type {Array} */ const res = points.map(([lat, lon]) => ({ type: 'Feature', properties: {}, diff --git a/parse/products-bitmask.js b/parse/products-bitmask.js index 550407ac8..3d1ad22a6 100644 --- a/parse/products-bitmask.js +++ b/parse/products-bitmask.js @@ -1,4 +1,12 @@ +/** + * @typedef {import("../types").Products} Products + * @typedef {import("../types-private").DefaultProfile} DefaultProfile + */ + +/** @type {DefaultProfile["parseProductsBitmask"]} */ const parseBitmask = ({profile}, bitmask) => { + + /** @type {Products} */ const res = {}; for (let product of profile.products) { res[product.id] = false; diff --git a/parse/stopover.js b/parse/stopover.js index 392f8f3b9..a6616748c 100644 --- a/parse/stopover.js +++ b/parse/stopover.js @@ -1,5 +1,11 @@ import {findRemarks} from './find-remarks.js'; +/** + * @typedef {import("../types").StopOver} StopOver + * @typedef {import("../types-private").DefaultProfile} DefaultProfile + */ + +/** @type {DefaultProfile["parseStopover"]} */ const parseStopover = (ctx, st, date) => { // st = raw stopover const {profile, opt} = ctx; @@ -8,6 +14,7 @@ const parseStopover = (ctx, st, date) => { // st = raw stopover const dep = profile.parseWhen(ctx, date, st.dTimeS, st.dTimeR, st.dTZOffset, st.dCncl); const depPl = profile.parsePlatform(ctx, st.dPlatfS || st.dPltfS && st.dPltfS.txt || null, st.dPlatfR || st.dPltfR && st.dPltfR.txt || null, st.dCncl); + /** @type {StopOver} */ const res = { stop: st.location || null, arrival: arr.when, diff --git a/parse/trip.js b/parse/trip.js index eef80bf83..6301bc019 100644 --- a/parse/trip.js +++ b/parse/trip.js @@ -2,10 +2,20 @@ import minBy from 'lodash/minBy.js'; import maxBy from 'lodash/maxBy.js'; import last from 'lodash/last.js'; +/** + * @typedef {import("../types").Leg} Leg + * @typedef {import("../types").Trip} Trip + * @typedef {import("../types-private").ProfileEx} ProfileEx + * @typedef {import("../types-private").DefaultProfile} DefaultProfile + * @typedef {import("../types-raw-api").RawSec} RawLeg +*/ + +/** @type {DefaultProfile["parseTrip"]} */ const parseTrip = (ctx, t) => { // t = raw trip const {profile, opt} = ctx; // pretend the trip is a leg in a journey + /** @type RawLeg */ const fakeLeg = { type: 'JNY', dep: Array.isArray(t.stopL) @@ -22,6 +32,7 @@ const parseTrip = (ctx, t) => { // t = raw trip const today = () => profile.formatDate(profile, Date.now()); const date = t.date || today(); + /** @type {any} */ const trip = profile.parseJourneyLeg(ctx, fakeLeg, date); trip.id = trip.tripId; delete trip.tripId; diff --git a/parse/warning.js b/parse/warning.js index 888abcf24..cc2747b20 100644 --- a/parse/warning.js +++ b/parse/warning.js @@ -1,11 +1,24 @@ import brToNewline from '@derhuerst/br2nl'; import omit from 'lodash/omit.js'; +/** + * @typedef {import("../types").Warning} Warning + * @typedef {import("../types").Edge} Edge + * @typedef {import("../types").Event} Event + * @typedef {import("../types-private").ProfileEx} ProfileEx + * @typedef {import("../types-private").DefaultProfile} DefaultProfile + */ + const typesByIcon = Object.assign(Object.create(null), { HimWarn: 'status', }); +/** + * @returns {(e:any) => Edge} + */ const parseMsgEdge = (ctx) => (e) => { + + /** @type {Edge} */ const res = omit(e, [ 'icoX', 'fLocX', @@ -20,6 +33,10 @@ const parseMsgEdge = (ctx) => (e) => { }; const fallbackTime = '000000'; // midnight + +/** + * @returns {(e:any) => Event} + */ const parseMsgEvent = (ctx) => (e) => { const {profile} = ctx; // todo: test that covers this return { @@ -31,6 +48,7 @@ const parseMsgEvent = (ctx) => (e) => { }; }; +/** @type {DefaultProfile["parseWarning"]} */ const parseWarning = (ctx, w) => { const {profile, res: resp, common} = ctx; @@ -58,6 +76,7 @@ const parseWarning = (ctx, w) => { const icon = w.icon || null; const type = icon && icon.type && typesByIcon[icon.type] || 'warning'; + /** @type {Warning} */ const res = { id: w.hid || null, type, diff --git a/parse/when.js b/parse/when.js index f79aaa8ca..43b1166d7 100644 --- a/parse/when.js +++ b/parse/when.js @@ -1,18 +1,23 @@ +/** + * @typedef {import("../types-private").DefaultProfile} DefaultProfile + */ + +/** @type {DefaultProfile["parseWhen"]} */ const parseWhen = (ctx, date, timeS, timeR, tzOffset, cncl = false) => { const parse = ctx.profile.parseDateTime; let planned = timeS - ? parse(ctx, date, timeS, tzOffset, false) + ? /** @type {string} */(parse(ctx, date, timeS, tzOffset, false)) : null; let prognosed = timeR - ? parse(ctx, date, timeR, tzOffset, false) + ? /** @type {string} */(parse(ctx, date, timeR, tzOffset, false)) : null; let delay = null; if (planned && prognosed) { const tPlanned = parse(ctx, date, timeS, tzOffset, true); const tPrognosed = parse(ctx, date, timeR, tzOffset, true); - delay = Math.round((tPrognosed - tPlanned) / 1000); + delay = Math.round((/** @type {number} */(tPrognosed) - /** @type {number} */(tPlanned)) / 1000); } if (cncl) { diff --git a/test/e2e/cfl.js b/test/e2e/cfl.js index 65ea61a1a..58fd5ebc5 100644 --- a/test/e2e/cfl.js +++ b/test/e2e/cfl.js @@ -75,7 +75,7 @@ const ettelbruck = '9258199'; const mersch = '9864348'; const luxembourgGareCentrale = '9217081'; -tap.test('journeys – Ettelbruck to Luxembourg', async (t) => { +tap.skip('journeys – Ettelbruck to Luxembourg', async (t) => { const res = await client.journeys(ettelbruck, luxembourgGareCentrale, { results: 4, departure: when, diff --git a/test/e2e/cmta.js b/test/e2e/cmta.js index 81968e64b..116aaf86f 100644 --- a/test/e2e/cmta.js +++ b/test/e2e/cmta.js @@ -90,7 +90,7 @@ tap.test('Domain to 1104 Elm Street, Austin, TX 78703', async (t) => { t.end(); }); -tap.test('Domain to WHOLE FOODS MARKET - ARBOR TRAILS', async (t) => { +tap.skip('Domain to WHOLE FOODS MARKET - ARBOR TRAILS', async (t) => { const wholeFoodsMarket = { type: 'location', id: '9893207', diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 000000000..4266f0472 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,29 @@ +{ + "compilerOptions": { + "skipLibCheck": true, + "outDir": "build", + "moduleResolution": "node", + "resolveJsonModule": true, + "allowJs": true, + "strictNullChecks": false, + "allowSyntheticDefaultImports": true, + "target": "ES6", + "module": "esnext", + "declaration": true, + "noEmit": true, + "checkJs": true + }, + "include": [ + "**/*" + ], + "exclude": [ + "node_modules", + "build", + "@types", + "test", + "p/**/example.js", + "tools", + "throttle.js", + "retry.js" + ] +} \ No newline at end of file diff --git a/types-private.ts b/types-private.ts new file mode 100644 index 000000000..fc2771e4d --- /dev/null +++ b/types-private.ts @@ -0,0 +1,225 @@ +import { Trip, Leg, Profile, JourneysOptions, RefreshJourneyOptions, TripOptions, DeparturesArrivalsOptions, LocationsOptions, StopOptions, ReachableFromOptions, RadarOptions, TripsByNameOptions, RemarksOptions, NearByOptions, PrognosisType, ScheduledDays } from './types' +import { JourneyDetailsRequest, LocDetailsRequest, HimSearchRequest, ReconstructionRequest, StationBoardRequest, LocMatchRequest, LineMatchRequest, LocGeoPosRequest, LocGeoReachRequest, JourneyGeoPosRequest, RawResult, RawIco, RawJny, RawSec, RawOutCon, RawProd, RawLoc, RawPoly, RawOp, RawRem, RawHim, RawStop, Loc, RawSDays } from './types-raw-api' + +export type Options = JourneysOptions + & RefreshJourneyOptions + & TripOptions + & DeparturesArrivalsOptions + & LocationsOptions + & StopOptions + & ReachableFromOptions + & RadarOptions + & TripsByNameOptions + & RemarksOptions + & NearByOptions + +export type ProfileEx = DefaultProfile & Profile + +// see parseTrip +const checkLegPropertiesMissingInTrip = (t: Required): Required => { + const { id, ...t1 } = t; + return { tripId: id, reachable: undefined, ...t1 }; +} + +const checkTripPropertiesMissingInLeg = (l: Required): Required => { + const { tripId, ...l1 } = l; + return { id: tripId, scheduledDays: undefined, ...l1 }; +} + +// initially inferred with 'npx tsc --declaration --emitDeclarationOnly true --noEmit false --allowJs true' + +export type Icon = { + type?: string; + title?: string; +} + +export type CommonData = { + operators: import("./types").Operator[]; + icons: Icon[]; + lines: import("./types").Line[]; + hints: import("./types").Hint[]; + locations: import("./types").Station[]; + warnings: import("./types").Warning[]; + polylines: import("./types").FeatureCollection[]; +} + +export interface Context { + profile: ProfileEx; + opt?: Options; + common?: CommonData; + res?: RawResult; +} + +export type DefaultProfile = { + request: (ctx: Context, userAgent: any, reqData: any) => Promise<{ + res: RawResult; + common: CommonData; + }>; + transformReqBody: (ctx: Context, x: any) => any; + transformReq: (ctx: Context, x: any) => any; + salt: any; + addChecksum: boolean; + addMicMac: boolean; + logRequest: (ctx: Context, fetchReq: Request, reqId?: string) => void; + logResponse: (ctx: Context, res: Response, body: string, reqId?: string) => void; + formatStationBoardReq: (ctx: Context, station: any, type: any) => { + meth: string; + req: StationBoardRequest; + }; + formatLocationsReq: (ctx: Context, query: any) => { + cfg: { + polyEnc: string; + }; + meth: string; + req: LocMatchRequest; + }; + formatStopReq: (ctx: Context, stopRef: Loc) => { + meth: string; + req: LocDetailsRequest; + }; + formatNearbyReq: (ctx: Context, location: any) => { + cfg: { + polyEnc: string; + }; + meth: string; + req: LocGeoPosRequest; + }; + formatTripReq: ({ opt }: { + profile: ProfileEx; + opt: any; + }, id: string) => { + cfg: { + polyEnc: string; + }; + meth: string; + req: JourneyDetailsRequest; + }; + formatRadarReq: (ctx: Context, north: any, west: any, south: any, east: any) => { + meth: string; + req: JourneyGeoPosRequest; + }; + formatReachableFromReq: (ctx: Context, address: any) => { + meth: string; + req: LocGeoReachRequest; + }; + formatRefreshJourneyReq: (ctx: Context, refreshToken: any) => { + meth: string; + req: ReconstructionRequest; + }; + formatRemarksReq: (ctx: Context) => { + meth: string; + req: HimSearchRequest; + }; + formatLinesReq: (ctx: Context, query: any) => { + meth: string; + req: LineMatchRequest; + }; + transformJourneysQuery: (ctx: { profile?: ProfileEx; opt: import("./types").JourneysOptions }, x: any) => any; + parseDateTime: (ctx: Context, date: string, time: string, tzOffset?: number, timestamp?: boolean) => string | number; + parsePlatform: (ctx: Context, platfS: any, platfR: any, cncl?: boolean) => { + platform: any; + plannedPlatform: any; + prognosedPlatform: any; + } | { + platform: any; + plannedPlatform: any; + prognosedPlatform?: undefined; + }; + parseScheduledDays: (ctx: Context, sDays?: RawSDays) => ScheduledDays | undefined; + parsePrognosisType: (ctx: Context, progType?: string) => PrognosisType | undefined; + parseProductsBitmask: (ctx: Context, bitmask: number) => {}; + parseIcon: (ctx: Context, i: RawIco) => Icon; + parseWhen: (ctx: Context, date: string, timeS: string, timeR: string, tzOffset: number, cncl?: boolean) => { + when?: string; + plannedWhen?: string; + prognosedWhen?: string; + delay?: number; + } | { + when: any; + plannedWhen: any; + delay: number; + prognosedWhen?: undefined; + }; + parseDeparture: (ctx: Context, d: RawJny) => import("./types").Alternative; + parseArrival: (ctx: Context, d: RawJny) => import("./types").Alternative; + parseTrip: (ctx: Context, t: RawJny) => import("./types").Trip; + parseJourneyLeg: (ctx: Context, pt: RawSec, date: string) => import("./types").Leg; + parseJourney: (ctx: Context, j: RawOutCon) => import("./types").Journey; + parseLine: (ctx: Context, p: RawProd) => import("./types").Line; + parseStationName: (cty: Context, name: any) => any; + parseLocation: (ctx: Context, l: RawLoc, ...args: any[]) => import("./types").Location | import("./types").Station | import("./types").Stop; + parseCommon: (ctx: Context) => CommonData; + parsePolyline: (ctx: Context, p: RawPoly) => import("./types").FeatureCollection; + parseMovement: (ctx: Context, m: RawJny) => import("./types").Movement; + parseNearby: (ctx: Context, n: RawLoc) => import("./types").Location | import("./types").Station | import("./types").Stop; + parseOperator: (ctx: Context, a: RawOp) => { + type: string; + id: any; + name: any; + }; + parseHint: (ctx: Context, h: RawRem) => import("./types").Hint; + parseWarning: (ctx: Context, w: RawHim) => import("./types").Warning; + parseStopover: (ctx: Context, st: RawStop, date: any) => import("./types").StopOver; + formatAddress: (a: any) => Loc; + formatCoord: (x: any) => number; + formatDate: (profile: any, when: any) => string; + formatLocationFilter: (stops: any, addresses: any, poi: any) => string; + formatProductsFilter: (ctx: Context, filter: any) => { + type: string; + mode: string; + value: string; + }; + formatPoi: (p: any) => { + type: string; + name: any; + lid: string; + }; + formatStation: (id: string) => Loc; + formatTime: (profile: any, when: any) => string; + formatLocation: (profile: ProfileEx, l: any, name?: string) => Loc; + formatRectangle: (profile: ProfileEx, north: any, west: any, south: any, east: any) => { + llCrd: { + x: any; + y: any; + }; + urCrd: { + x: any; + y: any; + }; + }; + filters: { + bike: { + type: string; + mode: string; + }; + accessibility: { + none: { + type: string; + mode: string; + meta: string; + }; + partial: { + type: string; + mode: string; + meta: string; + }; + complete: { + type: string; + mode: string; + meta: string; + }; + }; + }; + journeysOutFrwd: boolean; + departuresGetPasslist: boolean; + departuresStbFltrEquiv: boolean; + trip: boolean; + radar: boolean; + refreshJourney: boolean; + refreshJourneyUseOutReconL: boolean; + tripsByName: boolean; + remarks: boolean; + lines: boolean; + defaultLanguage?: string; +}; + diff --git a/types-raw-api.ts b/types-raw-api.ts new file mode 100644 index 000000000..aecceab25 --- /dev/null +++ b/types-raw-api.ts @@ -0,0 +1,841 @@ +import { Stop, Line, Hint, Warning, FeatureCollection } from './types' + +/// raw hafas interface + +export interface RawPltf { + type: string; + txt: string; +} + +export interface RawTrnCmpSX { + tcM?: number; + tcocX?: number[]; +} + +export interface RawDep { + locX?: number; + idx?: number; + dProdX?: number; + dPlatfS?: string; + dInR?: boolean; + dTimeS?: string; + dProgType?: string; + dTrnCmpSX?: RawTrnCmpSX; + dTZOffset?: number; + msgL?: RawMsg[]; + type?: string; + dTimeR?: string; + dCncl?: boolean; + dPltfS?: RawPltf; + dPlatfR?: string; + dPltfR?: RawPltf; + dPlatfCh?: boolean; + location?: Stop; // generated in parse/common.js +} + +export interface RawArr { + locX?: number; + idx?: number; + aPlatfS?: string; + aOutR?: boolean; + aTimeS?: string; + aProgType?: string; + aTrnCmpSX?: any; + aTZOffset?: number; + msgL?: RawMsg[]; + type?: string; + aTimeR?: string; + aCncl?: boolean; + aPltfS?: RawPltf; + aPlatfR?: string; + aPltfR?: RawPltf; + aProdX?: any; + prodL?: RawProd[]; + location?: Stop; // generated in parse/common.js +} + +export interface PubCh { + name: string; + fDate: string; + fTime: string; + tDate: string; + tTime: string; +} + +export interface RawHim { + hid: string; + act: boolean; + pub?: string; + head?: string; + lead?: string; + text?: string; + tckr?: string; + icoX: number; + prio: number; + fLocX?: number; + tLocX?: number; + prod?: number; + lModDate?: string; + lModTime?: string; + sDate?: string; + sTime?: string; + eDate?: string; + eTime?: string; + cat?: number; + pubChL?: PubCh[]; + edgeRefL?: number[]; + regionRefL?: number[]; + catRefL?: number[]; + eventRefL?: number[]; + affProdRefL?: number[]; + fromLocations?: Stop[]; // generated in parse/common.js + icon?: any; + comp?: string; + toLocations?: Stop[]; // generated in parse/common.js +} + +export interface RawMsg { + type: string; + remX?: number; + sty?: string; + txtC?: RawRGB; + fLocX?: number; + tLocX?: number; + fIdx?: number; + tIdx?: number; + himX?: number; + tagL?: string[]; + sort?: any; + prio?: any; + hint?: Hint; // generated in parse/common.js + warning?: Warning; // generated in parse/common.js +} + +export interface RawRem { + type: string; + code: string; + prio?: number; + icoX?: number; + txtN?: string; + txtS?: string; + jid?: string; + icon?: any; + sIdx?: any; +} + +export interface RawStop { + locX?: number; + idx?: number; + dProdX?: number; + dInR?: boolean; + dTimeS?: string; + dTimeR?: string; + dTZOffset?: number; + dCncl?: boolean; + dInS?: boolean; + dPlatfS?: string; + dPltfS?: RawPltf; + dPlatfR?: string; + dPltfR?: RawPltf; + dPlatfCh?: boolean; + dProgType?: string; + dDirTxt?: string; + dDirFlg?: string; + dTrnCmpSX?: RawTrnCmpSX; + aProdX?: number; + aPlatfS?: string; + aPltfS?: RawPltf; + aPlatfR?: string; + aPltfR?: RawPltf; + aOutR?: boolean; + aTimeS?: string; + aTimeR?: string; + aTZOffset?: number; + aCncl?: boolean; + aOutS?: boolean; + aPlatfCh?: boolean; + aProgType?: string; + type?: string; + msgL?: RawMsg[]; + remL?: RawRem[]; + isAdd?: boolean; + location?: Stop; // generated in parse/common.js +} + +export interface PpLocRef { + ppIdx: number; + locX: number; + location?: Stop; // generated in parse/common.js +} + +export interface RawPoly { + delta: boolean; + dim: number; + type?: string; + crdEncYX: string; + crdEncZ?: string; + crdEncS: string; + crdEncF: string; + ppLocRefL?: PpLocRef[]; +} + +export interface PolyG { + polyXL: number[]; +} + +export interface RawAni { + mSec: number[]; + proc: number[]; + procAbs?: number[]; + fLocX: number[]; + tLocX: number[]; + dirGeo: number[]; + stcOutputX: number[]; + polyG?: PolyG; + state: string[]; + poly?: RawPoly; + polyline?: FeatureCollection; // generated in parse/common.js + fromLocations?: Stop[]; // generated in parse/common.js + toLocations?: Stop[]; // generated in parse/common.js +} + +export interface RawSDays { + fLocX?: number; + tLocX?: number; + fLocIdx?: number; + tLocIdx?: number; + sDaysR?: string; + sDaysI?: string; + sDaysB?: string; +} + +export interface RawPolyG { + polyXL: number[]; +} + +export interface RawCrd { + x: number; + y: number; + z?: number; + type?: any; + layerX?: any; + crdSysX?: any; + floor?: number; +} + +export interface RawFreq { + jnyL?: RawJny[]; + minC?: number; + maxC?: number; + numC?: number; +} + +export interface RawJny { + jid: string; + prodX: number; + dirTxt?: string; + status?: string; + isRchbl?: boolean; + ctxRecon?: string; + remL?: RawRem[]; + msgL?: RawMsg[]; + stbStop?: RawStop; + subscr?: string; + poly?: RawPoly; + stopL?: RawStop[]; + date?: string; + sDaysL?: RawSDays[]; + dTrnCmpSX?: RawTrnCmpSX; + polyG?: RawPolyG; + ani?: RawAni; + pos?: RawCrd; + freq?: RawFreq; + polyline?: any; + dirFlg?: any; + prodL?: RawProdRef[]; + dirL?: RawDirRef[]; + sumLDrawStyleX?: number; + resLDrawStyleX?: number; + trainStartDate?: string; + durS?: string; + tcocXL?: any; + chRatingSoll?: any; + chgDurR?: any; + approxDelay?: any; + isPartCncl?: any; + line?: Line; // generated in parse/common.js +} + +export interface RawGis { + dist?: number; + durS?: string; + dirGeo?: number; + ctx?: string; + gisPrvr?: string; + getDescr?: boolean; + getPoly?: boolean; + msgL?: RawMsg[]; +} + +export interface RawSec { + type: string; + icoX?: number; + dep: RawDep; + arr: RawArr; + jny?: RawJny; + parJnyL?: RawJny[]; + resState?: string; + resRecommendation?: string; + gis?: RawGis; + minChg?: any; +} + +export interface RawSotCtxt { + cnLocX?: number; + calcDate: string; + jid?: string; + locMode: string; + pLocX?: number; + reqMode: string; + sectX?: number; + calcTime: string; + tName?: string; +} + +export interface Content { + type: string; + content: string; +} + +export interface ExtCont { + content: Content; +} + +export interface RawTicket { + name: string; + prc: number; + cur: string; + extCont: ExtCont; +} + +export interface RawPrice { + amount?: number +} + +export interface RawFare { + price?: RawPrice; + prc?: any; + desc?: string; + isFromPrice?: boolean; + isPartPrice?: boolean; + retPriceIsCompletePrice?: boolean; + retPrice?: number; + isBookable?: boolean; + isUpsell?: boolean; + verbundName?: string; + targetCtx?: string; + buttonText?: string; + name?: string; + ticketL?: RawTicket[]; +} + +export interface RawFareSet { + desc?: string; + fareL: RawFare[]; +} + +export interface RawTrfRes { + statusCode?: string; + fareSetL?: RawFareSet[]; +} + +export interface RawRecon { + ctx?: string; +} + +export interface RawOutCon { + cid: string; + date: string; + dur: string; + durS?: string; + durR?: string; + chg: number; + sDays?: RawSDays; + dep: RawDep; + arr: RawArr; + secL: RawSec[]; + ctxRecon?: string; + trfRes?: RawTrfRes; + conSubscr: string; + resState?: string; + resRecommendation?: string; + recState: string; + sotRating?: number; + isSotCon?: boolean; + showARSLink?: boolean; + sotCtxt?: RawSotCtxt; + cksum: string; + msgL?: RawMsg[]; + recon?: RawRecon; + dTrnCmpSX?: any; + intvlSubscr?: string; + tcocXL?: any; + originType?: string; + freq?: RawFreq; + cksumDti?: any; + q?: any; +} + +export interface RawItem { + col: number; + row: number; + msgL?: RawMsg[]; + remL?: number[]; + remarkRefs?: any[]; // generated in parse/common.js + hints?: Hint[]; // generated in parse/common.js +} + +export interface RawGrid { + nCols: number; + nRows: number; + itemL: RawItem[]; + type: string; + title: string; +} +export interface RawLoc { + lid?: string; + type?: string; + name: string; + icoX?: number; + extId?: string; + state: string; + crd?: RawCrd; + pCls?: number; + entry?: boolean; + mMastLocX?: number; + pRefL?: number[]; + wt?: number; + entryLocL?: number[]; + stopLocL?: number[]; + msgL?: RawMsg[]; + gridL?: RawGrid[]; + isMainMast?: boolean; + meta?: boolean; + dist?: number; + dur?: number; + gidL?: string[]; + lines?: Line[]; // generated in parse/common.js + remarkRefs?: any[]; // generated in parse/common.js + hints?: Hint[]; // generated in parse/common.js +} + +export interface RawProdCtx { + name?: string; + num?: string; + matchId?: string; + catOut?: string; + catOutS?: string; + catOutL?: string; + catIn?: string; + catCode?: string; + admin?: string; + addName?: string; + lineId?: string; + line?: any; +} + +export interface RawOp { + name: string; + icoX: number; +} + +export interface RawProd { + name?: string; + number?: string; + icoX?: number; + oprX?: number; + prodCtx?: RawProdCtx; + cls?: number; + line?: string; + addName?: string; + operator?: any; + pid?: any; + nameS?: any; + himIdL?: any; +} + +export interface RawProdRef { + fLocX?: number; + tLocX?: number; + prodX: number; + fIdx?: number; + tIdx?: number; +} + +export interface RawRGB { + r: number; + g: number; + b: number; +} + +export interface RawIco { + res?: string; + txt?: string; + text?: string; + txtS?: string; + fg?: RawRGB; + bg?: RawRGB; + shp?: any; +} + +export interface RawDir { + txt: string; + flg?: string; +} + +export interface RawDirRef { + dirX?: number; + fLocX?: number; + tLocX?: number; + fIdx?: number; + tIdx?: number; +} + +export interface RawTcoc { + c: string; + r?: number; +} + +export interface RawHimMsgCat { + id: number; +} + +export interface IcoCrd { + x: number; + y: number; + type?: string; +} + +export interface RawHimMsgEdge { + fLocX?: number; + tLocX?: number; + dir?: number; + icoCrd: IcoCrd; + msgRefL?: number[]; + icoX?: number; +} + +export interface RawHimMsgEvent { + fLocX?: number; + tLocX?: number; + fDate: string; + fTime: string; + tDate: string; + tTime: string; +} + +export interface RawCommon { + locL?: RawLoc[]; + prodL?: RawProd[]; + remL?: RawRem[]; + icoL?: RawIco[]; + opL?: RawOp[]; + maxC?: number; + numC?: number; + himL?: RawHim[]; + polyL?: RawPoly[]; + layerL?: any; + crdSysL?: any; + dirL?: RawDir[]; + lDrawStyleL?: any[]; + tcocL?: RawTcoc[]; + himMsgCatL?: RawHimMsgCat[]; + himMsgEdgeL?: RawHimMsgEdge[]; + himMsgEventL?: RawHimMsgEvent[]; + rtSrcL?: any; +} + +export interface RawMatch { + field?: string; + state?: string; + locL?: RawLoc[]; +} + +export interface RawPos { + locX: number; + dur: number; +} + +export interface RawLine { + lineId?: string; + prodX: number; + dirRefL?: number[]; + jnyL?: RawJny[]; + line?: Line; // generated in parse/common.js +} + +export interface RawResult { + common?: RawCommon; + msgL?: RawHim[]; + type?: string; + jnyL?: RawJny[]; + outConL?: RawOutCon[]; + outCtxScrB?: string; + outCtxScrF?: string; + planrtTS?: string; + outConGrpSettings?: any; + match?: RawMatch; + locL?: RawLoc[]; + journey?: RawJny; + hciVersion?: string; + fpE?: string; + sD?: string; + sT?: string; + fpB?: string; + posL?: RawPos[]; + lineL?: RawLine[]; + retCtxScrF?: any; + bfATS: any; + bfIOSTS: any; + outConGrpL?: any; +} + +export interface SvcRes { + meth: string; + err?: string; + errTxt?: string; + res?: RawResult; +} + +export interface RawResponse { + ver: string; + ext?: string; + lang: string; + id?: string; + err?: string; + cInfo?: any; + graph?: any; + subGraph?: any; + view?: any; + errTxt?: string; + svcResL?: SvcRes[]; +} + +export interface Cfg { + polyEnc?: string; + rtMode?: string; +} + +export interface Loc { + type: string; + name?: string; + lid?: string; +} + +export interface LocViaInput { + loc: Loc; +} + +export interface LocMatchInput { + loc: Loc; + maxLoc: number; + field: string; +} + +export interface LocMatchRequest { + input: LocMatchInput; +} + +export interface LineMatchRequest { + input: string; +} + +export interface JourneyDetailsRequest { + jid: string; + getPolyline: boolean; +} + +export interface JnyFltr { + type: string; + mode: string; + value?: string; + meta?: string; +} + +export interface TvlrProf { + type: string; + redtnCard?: number; +} + +export interface TrfReq { + jnyCl: number; + tvlrProf: TvlrProf[]; + cType: string; +} + +export interface StationBoardRequest { + type: string; + date: string; + time: string; + stbLoc: Loc; + jnyFltrL: JnyFltr[]; + dur: number; + dirLoc?: Loc; + maxJny?: number; + getPasslist?: any; + stbFltrEquiv?: any; +} + +export interface HimSearchRequest { + himFltrL: JnyFltr[]; + getPolyline?: boolean; + maxNum?: number; + dateB?: string; + timeB?: string; + dateE?: string; + timeE?: string; +} + +export interface ReconstructionRequest { + getIST: boolean; + getPasslist: boolean; + getPolyline: boolean; + getTariff: boolean; + ctxRecon?: string; + outReconL?: RawRecon[]; +} + +export interface LocData { + loc: Loc; + type: string; + date: string; + time: string; +} + +export interface SearchOnTripRequest { + sotMode: string; + jid: string; + locData: LocData; + arrLocL: Loc[]; + jnyFltrL: JnyFltr[]; + getPasslist: boolean; + getPolyline: boolean; + minChgTime: number; + getTariff: boolean; +} + +export interface TripSearchRequest { + getPasslist: boolean; + maxChg: number; + minChgTime: number; + depLocL: Loc[]; + viaLocL?: LocViaInput[]; + arrLocL: Loc[]; + jnyFltrL: JnyFltr[]; + gisFltrL: JnyFltr[]; + getTariff: boolean; + ushrp: boolean; + getPT: boolean; + getIV: boolean; + getPolyline: boolean; + outDate: string; + outTime: string; + numF: number; + outFrwd: boolean; + trfReq?: TrfReq; +} + +export interface JourneyMatchRequest { + input: string; + date?: string; + time?: string; + dateB?: string; + timeB?: string; + dateE?: string; + timeE?: string; + onlyCR?: boolean; + jnyFltrL: JnyFltr[]; +} + +export interface RawcCrd { + x: number; + y: number; +} + +export interface RawRing { + cCrd: RawcCrd; + maxDist: number; + minDist: number; +} + +export interface LocGeoPosRequest { + ring: RawRing; + locFltrL: JnyFltr[]; + getPOIs: boolean; + getStops: boolean; + maxLoc: number; +} + +export interface LocGeoReachRequest { + loc: Loc; + maxDur: number; + maxChg: number; + date: string; + time: string; + period: number; + jnyFltrL: JnyFltr[]; +} + +export interface LocDetailsRequest { + locL: Loc[]; +} + +export interface ServerInfoRequest { + getVersionInfo: boolean; +} + +export interface RawRect { + llCrd: RawCrd; + urCrd: RawCrd; +} + +export interface JourneyGeoPosRequest { + maxJny: number; + onlyRT: boolean; + date: string; + time: string; + rect: RawRect; + perSize: number; + perStep: number; + ageOfReport: boolean; + jnyFltrL: JnyFltr[]; + trainPosMode: string; +} + +export interface SvcReq { + cfg: Cfg; + meth: string; + req: LocMatchRequest | TripSearchRequest | JourneyDetailsRequest | StationBoardRequest | ReconstructionRequest | JourneyMatchRequest | LocGeoPosRequest | LocGeoReachRequest | LocDetailsRequest | JourneyGeoPosRequest | HimSearchRequest | LineMatchRequest | ServerInfoRequest | SearchOnTripRequest; +} + +export interface RawRequestClient { + id: string; + v: string; + type: string; + name: string; +} + +export interface RawRequestAuth { + type: string; + aid: string; +} + +export interface RawRequest { + lang: string; + svcReqL: SvcReq[]; + client: RawRequestClient; + ext?: string; + ver: string; + auth: RawRequestAuth; +} + diff --git a/types-test-generated.ts b/types-test-generated.ts new file mode 100644 index 000000000..2393a0180 --- /dev/null +++ b/types-test-generated.ts @@ -0,0 +1,16751 @@ +// created with script './create-types-test-file.sh' at Tue Feb 13 16:40:29 CET 2024 + +import { Journeys, Journey, Alternative, Station, Stop, Location, Departures, Arrivals } from './types' +import { RawResult, RawResponse } from './types-raw-api' +const r1 : RawResult = +{ + "common": { + "locL": [ + { + "lid": "A=1@O=Köln Hbf@X=6958730@Y=50943029@U=80@L=8000207@", + "type": "S", + "name": "Köln Hbf", + "icoX": 0, + "extId": "8000207", + "state": "F", + "crd": { + "x": 6959197, + "y": 50942823, + "z": 0, + "type": "WGS84", + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 319 + }, + { + "lid": "A=1@O=Nürnberg Hbf@X=11082989@Y=49445615@U=80@L=8000284@", + "type": "S", + "name": "Nürnberg Hbf", + "icoX": 0, + "extId": "8000284", + "state": "F", + "crd": { + "x": 11082270, + "y": 49445435, + "z": 0, + "type": "WGS84", + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 443 + }, + { + "lid": "A=1@O=Köln Messe/Deutz Gl.11-12@X=6974065@Y=50941717@U=80@L=8073368@", + "type": "S", + "name": "Köln Messe/Deutz Gl.11-12", + "icoX": 0, + "extId": "8073368", + "state": "F", + "crd": { + "x": 6975162, + "y": 50940602, + "z": 0, + "type": "WGS84", + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 319, + "entry": true, + "mMastLocX": 3 + }, + { + "lid": "A=1@O=Köln Messe/Deutz@X=6975000@Y=50940872@U=80@L=8003368@", + "type": "S", + "name": "Köln Messe/Deutz", + "icoX": 0, + "extId": "8003368", + "state": "F", + "crd": { + "x": 6974578, + "y": 50940989, + "z": 0, + "type": "WGS84", + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 319 + } + ], + "prodL": [ + { + "name": "ICE 827", + "number": "827", + "icoX": 0, + "cls": 1, + "oprX": 0, + "prodCtx": { + "name": "ICE 827", + "num": "827", + "matchId": "41", + "catOut": "ICE", + "catOutS": "ICE", + "catOutL": "Intercity-Express", + "catIn": "ICE", + "catCode": "0", + "admin": "80____" + } + }, + { + "name": "ICE 521", + "number": "521", + "icoX": 0, + "cls": 1, + "oprX": 0, + "prodCtx": { + "name": "ICE 521", + "num": "521", + "matchId": "41", + "catOut": "ICE", + "catOutS": "ICE", + "catOutL": "Intercity-Express", + "catIn": "ICE", + "catCode": "0", + "admin": "80____" + } + }, + { + "name": "ICE 523", + "number": "523", + "icoX": 0, + "cls": 1, + "oprX": 0, + "prodCtx": { + "name": "ICE 523", + "num": "523", + "matchId": "41", + "catOut": "ICE", + "catOutS": "ICE", + "catOutL": "Intercity-Express", + "catIn": "ICE", + "catCode": "0", + "admin": "80____" + } + } + ], + "polyL": [], + "layerL": [ + { + "id": "standard", + "name": "standard", + "index": 0, + "annoCnt": 0 + } + ], + "crdSysL": [ + { + "id": "standard", + "index": 0, + "type": "WGS84", + "dim": 3 + } + ], + "opL": [ + { + "name": "DB Fernverkehr AG", + "icoX": 1 + } + ], + "remL": [ + { + "type": "A", + "code": "CK", + "prio": 200, + "icoX": 2, + "txtN": "Komfort Check-in möglich (Infos unter bahn.de/kci)" + }, + { + "type": "A", + "code": "Q1", + "prio": 1, + "icoX": 2, + "txtN": "From Köln Hbf within 3min by S, RB, RE during the day approx. all 5min" + } + ], + "icoL": [ + { + "res": "ICE" + }, + { + "res": "D", + "txt": "DB Fernverkehr AG" + }, + { + "res": "attr_info" + }, + { + "res": "DEVI" + } + ] + }, + "outConL": [ + { + "cid": "C-0", + "date": "20200411", + "dur": "034000", + "chg": 0, + "sDays": { + "sDaysR": "Mo - Sa", + "sDaysI": "not 13., 27. Apr, 11., 12., 25. May, 1. Jun", + "sDaysB": "7ECDBBF7EFDFBF7EFDFBF7EFDFBF7E7DF9F7E3DF9F3EFDFBF7EFDFBF7EFDFBF7EFDFBF7EFDFBF7EFDFBF7EFDFBF0" + }, + "dep": { + "locX": 0, + "idx": 0, + "dProdX": 0, + "dPlatfS": "4 A-C", + "dInR": true, + "dTimeS": "031900", + "dProgType": "PROGNOSED", + "dTZOffset": 120, + "type": "N" + }, + "arr": { + "locX": 1, + "idx": 9, + "aPlatfS": "9", + "aOutR": true, + "aTimeS": "065900", + "aProgType": "PROGNOSED", + "aTZOffset": 120, + "type": "N" + }, + "secL": [ + { + "type": "JNY", + "icoX": 0, + "dep": { + "locX": 0, + "idx": 0, + "dProdX": 0, + "dPlatfS": "4 A-C", + "dInR": true, + "dTimeS": "031900", + "dProgType": "PROGNOSED", + "dTrnCmpSX": { + "tcM": 1 + }, + "dTZOffset": 120, + "type": "N" + }, + "arr": { + "locX": 1, + "idx": 9, + "aPlatfS": "9", + "aOutR": true, + "aTimeS": "065900", + "aProgType": "PROGNOSED", + "aTZOffset": 120, + "type": "N" + }, + "jny": { + "jid": "1|304103|0|80|11042020", + "prodX": 0, + "dirTxt": "München Hbf", + "status": "P", + "isRchbl": true, + "ctxRecon": "T$A=1@O=Köln Hbf@L=8000207@a=128@$A=1@O=Nürnberg Hbf@L=8000284@a=128@$202004110319$202004110659$ICE 827$$1$", + "msgL": [ + { + "type": "REM", + "remX": 0, + "fLocX": 0, + "tLocX": 1, + "fIdx": 0, + "tIdx": 9, + "tagL": [ + "RES_JNY_DTL" + ] + } + ], + "subscr": "F" + }, + "resState": "N", + "resRecommendation": "N" + } + ], + "ctxRecon": "¶HKI¶T$A=1@O=Köln Hbf@L=8000207@a=128@$A=1@O=Nürnberg Hbf@L=8000284@a=128@$202004110319$202004110659$ICE 827$$1$", + "trfRes": { + "statusCode": "OK", + "fareSetL": [ + { + "fareL": [ + { + "price": { "amount": 7790 }, + "isFromPrice": true, + "isBookable": true, + "isUpsell": false, + "targetCtx": "D", + "buttonText": "Continue to booking" + } + ] + } + ] + }, + "conSubscr": "F", + "resState": "N", + "resRecommendation": "N", + "recState": "U", + "sotRating": 0, + "isSotCon": false, + "showARSLink": false, + "sotCtxt": { + "cnLocX": 0, + "calcDate": "20200410", + "jid": "1|304103|0|80|-1", + "locMode": "FROM_START", + "pLocX": 0, + "reqMode": "UNKNOWN", + "sectX": 0, + "calcTime": "203323" + }, + "cksum": "2981a370_3" + }, + { + "cid": "C-1", + "date": "20200411", + "dur": "033700", + "chg": 0, + "sDays": { + "sDaysR": "daily", + "sDaysI": "not 27. Apr, 25. May, 7. Jun", + "sDaysB": "7FFFFFFFFFFFFFFFFFFFE7CF9FFFFFFFFDFFFFFFDFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0" + }, + "dep": { + "locX": 0, + "idx": 0, + "dProdX": 1, + "dPlatfS": "5 A-C", + "dInR": true, + "dTimeS": "042200", + "dProgType": "PROGNOSED", + "dTZOffset": 120, + "type": "N" + }, + "arr": { + "locX": 1, + "idx": 9, + "aPlatfS": "9", + "aOutR": true, + "aTimeS": "075900", + "aProgType": "PROGNOSED", + "aTZOffset": 120, + "type": "N" + }, + "secL": [ + { + "type": "JNY", + "icoX": 0, + "dep": { + "locX": 0, + "idx": 0, + "dProdX": 1, + "dPlatfS": "5 A-C", + "dInR": true, + "dTimeS": "042200", + "dProgType": "PROGNOSED", + "dTZOffset": 120, + "type": "N" + }, + "arr": { + "locX": 1, + "idx": 9, + "aPlatfS": "9", + "aOutR": true, + "aTimeS": "075900", + "aProgType": "PROGNOSED", + "aTZOffset": 120, + "type": "N" + }, + "jny": { + "jid": "1|300959|0|80|11042020", + "prodX": 1, + "dirTxt": "München Hbf", + "status": "P", + "isRchbl": true, + "ctxRecon": "T$A=1@O=Köln Hbf@L=8000207@a=128@$A=1@O=Nürnberg Hbf@L=8000284@a=128@$202004110422$202004110759$ICE 521$$1$", + "msgL": [ + { + "type": "REM", + "remX": 0, + "fLocX": 0, + "tLocX": 1, + "fIdx": 0, + "tIdx": 9, + "tagL": [ + "RES_JNY_DTL" + ] + } + ], + "subscr": "F" + }, + "resState": "N", + "resRecommendation": "N" + } + ], + "ctxRecon": "¶HKI¶T$A=1@O=Köln Hbf@L=8000207@a=128@$A=1@O=Nürnberg Hbf@L=8000284@a=128@$202004110422$202004110759$ICE 521$$1$", + "trfRes": { + "statusCode": "OK", + "fareSetL": [ + { + "fareL": [ + { + "price": { "amount": 4990 }, + "isFromPrice": true, + "isBookable": true, + "isUpsell": false, + "targetCtx": "D", + "buttonText": "Continue to booking" + } + ] + } + ] + }, + "conSubscr": "F", + "resState": "N", + "resRecommendation": "N", + "recState": "U", + "sotRating": 0, + "isSotCon": false, + "showARSLink": false, + "sotCtxt": { + "cnLocX": 0, + "calcDate": "20200410", + "jid": "1|300959|0|80|-1", + "locMode": "FROM_START", + "pLocX": 0, + "reqMode": "UNKNOWN", + "sectX": 0, + "calcTime": "203323" + }, + "cksum": "68a08a04_3" + }, + { + "cid": "C-2", + "date": "20200411", + "dur": "034100", + "chg": 0, + "sDays": { + "sDaysR": "Mo - Sa", + "sDaysI": "not 13. Apr, 1. Jun", + "sDaysB": "7ECDBBF7EFDFBF7EFDFBE7CF9FBF7E7DFBF7EFDFBF3EFDFBF7EFDFBF7EFDFBF7EFDFBF7EFDFBF7EFDFBF7EFDFBF0" + }, + "dep": { + "locX": 0, + "dInR": true, + "dTimeS": "051700", + "dTZOffset": 120, + "type": "N" + }, + "arr": { + "locX": 1, + "idx": 14, + "aPlatfS": "9", + "aOutR": true, + "aTimeS": "090100", + "aProgType": "PROGNOSED", + "aTZOffset": 120, + "type": "N" + }, + "secL": [ + { + "type": "DEVI", + "icoX": 3, + "dep": { + "locX": 0, + "dInR": true, + "dTimeS": "051700", + "dTZOffset": 120, + "type": "N" + }, + "arr": { + "locX": 2, + "aOutR": true, + "aTimeS": "052000", + "aTZOffset": 120, + "type": "N" + }, + "resState": "N", + "resRecommendation": "N" + }, + { + "type": "JNY", + "icoX": 0, + "dep": { + "locX": 2, + "idx": 5, + "dProdX": 2, + "dPlatfS": "11", + "dInR": true, + "dTimeS": "052000", + "dProgType": "PROGNOSED", + "dTZOffset": 120, + "type": "N" + }, + "arr": { + "locX": 1, + "idx": 14, + "aPlatfS": "9", + "aOutR": true, + "aTimeS": "090100", + "aProgType": "PROGNOSED", + "aTZOffset": 120, + "type": "N" + }, + "jny": { + "jid": "1|301001|0|80|11042020", + "prodX": 2, + "dirTxt": "München Hbf", + "status": "P", + "isRchbl": true, + "ctxRecon": "T$A=1@O=Köln Messe/Deutz Gl.11-12@L=8073368@a=128@$A=1@O=Nürnberg Hbf@L=8000284@a=128@$202004110520$202004110901$ICE 523$$1$", + "msgL": [ + { + "type": "REM", + "remX": 0, + "fLocX": 2, + "tLocX": 1, + "fIdx": 5, + "tIdx": 14, + "tagL": [ + "RES_JNY_DTL" + ] + } + ], + "subscr": "F" + }, + "resState": "N", + "resRecommendation": "N" + } + ], + "ctxRecon": "¶HKI¶D$A=1@O=Köln Hbf@L=8000207@a=128@$A=1@O=Köln Messe/Deutz Gl.11-12@L=8073368@a=128@$202004110517$202004110520$$$1$§T$A=1@O=Köln Messe/Deutz Gl.11-12@L=8073368@a=128@$A=1@O=Nürnberg Hbf@L=8000284@a=128@$202004110520$202004110901$ICE 523$$1$", + "trfRes": { + "statusCode": "OK", + "fareSetL": [ + { + "fareL": [ + { + "price": { "amount": 4990 }, + "isFromPrice": true, + "isBookable": true, + "isUpsell": false, + "targetCtx": "D", + "buttonText": "Continue to booking" + } + ] + } + ] + }, + "conSubscr": "F", + "resState": "N", + "resRecommendation": "N", + "recState": "U", + "sotRating": 0, + "isSotCon": false, + "showARSLink": false, + "sotCtxt": { + "cnLocX": 2, + "calcDate": "20200410", + "jid": "1|301001|0|80|-1", + "locMode": "FROM_START", + "pLocX": 2, + "reqMode": "UNKNOWN", + "sectX": 1, + "calcTime": "203323" + }, + "cksum": "faac8940_3" + } + ], + "outCtxScrB": "1|OB|MT#11#172999#172999#173219#173219#0#0#5#172589#1#-2147482606#0#1#2|PDH#fbb83c5f2c5e367d766f8d0b4cc73c0a|RD#10042020|RT#202923", + "outCtxScrF": "1|OF|MT#11#173120#173120#173341#173341#0#0#485#173063#3#-2147482606#0#1#2|PDH#fbb83c5f2c5e367d766f8d0b4cc73c0a|RD#10042020|RT#202923", + "retCtxScrF": "1|OF|MT#11#173120#173120#173341#173341#0#0#485#173063#3#-2147482606#0#1#2|PDH#fbb83c5f2c5e367d766f8d0b4cc73c0a|RD#10042020|RT#202923", + "fpB": "20191215", + "fpE": "20201212", + "bfATS": -1, + "bfIOSTS": -1, + "planrtTS": "1586543549" +} +const r2 : RawResult = +{ + "common": { + "locL": [ + { + "lid": "A=1@O=München-Mittersendling@X=11536351@Y=48107823@U=80@L=8004154@", + "type": "S", + "name": "München-Mittersendling", + "icoX": 0, + "extId": "8004154", + "state": "F", + "crd": { + "x": 11536306, + "y": 48107418, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 24, + "pRefL": [ + 0, + 1, + 2, + 3, + 4, + 5 + ] + }, + { + "lid": "A=1@O=Karl-Theodor-Straße, München@X=11574043@Y=48166918@U=80@L=621790@", + "type": "S", + "name": "Karl-Theodor-Straße, München", + "icoX": 4, + "extId": "621790", + "state": "F", + "crd": { + "x": 11574043, + "y": 48166918, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 256, + "pRefL": [ + 6, + 7 + ], + "isMainMast": true + }, + { + "lid": "A=1@O=Thalkirchen (Tierpark), München@X=11546015@Y=48102708@U=80@L=625236@", + "type": "S", + "name": "Thalkirchen (Tierpark), München", + "icoX": 5, + "extId": "625236", + "state": "F", + "crd": { + "x": 11546015, + "y": 48102708, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 160, + "pRefL": [ + 8, + 9 + ], + "mMastLocX": 3 + }, + { + "lid": "A=1@O=Thalkirchen (Tierpark), München@X=11546680@Y=48101009@U=80@L=625242@", + "type": "S", + "name": "Thalkirchen (Tierpark), München", + "icoX": 5, + "extId": "625242", + "state": "F", + "crd": { + "x": 11546680, + "y": 48101009, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 160, + "pRefL": [ + 8 + ] + }, + { + "lid": "A=1@O=Bonner Platz, München@X=11578151@Y=48166702@U=80@L=624333@", + "type": "S", + "name": "Bonner Platz, München", + "icoX": 6, + "extId": "624333", + "state": "F", + "crd": { + "x": 11578151, + "y": 48166702, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 128, + "pRefL": [ + 9 + ], + "mMastLocX": 5 + }, + { + "lid": "A=1@O=Bonner Platz, München@X=11579347@Y=48167035@U=80@L=790754@", + "type": "S", + "name": "Bonner Platz, München", + "icoX": 8, + "extId": "790754", + "state": "F", + "crd": { + "x": 11579347, + "y": 48167035, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 128, + "isMainMast": true + }, + { + "lid": "A=1@O=Brudermühlstraße, München@X=11548721@Y=48112596@U=80@L=624342@", + "type": "S", + "name": "Brudermühlstraße, München", + "icoX": 5, + "extId": "624342", + "state": "F", + "crd": { + "x": 11548721, + "y": 48112596, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 160, + "mMastLocX": 7 + }, + { + "lid": "A=1@O=Brudermühlstraße, München@X=11548235@Y=48112209@U=80@L=624345@", + "type": "S", + "name": "Brudermühlstraße, München", + "icoX": 5, + "extId": "624345", + "state": "F", + "crd": { + "x": 11548235, + "y": 48112209, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 160, + "isMainMast": true + }, + { + "lid": "A=1@O=Implerstraße, München@X=11548433@Y=48120138@U=80@L=624684@", + "type": "S", + "name": "Implerstraße, München", + "icoX": 5, + "extId": "624684", + "state": "F", + "crd": { + "x": 11548433, + "y": 48120138, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 160, + "mMastLocX": 9 + }, + { + "lid": "A=1@O=Implerstraße, München@X=11548855@Y=48119392@U=80@L=624691@", + "type": "S", + "name": "Implerstraße, München", + "icoX": 5, + "extId": "624691", + "state": "F", + "crd": { + "x": 11548855, + "y": 48119392, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 160 + }, + { + "lid": "A=1@O=Poccistraße, München@X=11550357@Y=48125513@U=80@L=625095@", + "type": "S", + "name": "Poccistraße, München", + "icoX": 5, + "extId": "625095", + "state": "F", + "crd": { + "x": 11550357, + "y": 48125513, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 160, + "isMainMast": true + }, + { + "lid": "A=1@O=Goetheplatz, München@X=11557422@Y=48129064@U=80@L=624535@", + "type": "S", + "name": "Goetheplatz, München", + "icoX": 5, + "extId": "624535", + "state": "F", + "crd": { + "x": 11557422, + "y": 48129064, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 160, + "isMainMast": true + }, + { + "lid": "A=1@O=Sendlinger Tor, München@X=11566744@Y=48133406@U=80@L=625176@", + "type": "S", + "name": "Sendlinger Tor, München", + "icoX": 5, + "extId": "625176", + "state": "F", + "crd": { + "x": 11566744, + "y": 48133406, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 416, + "isMainMast": true + }, + { + "lid": "A=1@O=Marienplatz, München@X=11576596@Y=48137829@U=80@L=624885@", + "type": "S", + "name": "Marienplatz, München", + "icoX": 0, + "extId": "624885", + "state": "F", + "crd": { + "x": 11576596, + "y": 48137829, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 184, + "mMastLocX": 14 + }, + { + "lid": "A=1@O=München Marienplatz@X=11575383@Y=48137047@U=80@L=8004135@", + "type": "S", + "name": "München Marienplatz", + "icoX": 0, + "extId": "8004135", + "state": "F", + "crd": { + "x": 11575383, + "y": 48137047, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 184 + }, + { + "lid": "A=1@O=Odeonsplatz, München@X=11577980@Y=48143411@U=80@L=638143@", + "type": "S", + "name": "Odeonsplatz, München", + "icoX": 0, + "extId": "638143", + "state": "F", + "crd": { + "x": 11577980, + "y": 48143411, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 168, + "mMastLocX": 16 + }, + { + "lid": "A=1@O=München Odeonsplatz@X=11577819@Y=48142943@U=80@L=8070914@", + "type": "S", + "name": "München Odeonsplatz", + "icoX": 0, + "extId": "8070914", + "state": "F", + "crd": { + "x": 11577819, + "y": 48142943, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 168 + }, + { + "lid": "A=1@O=Universität, München@X=11581001@Y=48150063@U=80@L=638611@", + "type": "S", + "name": "Universität, München", + "icoX": 5, + "extId": "638611", + "state": "F", + "crd": { + "x": 11581001, + "y": 48150063, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 160, + "mMastLocX": 18 + }, + { + "lid": "A=1@O=Universität, München@X=11580048@Y=48148283@U=80@L=625286@", + "type": "S", + "name": "Universität, München", + "icoX": 5, + "extId": "625286", + "state": "F", + "crd": { + "x": 11580048, + "y": 48148283, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 160, + "isMainMast": true + }, + { + "lid": "A=1@O=Giselastraße, München@X=11584003@Y=48156517@U=80@L=624521@", + "type": "S", + "name": "Giselastraße, München", + "icoX": 5, + "extId": "624521", + "state": "F", + "crd": { + "x": 11584003, + "y": 48156517, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 160, + "mMastLocX": 20 + }, + { + "lid": "A=1@O=Giselastraße, München@X=11584803@Y=48157236@U=80@L=624526@", + "type": "S", + "name": "Giselastraße, München", + "icoX": 5, + "extId": "624526", + "state": "F", + "crd": { + "x": 11584803, + "y": 48157236, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 160, + "isMainMast": true + }, + { + "lid": "A=1@O=Münchner Freiheit, München@X=11586331@Y=48161839@U=80@L=624950@", + "type": "S", + "name": "Münchner Freiheit, München", + "icoX": 5, + "extId": "624950", + "state": "F", + "crd": { + "x": 11586331, + "y": 48161839, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 416, + "isMainMast": true + }, + { + "lid": "A=1@O=Adunistraße, München@X=11534356@Y=48109297@U=80@L=790090@", + "type": "S", + "name": "Adunistraße, München", + "icoX": 5, + "extId": "790090", + "state": "F", + "crd": { + "x": 11534356, + "y": 48109297, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 32, + "pRefL": [ + 13, + 14 + ], + "isMainMast": true + }, + { + "lid": "A=1@O=Pündterplatz, München@X=11576866@Y=48162603@U=80@L=622912@", + "type": "S", + "name": "Pündterplatz, München", + "icoX": 5, + "extId": "622912", + "state": "F", + "crd": { + "x": 11576866, + "y": 48162603, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 32, + "pRefL": [ + 13, + 16, + 17 + ] + }, + { + "lid": "A=1@O=Johann-Clanze-Straße, München@X=11533906@Y=48113054@U=80@L=790091@", + "type": "S", + "name": "Johann-Clanze-Straße, München", + "icoX": 5, + "extId": "790091", + "state": "F", + "crd": { + "x": 11533906, + "y": 48113054, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 32, + "mMastLocX": 25 + }, + { + "lid": "A=1@O=Johann-Clanze-Straße, München@X=11533142@Y=48112830@U=80@L=790309@", + "type": "S", + "name": "Johann-Clanze-Straße, München", + "icoX": 5, + "extId": "790309", + "state": "F", + "crd": { + "x": 11533142, + "y": 48112830, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 32, + "isMainMast": true + }, + { + "lid": "A=1@O=Harras, München@X=11536828@Y=48116785@U=80@L=623510@", + "type": "S", + "name": "Harras, München", + "icoX": 0, + "extId": "623510", + "state": "F", + "crd": { + "x": 11536828, + "y": 48116785, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 184, + "mMastLocX": 27 + }, + { + "lid": "A=1@O=München Harras@X=11536315@Y=48117747@U=80@L=8004130@", + "type": "S", + "name": "München Harras", + "icoX": 0, + "extId": "8004130", + "state": "F", + "crd": { + "x": 11536315, + "y": 48117747, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 184 + }, + { + "lid": "A=1@O=Am Harras, München@X=11540190@Y=48117198@U=80@L=790082@", + "type": "S", + "name": "Am Harras, München", + "icoX": 5, + "extId": "790082", + "state": "F", + "crd": { + "x": 11540190, + "y": 48117198, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 32, + "mMastLocX": 29 + }, + { + "lid": "A=1@O=Am Harras, München@X=11540046@Y=48116263@U=80@L=626017@", + "type": "S", + "name": "Am Harras, München", + "icoX": 5, + "extId": "626017", + "state": "F", + "crd": { + "x": 11540046, + "y": 48116263, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 32, + "isMainMast": true + }, + { + "lid": "A=1@O=Margaretenplatz, München@X=11540873@Y=48120093@U=80@L=790083@", + "type": "S", + "name": "Margaretenplatz, München", + "icoX": 5, + "extId": "790083", + "state": "F", + "crd": { + "x": 11540873, + "y": 48120093, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 32, + "mMastLocX": 31 + }, + { + "lid": "A=1@O=Margaretenplatz, München@X=11540567@Y=48119976@U=80@L=790074@", + "type": "S", + "name": "Margaretenplatz, München", + "icoX": 5, + "extId": "790074", + "state": "F", + "crd": { + "x": 11540567, + "y": 48119976, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 32, + "isMainMast": true + }, + { + "lid": "A=1@O=Sendlinger Kirche, München@X=11541224@Y=48121900@U=80@L=790084@", + "type": "S", + "name": "Sendlinger Kirche, München", + "icoX": 5, + "extId": "790084", + "state": "F", + "crd": { + "x": 11541224, + "y": 48121900, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 32, + "mMastLocX": 33 + }, + { + "lid": "A=1@O=Sendlinger Kirche, München@X=11541044@Y=48122080@U=80@L=790073@", + "type": "S", + "name": "Sendlinger Kirche, München", + "icoX": 5, + "extId": "790073", + "state": "F", + "crd": { + "x": 11541044, + "y": 48122080, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 32, + "isMainMast": true + }, + { + "lid": "A=1@O=Herzog-Ernst-Platz, München@X=11540648@Y=48125720@U=80@L=626031@", + "type": "S", + "name": "Herzog-Ernst-Platz, München", + "icoX": 5, + "extId": "626031", + "state": "F", + "crd": { + "x": 11540648, + "y": 48125720, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 32, + "isMainMast": true + }, + { + "lid": "A=1@O=Ganghoferbrücke, München@X=11539111@Y=48127931@U=80@L=621081@", + "type": "S", + "name": "Ganghoferbrücke, München", + "icoX": 5, + "extId": "621081", + "state": "F", + "crd": { + "x": 11539111, + "y": 48127931, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 32 + }, + { + "lid": "A=1@O=Ridlerstraße, München@X=11539390@Y=48131024@U=80@L=639101@", + "type": "S", + "name": "Ridlerstraße, München", + "icoX": 5, + "extId": "639101", + "state": "F", + "crd": { + "x": 11539390, + "y": 48131024, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 32, + "mMastLocX": 37 + }, + { + "lid": "A=1@O=Ridlerstraße, München@X=11539246@Y=48130763@U=80@L=622234@", + "type": "S", + "name": "Ridlerstraße, München", + "icoX": 5, + "extId": "622234", + "state": "F", + "crd": { + "x": 11539246, + "y": 48130763, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 32, + "isMainMast": true + }, + { + "lid": "A=1@O=Schwanthalerhöhe, München@X=11539830@Y=48133316@U=80@L=790085@", + "type": "S", + "name": "Schwanthalerhöhe, München", + "icoX": 5, + "extId": "790085", + "state": "F", + "crd": { + "x": 11539830, + "y": 48133316, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 160, + "mMastLocX": 39 + }, + { + "lid": "A=1@O=Schwanthalerhöhe, München@X=11541008@Y=48133765@U=80@L=625167@", + "type": "S", + "name": "Schwanthalerhöhe, München", + "icoX": 9, + "extId": "625167", + "state": "F", + "crd": { + "x": 11541008, + "y": 48133765, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 160, + "isMainMast": true + }, + { + "lid": "A=1@O=Bergmannstraße, München@X=11537403@Y=48134997@U=80@L=790086@", + "type": "S", + "name": "Bergmannstraße, München", + "icoX": 5, + "extId": "790086", + "state": "F", + "crd": { + "x": 11537403, + "y": 48134997, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 32, + "mMastLocX": 41 + }, + { + "lid": "A=1@O=Bergmannstraße, München@X=11537394@Y=48134862@U=80@L=790070@", + "type": "S", + "name": "Bergmannstraße, München", + "icoX": 5, + "extId": "790070", + "state": "F", + "crd": { + "x": 11537394, + "y": 48134862, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 32, + "isMainMast": true + }, + { + "lid": "A=1@O=Kazmairstraße, München@X=11534167@Y=48135258@U=80@L=625870@", + "type": "S", + "name": "Kazmairstraße, München", + "icoX": 5, + "extId": "625870", + "state": "F", + "crd": { + "x": 11534167, + "y": 48135258, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 32, + "isMainMast": true + }, + { + "lid": "A=1@O=Gollierplatz, München@X=11534311@Y=48136300@U=80@L=621250@", + "type": "S", + "name": "Gollierplatz, München", + "icoX": 5, + "extId": "621250", + "state": "F", + "crd": { + "x": 11534311, + "y": 48136300, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 32 + }, + { + "lid": "A=1@O=Trappentreustraße, München@X=11534805@Y=48139707@U=80@L=624105@", + "type": "S", + "name": "Trappentreustraße, München", + "icoX": 5, + "extId": "624105", + "state": "F", + "crd": { + "x": 11534805, + "y": 48139707, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 288, + "mMastLocX": 45 + }, + { + "lid": "A=1@O=Trappentreustraße, München@X=11533960@Y=48139438@U=80@L=625387@", + "type": "S", + "name": "Trappentreustraße, München", + "icoX": 5, + "extId": "625387", + "state": "F", + "crd": { + "x": 11533960, + "y": 48139438, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 288, + "isMainMast": true + }, + { + "lid": "A=1@O=Donnersbergerbrücke, München@X=11534724@Y=48142656@U=80@L=624401@", + "type": "S", + "name": "Donnersbergerbrücke, München", + "icoX": 0, + "extId": "624401", + "state": "F", + "crd": { + "x": 11534724, + "y": 48142656, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 56, + "mMastLocX": 47 + }, + { + "lid": "A=1@O=München Donnersbergerbrücke@X=11536540@Y=48142620@U=80@L=8004128@", + "type": "S", + "name": "München Donnersbergerbrücke", + "icoX": 0, + "extId": "8004128", + "state": "F", + "crd": { + "x": 11536540, + "y": 48142620, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 56 + }, + { + "lid": "A=1@O=Donnersbergerstraße, München@X=11536612@Y=48146728@U=80@L=624410@", + "type": "S", + "name": "Donnersbergerstraße, München", + "icoX": 5, + "extId": "624410", + "state": "F", + "crd": { + "x": 11536612, + "y": 48146728, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 288, + "isMainMast": true + }, + { + "lid": "A=1@O=Schlörstraße, München@X=11537106@Y=48150081@U=80@L=623072@", + "type": "S", + "name": "Schlörstraße, München", + "icoX": 5, + "extId": "623072", + "state": "F", + "crd": { + "x": 11537106, + "y": 48150081, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 32 + }, + { + "lid": "A=1@O=Landshuter Allee, München@X=11536261@Y=48152005@U=80@L=626277@", + "type": "S", + "name": "Landshuter Allee, München", + "icoX": 5, + "extId": "626277", + "state": "F", + "crd": { + "x": 11536261, + "y": 48152005, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 32, + "mMastLocX": 51 + }, + { + "lid": "A=1@O=Landshuter Allee, München@X=11536675@Y=48151474@U=80@L=626276@", + "type": "S", + "name": "Landshuter Allee, München", + "icoX": 5, + "extId": "626276", + "state": "F", + "crd": { + "x": 11536675, + "y": 48151474, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 32, + "isMainMast": true + }, + { + "lid": "A=1@O=Rotkreuzplatz, München@X=11534248@Y=48153164@U=80@L=625145@", + "type": "S", + "name": "Rotkreuzplatz, München", + "icoX": 5, + "extId": "625145", + "state": "F", + "crd": { + "x": 11534248, + "y": 48153164, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 416, + "mMastLocX": 53 + }, + { + "lid": "A=1@O=Rotkreuzplatz, München@X=11533978@Y=48152841@U=80@L=625146@", + "type": "S", + "name": "Rotkreuzplatz, München", + "icoX": 5, + "extId": "625146", + "state": "F", + "crd": { + "x": 11533978, + "y": 48152841, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 416, + "isMainMast": true + }, + { + "lid": "A=1@O=Albrechtstraße, München@X=11540217@Y=48155546@U=80@L=620037@", + "type": "S", + "name": "Albrechtstraße, München", + "icoX": 5, + "extId": "620037", + "state": "F", + "crd": { + "x": 11540217, + "y": 48155546, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 288 + }, + { + "lid": "A=1@O=Fasaneriestraße, München@X=11543300@Y=48157182@U=80@L=638962@", + "type": "S", + "name": "Fasaneriestraße, München", + "icoX": 5, + "extId": "638962", + "state": "F", + "crd": { + "x": 11543300, + "y": 48157182, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 288, + "mMastLocX": 56 + }, + { + "lid": "A=1@O=Fasaneriestraße, München@X=11543767@Y=48157524@U=80@L=620829@", + "type": "S", + "name": "Fasaneriestraße, München", + "icoX": 5, + "extId": "620829", + "state": "F", + "crd": { + "x": 11543767, + "y": 48157524, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 288 + }, + { + "lid": "A=1@O=Leonrodplatz, München@X=11547067@Y=48159277@U=80@L=624832@", + "type": "S", + "name": "Leonrodplatz, München", + "icoX": 5, + "extId": "624832", + "state": "F", + "crd": { + "x": 11547067, + "y": 48159277, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 288, + "isMainMast": true + }, + { + "lid": "A=1@O=Infanteriestraße, München@X=11553611@Y=48161443@U=80@L=621695@", + "type": "S", + "name": "Infanteriestraße, München", + "icoX": 5, + "extId": "621695", + "state": "F", + "crd": { + "x": 11553611, + "y": 48161443, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 288 + }, + { + "lid": "A=1@O=Barbarastraße, München@X=11557602@Y=48161380@U=80@L=639100@", + "type": "S", + "name": "Barbarastraße, München", + "icoX": 5, + "extId": "639100", + "state": "F", + "crd": { + "x": 11557602, + "y": 48161380, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 288, + "mMastLocX": 60 + }, + { + "lid": "A=1@O=Barbarastraße, München@X=11557602@Y=48161470@U=80@L=620282@", + "type": "S", + "name": "Barbarastraße, München", + "icoX": 5, + "extId": "620282", + "state": "F", + "crd": { + "x": 11557602, + "y": 48161470, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 288, + "isMainMast": true + }, + { + "lid": "A=1@O=Nordbad, München@X=11564317@Y=48160877@U=80@L=625001@", + "type": "S", + "name": "Nordbad, München", + "icoX": 5, + "extId": "625001", + "state": "F", + "crd": { + "x": 11564317, + "y": 48160877, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 288, + "mMastLocX": 62 + }, + { + "lid": "A=1@O=Nordbad, München@X=11563526@Y=48161254@U=80@L=625002@", + "type": "S", + "name": "Nordbad, München", + "icoX": 4, + "extId": "625002", + "state": "F", + "crd": { + "x": 11563526, + "y": 48161254, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 288, + "isMainMast": true + }, + { + "lid": "A=1@O=Hohenzollernplatz, München@X=11568128@Y=48161174@U=80@L=638868@", + "type": "S", + "name": "Hohenzollernplatz, München", + "icoX": 5, + "extId": "638868", + "state": "F", + "crd": { + "x": 11568128, + "y": 48161174, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 416, + "mMastLocX": 64 + }, + { + "lid": "A=1@O=Hohenzollernplatz, München@X=11568766@Y=48162351@U=80@L=624663@", + "type": "S", + "name": "Hohenzollernplatz, München", + "icoX": 10, + "extId": "624663", + "state": "F", + "crd": { + "x": 11568766, + "y": 48162351, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 416, + "isMainMast": true + }, + { + "lid": "A=1@O=Kurfürstenplatz, München@X=11574070@Y=48160401@U=80@L=624793@", + "type": "S", + "name": "Kurfürstenplatz, München", + "icoX": 5, + "extId": "624793", + "state": "F", + "crd": { + "x": 11574070, + "y": 48160401, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 288, + "mMastLocX": 66 + }, + { + "lid": "A=1@O=Kurfürstenplatz, München@X=11574088@Y=48160508@U=80@L=624795@", + "type": "S", + "name": "Kurfürstenplatz, München", + "icoX": 5, + "extId": "624795", + "state": "F", + "crd": { + "x": 11574088, + "y": 48160508, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 288, + "isMainMast": true + }, + { + "lid": "A=1@O=München Siemenswerke@X=11532801@Y=48094501@U=80@L=8004137@", + "type": "S", + "name": "München Siemenswerke", + "icoX": 0, + "extId": "8004137", + "state": "F", + "crd": { + "x": 11532810, + "y": 48094492, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 56, + "pRefL": [ + 20, + 0, + 1, + 2, + 3, + 4, + 5, + 21 + ] + }, + { + "lid": "A=1@O=Obersendling, München@X=11536261@Y=48098357@U=80@L=625016@", + "type": "S", + "name": "Obersendling, München", + "icoX": 5, + "extId": "625016", + "state": "F", + "crd": { + "x": 11536261, + "y": 48098357, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 160, + "pRefL": [ + 23, + 21, + 9 + ], + "mMastLocX": 69 + }, + { + "lid": "A=1@O=Obersendling, München@X=11538023@Y=48098627@U=80@L=625021@", + "type": "S", + "name": "Obersendling, München", + "icoX": 5, + "extId": "625021", + "state": "F", + "crd": { + "x": 11538023, + "y": 48098627, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 160, + "pRefL": [ + 23, + 21 + ], + "isMainMast": true + }, + { + "lid": "A=1@O=Karl-Theodor-Straße, München@X=11574034@Y=48166900@U=80@L=638842@", + "type": "S", + "name": "Karl-Theodor-Straße, München", + "icoX": 4, + "extId": "638842", + "state": "F", + "crd": { + "x": 11574034, + "y": 48166900, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 256, + "pRefL": [ + 6, + 7 + ], + "mMastLocX": 1 + }, + { + "lid": "A=1@O=Harras, München@X=11537907@Y=48116893@U=80@L=624602@", + "type": "S", + "name": "Harras, München", + "icoX": 0, + "extId": "624602", + "state": "F", + "crd": { + "x": 11537907, + "y": 48116893, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 184, + "pRefL": [ + 20, + 0, + 1, + 3, + 4, + 13, + 31, + 32, + 33, + 23, + 34, + 14, + 35, + 36 + ], + "mMastLocX": 27 + }, + { + "lid": "A=1@O=Sendlinger Tor, München@X=11566142@Y=48133703@U=80@L=624625@", + "type": "S", + "name": "Sendlinger Tor, München", + "icoX": 5, + "extId": "624625", + "state": "F", + "crd": { + "x": 11566142, + "y": 48133703, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 416, + "pRefL": [ + 39, + 40, + 34, + 14, + 41, + 42, + 43, + 9, + 36, + 44, + 45, + 46, + 47, + 48, + 49, + 7, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57 + ], + "mMastLocX": 12 + }, + { + "lid": "A=1@O=Karlsplatz (Stachus), München@X=11565360@Y=48138638@U=80@L=624746@", + "type": "S", + "name": "Karlsplatz (Stachus), München", + "icoX": 0, + "extId": "624746", + "state": "F", + "crd": { + "x": 11565360, + "y": 48138638, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 440, + "pRefL": [ + 2, + 59, + 60, + 61, + 3, + 62, + 63, + 4, + 64, + 65, + 66, + 34, + 14, + 41, + 67, + 68, + 46, + 47, + 48, + 69, + 70, + 71, + 49, + 7, + 50, + 51, + 52, + 72, + 53, + 54, + 55, + 56, + 73, + 57 + ], + "mMastLocX": 74 + }, + { + "lid": "A=1@O=München Karlsplatz@X=11565620@Y=48139456@U=80@L=8004132@", + "type": "S", + "name": "München Karlsplatz", + "icoX": 0, + "extId": "8004132", + "state": "F", + "crd": { + "x": 11565620, + "y": 48139456, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 440, + "pRefL": [ + 2, + 59, + 60, + 61, + 3, + 62, + 63, + 4, + 64 + ] + }, + { + "lid": "A=1@O=Karlsplatz (Stachus), München@X=11565189@Y=48138503@U=80@L=624744@", + "type": "S", + "name": "Karlsplatz (Stachus), München", + "icoX": 0, + "extId": "624744", + "state": "F", + "crd": { + "x": 11565189, + "y": 48138503, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 440, + "pRefL": [ + 2, + 59, + 60, + 61, + 3, + 62, + 63, + 4, + 64, + 65, + 66, + 34, + 14, + 41, + 67, + 68, + 46, + 47, + 48, + 69, + 70, + 71, + 49, + 7, + 50, + 51, + 52, + 72, + 53, + 54, + 55, + 56, + 73, + 57 + ], + "mMastLocX": 74 + }, + { + "lid": "A=1@O=Ottostraße, München@X=11567778@Y=48142350@U=80@L=637392@", + "type": "S", + "name": "Ottostraße, München", + "icoX": 4, + "extId": "637392", + "state": "F", + "crd": { + "x": 11567778, + "y": 48142350, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 256, + "mMastLocX": 77 + }, + { + "lid": "A=1@O=Ottostraße, München@X=11567877@Y=48142503@U=80@L=622657@", + "type": "S", + "name": "Ottostraße, München", + "icoX": 8, + "extId": "622657", + "state": "F", + "crd": { + "x": 11567877, + "y": 48142503, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 256, + "isMainMast": true + }, + { + "lid": "A=1@O=Karolinenplatz, München@X=11569701@Y=48145550@U=80@L=637306@", + "type": "S", + "name": "Karolinenplatz, München", + "icoX": 4, + "extId": "637306", + "state": "F", + "crd": { + "x": 11569701, + "y": 48145550, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 256, + "mMastLocX": 79 + }, + { + "lid": "A=1@O=Karolinenplatz, München@X=11569854@Y=48145739@U=80@L=621834@", + "type": "S", + "name": "Karolinenplatz, München", + "icoX": 8, + "extId": "621834", + "state": "F", + "crd": { + "x": 11569854, + "y": 48145739, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 256, + "isMainMast": true + }, + { + "lid": "A=1@O=Pinakotheken, München@X=11571877@Y=48148706@U=80@L=622753@", + "type": "S", + "name": "Pinakotheken, München", + "icoX": 5, + "extId": "622753", + "state": "F", + "crd": { + "x": 11571877, + "y": 48148706, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 288, + "isMainMast": true + }, + { + "lid": "A=1@O=Schellingstraße, München@X=11573216@Y=48150809@U=80@L=625623@", + "type": "S", + "name": "Schellingstraße, München", + "icoX": 5, + "extId": "625623", + "state": "F", + "crd": { + "x": 11573216, + "y": 48150809, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 288, + "isMainMast": true + }, + { + "lid": "A=1@O=Nordendstraße, München@X=11575410@Y=48154872@U=80@L=638853@", + "type": "S", + "name": "Nordendstraße, München", + "icoX": 4, + "extId": "638853", + "state": "F", + "crd": { + "x": 11575410, + "y": 48154872, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 256, + "mMastLocX": 83 + }, + { + "lid": "A=1@O=Nordendstraße, München@X=11575445@Y=48154908@U=80@L=622468@", + "type": "S", + "name": "Nordendstraße, München", + "icoX": 8, + "extId": "622468", + "state": "F", + "crd": { + "x": 11575445, + "y": 48154908, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 256, + "isMainMast": true + }, + { + "lid": "A=1@O=Elisabethplatz, München@X=11575077@Y=48157452@U=80@L=638854@", + "type": "S", + "name": "Elisabethplatz, München", + "icoX": 4, + "extId": "638854", + "state": "F", + "crd": { + "x": 11575077, + "y": 48157452, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 256, + "mMastLocX": 85 + }, + { + "lid": "A=1@O=Elisabethplatz, München@X=11574852@Y=48157875@U=80@L=620696@", + "type": "S", + "name": "Elisabethplatz, München", + "icoX": 4, + "extId": "620696", + "state": "F", + "crd": { + "x": 11574852, + "y": 48157875, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 256 + }, + { + "lid": "A=1@O=Kurfürstenplatz, München@X=11574951@Y=48160014@U=80@L=636453@", + "type": "S", + "name": "Kurfürstenplatz, München", + "icoX": 5, + "extId": "636453", + "state": "F", + "crd": { + "x": 11574951, + "y": 48160014, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 288, + "mMastLocX": 66 + }, + { + "lid": "A=1@O=Clemensstraße, München@X=11574681@Y=48163268@U=80@L=620414@", + "type": "S", + "name": "Clemensstraße, München", + "icoX": 4, + "extId": "620414", + "state": "F", + "crd": { + "x": 11574681, + "y": 48163268, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 256 + }, + { + "lid": "A=1@O=München Hbf (tief)@X=11560496@Y=48141173@U=80@L=8098263@", + "type": "S", + "name": "München Hbf (tief)", + "icoX": 25, + "extId": "8098263", + "state": "F", + "crd": { + "x": 11560496, + "y": 48141173, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 959, + "pRefL": [ + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 20, + 0, + 1, + 87, + 88, + 2, + 89, + 90, + 59, + 60, + 61, + 3, + 62, + 63, + 4, + 64, + 91, + 92, + 93, + 65, + 66, + 94, + 95, + 42, + 43, + 67, + 68, + 44, + 45, + 46, + 96, + 48, + 69, + 70, + 71, + 50, + 53, + 54, + 55, + 73, + 97 + ], + "entry": true, + "mMastLocX": 89 + }, + { + "lid": "A=1@O=München Hbf@X=11558339@Y=48140229@U=80@L=8000261@", + "type": "S", + "name": "München Hbf", + "icoX": 25, + "extId": "8000261", + "state": "F", + "crd": { + "x": 11558339, + "y": 48140229, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 959, + "pRefL": [ + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 2, + 89, + 60, + 61, + 97 + ] + }, + { + "lid": "A=1@O=München Heimeranplatz@X=11531497@Y=48132965@U=80@L=8005419@", + "type": "S", + "name": "München Heimeranplatz", + "icoX": 0, + "extId": "8005419", + "state": "F", + "crd": { + "x": 11531497, + "y": 48132965, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 184 + }, + { + "lid": "A=1@O=München Hackerbrücke@X=11548568@Y=48141973@U=80@L=8004129@", + "type": "S", + "name": "München Hackerbrücke", + "icoX": 0, + "extId": "8004129", + "state": "F", + "crd": { + "x": 11548532, + "y": 48141919, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 312 + }, + { + "lid": "A=1@O=Hauptbahnhof, München@X=11561153@Y=48140049@U=80@L=624637@", + "type": "S", + "name": "Hauptbahnhof, München", + "icoX": 25, + "extId": "624637", + "state": "F", + "crd": { + "x": 11561153, + "y": 48140049, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 959, + "pRefL": [ + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 20, + 0, + 1, + 87, + 88, + 2, + 89, + 90, + 59, + 60, + 61, + 3, + 62, + 63, + 4, + 64, + 91, + 92, + 93, + 65, + 66, + 94, + 95, + 42, + 43, + 67, + 68, + 44, + 45, + 46, + 96, + 48, + 69, + 70, + 71, + 50, + 53, + 54, + 55, + 73, + 97 + ], + "mMastLocX": 89 + }, + { + "lid": "A=1@O=Scheidplatz, München@X=11572937@Y=48171547@U=80@L=624529@", + "type": "S", + "name": "Scheidplatz, München", + "icoX": 5, + "extId": "624529", + "state": "F", + "crd": { + "x": 11572937, + "y": 48171547, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 416, + "pRefL": [ + 99, + 100, + 101, + 102, + 103, + 43, + 9, + 45, + 6, + 7 + ], + "mMastLocX": 94 + }, + { + "lid": "A=1@O=Scheidplatz, München@X=11573081@Y=48171790@U=80@L=625160@", + "type": "S", + "name": "Scheidplatz, München", + "icoX": 5, + "extId": "625160", + "state": "F", + "crd": { + "x": 11573081, + "y": 48171790, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 416, + "pRefL": [ + 99, + 100, + 102, + 103 + ], + "isMainMast": true + }, + { + "lid": "A=1@O=Königsplatz, München@X=11563301@Y=48145128@U=80@L=624796@", + "type": "S", + "name": "Königsplatz, München", + "icoX": 5, + "extId": "624796", + "state": "F", + "crd": { + "x": 11563301, + "y": 48145128, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 160 + }, + { + "lid": "A=1@O=Theresienstraße, München@X=11564407@Y=48151420@U=80@L=625254@", + "type": "S", + "name": "Theresienstraße, München", + "icoX": 10, + "extId": "625254", + "state": "F", + "crd": { + "x": 11564407, + "y": 48151420, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 128 + }, + { + "lid": "A=1@O=Josephsplatz, München@X=11567059@Y=48155654@U=80@L=624725@", + "type": "S", + "name": "Josephsplatz, München", + "icoX": 5, + "extId": "624725", + "state": "F", + "crd": { + "x": 11567059, + "y": 48155654, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 160, + "isMainMast": true + }, + { + "lid": "A=1@O=Scheidplatz, München@X=11572937@Y=48171385@U=80@L=624388@", + "type": "S", + "name": "Scheidplatz, München", + "icoX": 5, + "extId": "624388", + "state": "F", + "crd": { + "x": 11572937, + "y": 48171385, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 416, + "pRefL": [ + 99, + 100, + 101, + 102, + 103, + 43, + 9, + 45, + 6, + 7 + ], + "mMastLocX": 94 + } + ], + "prodL": [ + { + "name": "BRB", + "icoX": 0, + "cls": 8, + "prodCtx": { + "name": "BRB", + "line": "", + "catOut": "DPN ", + "catOutS": "DPN", + "catOutL": "Nahreisezug" + } + }, + { + "name": "M", + "icoX": 0, + "cls": 8, + "prodCtx": { + "name": "M ", + "line": "", + "catOut": "DPN ", + "catOutS": "DPN", + "catOutL": "Nahreisezug" + } + }, + { + "pid": "L::3::Bus::B1146449194::3_B7_____SEV!!1285884!!5355465::*", + "name": "Bus SEV", + "nameS": "SEV", + "icoX": 0, + "cls": 8, + "prodCtx": { + "name": "Bus SEV", + "line": "SEV", + "lineId": "3_B7_____SEV!!1285884!!5355465", + "catOut": "Bus ", + "catOutS": "Bsv", + "catOutL": "SEV-Bus" + } + }, + { + "pid": "L::4::S::B0016128115::4_800725_3::*", + "name": "S 3", + "nameS": "S 3", + "icoX": 1, + "cls": 16, + "prodCtx": { + "name": "S 3", + "line": "3", + "lineId": "4_800725_3", + "catOut": "S ", + "catOutS": "s", + "catOutL": "S-Bahn" + }, + "himIdL": [ + "RIS_HIM_FREETEXT_1072472", + "RIS_HIM_FREETEXT_1072473", + "RIS_HIM_FREETEXT_1163477", + "RIS_HIM_FREETEXT_1163478", + "RIS_HIM_FREETEXT_1179605", + "RIS_HIM_FREETEXT_1179600", + "RIS_HIM_FREETEXT_1179608", + "RIS_HIM_FREETEXT_1179607", + "RIS_HIM_FREETEXT_1179602", + "RIS_HIM_FREETEXT_1179599", + "RIS_HIM_FREETEXT_1184673" + ] + }, + { + "pid": "L::4::S::B0016128115::4_800725_7::*", + "name": "S 7", + "nameS": "S 7", + "icoX": 2, + "cls": 16, + "prodCtx": { + "name": "S 7", + "line": "7", + "lineId": "4_800725_7", + "catOut": "S ", + "catOutS": "s", + "catOutL": "S-Bahn" + }, + "himIdL": [ + "RIS_HIM_FREETEXT_1184673", + "RIS_HIM_FREETEXT_1186308" + ] + }, + { + "pid": "L::4::S::B0016128115::4_800725_20::*", + "name": "S 20", + "nameS": "S 20", + "icoX": 3, + "cls": 16, + "prodCtx": { + "name": "S 20", + "line": "20", + "lineId": "4_800725_20", + "catOut": "S ", + "catOutS": "s", + "catOutL": "S-Bahn" + } + }, + { + "pid": "L::8::STR::B1146449194::8_swm002_12::*", + "name": "12", + "nameS": "12", + "icoX": 4, + "cls": 256, + "prodCtx": { + "name": "12", + "line": "12", + "lineId": "8_swm002_12", + "catOut": "STR ", + "catOutS": "STR", + "catOutL": "Straenbahn" + } + }, + { + "pid": "L::8::STR::B1146449194::8_swm002_28::*", + "name": "28", + "nameS": "28", + "icoX": 4, + "cls": 256, + "prodCtx": { + "name": "28", + "line": "28", + "lineId": "8_swm002_28", + "catOut": "STR ", + "catOutS": "STR", + "catOutL": "Straenbahn" + } + }, + { + "pid": "L::5::Bus::B1146449194::5_swm003_135::*", + "name": "135", + "nameS": "135", + "icoX": 5, + "cls": 32, + "prodCtx": { + "name": "135", + "line": "135", + "lineId": "5_swm003_135", + "catOut": "Bus ", + "catOutS": "Bus", + "catOutL": "Bus" + } + }, + { + "pid": "L::7::U::B1146449194::7_swm001_3::*", + "name": "U 3", + "nameS": "U 3", + "icoX": 6, + "cls": 128, + "prodCtx": { + "name": "U 3", + "line": "3", + "lineId": "7_swm001_3", + "catOut": "U ", + "catOutS": "U", + "catOutL": "U-Bahn" + } + }, + { + "name": "Walk", + "icoX": 7, + "prodCtx": { + "name": "Walk" + } + }, + { + "pid": "L::7::U::B1146449194::7_swm001_3::*", + "name": "U 3", + "nameS": "U 3", + "number": "3", + "icoX": 6, + "cls": 128, + "prodCtx": { + "name": "U 3", + "num": "3032", + "line": "3", + "matchId": "3", + "catOut": "U", + "catOutS": "U", + "catOutL": "U-Bahn", + "catIn": "U", + "catCode": "7", + "admin": "swm001" + } + }, + { + "pid": "L::7::U::B1146449194::7_swm001_3::*", + "name": "U 3", + "nameS": "U 3", + "number": "3", + "icoX": 6, + "cls": 128, + "prodCtx": { + "name": "U 3", + "num": "3032", + "line": "3", + "lineId": "7_swm001_3", + "matchId": "3", + "catOut": "U", + "catOutS": "U", + "catOutL": "U-Bahn", + "catIn": "U", + "catCode": "7", + "admin": "swm001" + } + }, + { + "pid": "L::5::Bus::B1146449194::5_swm003_53::*", + "name": "53", + "nameS": "53", + "icoX": 5, + "cls": 32, + "prodCtx": { + "name": "53", + "line": "53", + "lineId": "5_swm003_53", + "catOut": "Bus ", + "catOutS": "Bus", + "catOutL": "Bus" + } + }, + { + "pid": "L::5::Bus::B1146449194::5_swm003_N41::*", + "name": "N41", + "nameS": "N41", + "icoX": 5, + "cls": 32, + "prodCtx": { + "name": "N41", + "line": "N41", + "lineId": "5_swm003_N41", + "catOut": "Bus ", + "catOutS": "Bus", + "catOutL": "Bus" + } + }, + { + "pid": "L::5::Bus::B1146449194::5_swm003_53::*", + "name": "53", + "nameS": "53", + "number": "53", + "icoX": 5, + "cls": 32, + "prodCtx": { + "name": " 53", + "num": "23898", + "line": "53", + "matchId": "53", + "catOut": "Bus", + "catOutS": "Bus", + "catOutL": "Bus", + "catIn": "Bus", + "catCode": "5", + "admin": "swm003" + } + }, + { + "pid": "L::5::Bus::B1146449194::5_swm003_59::*", + "name": "59", + "nameS": "59", + "icoX": 5, + "cls": 32, + "prodCtx": { + "name": "59", + "line": "59", + "lineId": "5_swm003_59", + "catOut": "Bus ", + "catOutS": "Bus", + "catOutL": "Bus" + } + }, + { + "pid": "L::5::Bus::B1146449194::5_swm003_N43::*", + "name": "N43", + "nameS": "N43", + "icoX": 5, + "cls": 32, + "prodCtx": { + "name": "N43", + "line": "N43", + "lineId": "5_swm003_N43", + "catOut": "Bus ", + "catOutS": "Bus", + "catOutL": "Bus" + } + }, + { + "pid": "L::5::Bus::B1146449194::5_swm003_53::*", + "name": "53", + "nameS": "53", + "number": "53", + "icoX": 5, + "cls": 32, + "prodCtx": { + "name": " 53", + "num": "23898", + "line": "53", + "lineId": "5_swm003_53", + "matchId": "53", + "catOut": "Bus", + "catOutS": "Bus", + "catOutL": "Bus", + "catIn": "Bus", + "catCode": "5", + "admin": "swm003" + } + }, + { + "pid": "L::4::S::B0016128115::4_800725_7::*", + "name": "S 7", + "nameS": "S 7", + "number": "7", + "icoX": 2, + "cls": 16, + "oprX": 0, + "prodCtx": { + "name": "S 7", + "num": "6740", + "line": "7", + "matchId": "7", + "catOut": "S", + "catOutS": "s", + "catOutL": "S-Bahn", + "catIn": "s", + "catCode": "4", + "admin": "800725" + }, + "himIdL": [ + "RIS_HIM_FREETEXT_1184673", + "RIS_HIM_FREETEXT_1186308" + ] + }, + { + "name": "BOB", + "icoX": 0, + "cls": 8, + "prodCtx": { + "name": "BOB", + "line": "", + "catOut": "DPN ", + "catOutS": "DPN", + "catOutL": "Nahreisezug" + } + }, + { + "pid": "L::5::Bus::B1146449194::5_swm003_136::*", + "name": "136", + "nameS": "136", + "icoX": 5, + "cls": 32, + "prodCtx": { + "name": "136", + "line": "136", + "lineId": "5_swm003_136", + "catOut": "Bus ", + "catOutS": "Bus", + "catOutL": "Bus" + } + }, + { + "pid": "L::4::S::B0016128115::4_800725_7::*", + "name": "S 7", + "nameS": "S 7", + "number": "7", + "icoX": 2, + "cls": 16, + "oprX": 0, + "prodCtx": { + "name": "S 7", + "num": "6740", + "line": "7", + "lineId": "4_800725_7", + "matchId": "7", + "catOut": "S", + "catOutS": "s", + "catOutL": "S-Bahn", + "catIn": "s", + "catCode": "4", + "admin": "800725" + }, + "himIdL": [ + "RIS_HIM_FREETEXT_1184673", + "RIS_HIM_FREETEXT_1186308" + ] + }, + { + "pid": "L::5::Bus::B1146449194::5_swm003_134::*", + "name": "134", + "nameS": "134", + "icoX": 5, + "cls": 32, + "prodCtx": { + "name": "134", + "line": "134", + "lineId": "5_swm003_134", + "catOut": "Bus ", + "catOutS": "Bus", + "catOutL": "Bus" + } + }, + { + "pid": "L::7::U::B1146449194::7_swm001_3::*", + "name": "U 3", + "nameS": "U 3", + "number": "3", + "icoX": 6, + "cls": 128, + "prodCtx": { + "name": "U 3", + "num": "3033", + "line": "3", + "matchId": "3", + "catOut": "U", + "catOutS": "U", + "catOutL": "U-Bahn", + "catIn": "U", + "catCode": "7", + "admin": "swm001" + } + }, + { + "pid": "L::7::U::B1146449194::7_swm001_3::*", + "name": "U 3", + "nameS": "U 3", + "number": "3", + "icoX": 6, + "cls": 128, + "prodCtx": { + "name": "U 3", + "num": "3033", + "line": "3", + "lineId": "7_swm001_3", + "matchId": "3", + "catOut": "U", + "catOutS": "U", + "catOutL": "U-Bahn", + "catIn": "U", + "catCode": "7", + "admin": "swm001" + } + }, + { + "pid": "L::5::Bus::B1146449194::5_swm003_53::*", + "name": "53", + "nameS": "53", + "number": "53", + "icoX": 5, + "cls": 32, + "prodCtx": { + "name": " 53", + "num": "23900", + "line": "53", + "matchId": "53", + "catOut": "Bus", + "catOutS": "Bus", + "catOutL": "Bus", + "catIn": "Bus", + "catCode": "5", + "admin": "swm003" + } + }, + { + "pid": "L::5::Bus::B1146449194::5_swm003_53::*", + "name": "53", + "nameS": "53", + "number": "53", + "icoX": 5, + "cls": 32, + "prodCtx": { + "name": " 53", + "num": "23900", + "line": "53", + "lineId": "5_swm003_53", + "matchId": "53", + "catOut": "Bus", + "catOutS": "Bus", + "catOutL": "Bus", + "catIn": "Bus", + "catCode": "5", + "admin": "swm003" + } + }, + { + "pid": "L::4::S::B0016128115::4_800725_7::*", + "name": "S 7", + "nameS": "S 7", + "number": "7", + "icoX": 2, + "cls": 16, + "oprX": 0, + "prodCtx": { + "name": "S 7", + "num": "6745", + "line": "7", + "matchId": "7", + "catOut": "S", + "catOutS": "s", + "catOutL": "S-Bahn", + "catIn": "s", + "catCode": "4", + "admin": "800725" + }, + "himIdL": [ + "RIS_HIM_FREETEXT_1184673", + "RIS_HIM_FREETEXT_1186308" + ] + }, + { + "pid": "L::8::STR::B1146449194::8_swm002_28::*", + "name": "28", + "nameS": "28", + "number": "28", + "icoX": 4, + "cls": 256, + "prodCtx": { + "name": " 28", + "num": "15820", + "line": "28", + "matchId": "28", + "catOut": "STR", + "catOutS": "STR", + "catOutL": "Straenbahn", + "catIn": "STR", + "catCode": "8", + "admin": "swm002" + } + }, + { + "pid": "L::4::S::B0016128115::4_800725_7::*", + "name": "S 7", + "nameS": "S 7", + "number": "7", + "icoX": 2, + "cls": 16, + "oprX": 0, + "prodCtx": { + "name": "S 7", + "num": "6745", + "line": "7", + "lineId": "4_800725_7", + "matchId": "7", + "catOut": "S", + "catOutS": "s", + "catOutL": "S-Bahn", + "catIn": "s", + "catCode": "4", + "admin": "800725" + }, + "himIdL": [ + "RIS_HIM_FREETEXT_1184673", + "RIS_HIM_FREETEXT_1186308" + ] + }, + { + "pid": "L::5::Bus::B1146449194::5_swm003_54::*", + "name": "54", + "nameS": "54", + "icoX": 5, + "cls": 32, + "prodCtx": { + "name": "54", + "line": "54", + "lineId": "5_swm003_54", + "catOut": "Bus ", + "catOutS": "Bus", + "catOutL": "Bus" + } + }, + { + "pid": "L::5::Bus::B1146449194::5_swm003_130::*", + "name": "130", + "nameS": "130", + "icoX": 5, + "cls": 32, + "prodCtx": { + "name": "130", + "line": "130", + "lineId": "5_swm003_130", + "catOut": "Bus ", + "catOutS": "Bus", + "catOutL": "Bus" + } + }, + { + "pid": "L::5::Bus::B1146449194::5_swm003_132::*", + "name": "132", + "nameS": "132", + "icoX": 5, + "cls": 32, + "prodCtx": { + "name": "132", + "line": "132", + "lineId": "5_swm003_132", + "catOut": "Bus ", + "catOutS": "Bus", + "catOutL": "Bus" + } + }, + { + "pid": "L::5::Bus::B1146449194::5_swm003_N40::*", + "name": "N40", + "nameS": "N40", + "icoX": 5, + "cls": 32, + "prodCtx": { + "name": "N40", + "line": "N40", + "lineId": "5_swm003_N40", + "catOut": "Bus ", + "catOutS": "Bus", + "catOutL": "Bus" + } + }, + { + "pid": "L::5::Bus::B1146449194::5_swm_18_X30::*", + "name": "X30", + "nameS": "X30", + "icoX": 5, + "cls": 32, + "prodCtx": { + "name": "X30", + "line": "X30", + "lineId": "5_swm_18_X30", + "catOut": "Bus ", + "catOutS": "Bus", + "catOutL": "Bus" + } + }, + { + "pid": "L::7::U::B1146449194::7_swm001_6::*", + "name": "U 6", + "nameS": "U 6", + "icoX": 15, + "cls": 128, + "prodCtx": { + "name": "U 6", + "line": "6", + "lineId": "7_swm001_6", + "catOut": "U ", + "catOutS": "U", + "catOutL": "U-Bahn" + } + }, + { + "pid": "L::7::U::B1146449194::7_swm001_6::*", + "name": "U 6", + "nameS": "U 6", + "number": "6", + "icoX": 15, + "cls": 128, + "prodCtx": { + "name": "U 6", + "num": "5819", + "line": "6", + "matchId": "6", + "catOut": "U", + "catOutS": "U", + "catOutL": "U-Bahn", + "catIn": "U", + "catCode": "7", + "admin": "swm001" + } + }, + { + "pid": "L::7::U::B1146449194::7_swm001_6::*", + "name": "U 6", + "nameS": "U 6", + "number": "6", + "icoX": 15, + "cls": 128, + "prodCtx": { + "name": "U 6", + "num": "5819", + "line": "6", + "lineId": "7_swm001_6", + "matchId": "6", + "catOut": "U", + "catOutS": "U", + "catOutL": "U-Bahn", + "catIn": "U", + "catCode": "7", + "admin": "swm001" + } + }, + { + "pid": "L::5::Bus::B1146449194::5_swm003_52::*", + "name": "52", + "nameS": "52", + "icoX": 5, + "cls": 32, + "prodCtx": { + "name": "52", + "line": "52", + "lineId": "5_swm003_52", + "catOut": "Bus ", + "catOutS": "Bus", + "catOutL": "Bus" + } + }, + { + "pid": "L::5::Bus::B1146449194::5_swm003_62::*", + "name": "62", + "nameS": "62", + "icoX": 5, + "cls": 32, + "prodCtx": { + "name": "62", + "line": "62", + "lineId": "5_swm003_62", + "catOut": "Bus ", + "catOutS": "Bus", + "catOutL": "Bus" + } + }, + { + "pid": "L::5::Bus::B1146449194::5_swm003_N45::*", + "name": "N45", + "nameS": "N45", + "icoX": 5, + "cls": 32, + "prodCtx": { + "name": "N45", + "line": "N45", + "lineId": "5_swm003_N45", + "catOut": "Bus ", + "catOutS": "Bus", + "catOutL": "Bus" + } + }, + { + "pid": "L::7::U::B1146449194::7_swm001_1::*", + "name": "U 1", + "nameS": "U 1", + "icoX": 16, + "cls": 128, + "prodCtx": { + "name": "U 1", + "line": "1", + "lineId": "7_swm001_1", + "catOut": "U ", + "catOutS": "U", + "catOutL": "U-Bahn" + } + }, + { + "pid": "L::7::U::B1146449194::7_swm001_2::*", + "name": "U 2", + "nameS": "U 2", + "icoX": 10, + "cls": 128, + "prodCtx": { + "name": "U 2", + "line": "2", + "lineId": "7_swm001_2", + "catOut": "U ", + "catOutS": "U", + "catOutL": "U-Bahn" + } + }, + { + "pid": "L::7::U::B1146449194::7_swm001_7::*", + "name": "U 7", + "nameS": "U 7", + "icoX": 16, + "cls": 128, + "prodCtx": { + "name": "U 7", + "line": "7", + "lineId": "7_swm001_7", + "catOut": "U ", + "catOutS": "U", + "catOutL": "U-Bahn" + } + }, + { + "pid": "L::7::U::B1146449194::7_swm001_8::*", + "name": "U 8", + "nameS": "U 8", + "icoX": 17, + "cls": 128, + "prodCtx": { + "name": "U 8", + "line": "8", + "lineId": "7_swm001_8", + "catOut": "U ", + "catOutS": "U", + "catOutL": "U-Bahn" + } + }, + { + "pid": "L::8::STR::B1146449194::8_swm002_16::*", + "name": "16", + "nameS": "16", + "icoX": 4, + "cls": 256, + "prodCtx": { + "name": "16", + "line": "16", + "lineId": "8_swm002_16", + "catOut": "STR ", + "catOutS": "STR", + "catOutL": "Straenbahn" + } + }, + { + "pid": "L::8::STR::B1146449194::8_swm002_17!!1286563!!5355141::*", + "name": "17", + "nameS": "17", + "icoX": 4, + "cls": 256, + "prodCtx": { + "name": "17", + "line": "17", + "lineId": "8_swm002_17!!1286563!!5355141", + "catOut": "STR ", + "catOutS": "STR", + "catOutL": "Straenbahn" + } + }, + { + "pid": "L::8::STR::B1146449194::8_swm002_18::*", + "name": "18", + "nameS": "18", + "icoX": 4, + "cls": 256, + "prodCtx": { + "name": "18", + "line": "18", + "lineId": "8_swm002_18", + "catOut": "STR ", + "catOutS": "STR", + "catOutL": "Straenbahn" + } + }, + { + "pid": "L::8::STR::B1146449194::8_swm002_27::*", + "name": "27", + "nameS": "27", + "icoX": 4, + "cls": 256, + "prodCtx": { + "name": "27", + "line": "27", + "lineId": "8_swm002_27", + "catOut": "STR ", + "catOutS": "STR", + "catOutL": "Straenbahn" + } + }, + { + "pid": "L::8::STR::B1146449194::8_swm002_29::*", + "name": "29", + "nameS": "29", + "icoX": 4, + "cls": 256, + "prodCtx": { + "name": "29", + "line": "29", + "lineId": "8_swm002_29", + "catOut": "STR ", + "catOutS": "STR", + "catOutL": "Straenbahn" + } + }, + { + "pid": "L::8::STR::B1146449194::8_swm002_31::*", + "name": "31", + "nameS": "31", + "icoX": 4, + "cls": 256, + "prodCtx": { + "name": "31", + "line": "31", + "lineId": "8_swm002_31", + "catOut": "STR ", + "catOutS": "STR", + "catOutL": "Straenbahn" + } + }, + { + "pid": "L::8::STR::B1146449194::8_swm002_37::*", + "name": "37", + "nameS": "37", + "icoX": 4, + "cls": 256, + "prodCtx": { + "name": "37", + "line": "37", + "lineId": "8_swm002_37", + "catOut": "STR ", + "catOutS": "STR", + "catOutL": "Straenbahn" + } + }, + { + "pid": "L::8::STR::B1146449194::8_swm002_N17::*", + "name": "N17", + "nameS": "N17", + "icoX": 4, + "cls": 256, + "prodCtx": { + "name": "N17", + "line": "N17", + "lineId": "8_swm002_N17", + "catOut": "STR ", + "catOutS": "STR", + "catOutL": "Straenbahn" + } + }, + { + "pid": "L::8::STR::B1146449194::8_swm002_N19::*", + "name": "N19", + "nameS": "N19", + "icoX": 4, + "cls": 256, + "prodCtx": { + "name": "N19", + "line": "N19", + "lineId": "8_swm002_N19", + "catOut": "STR ", + "catOutS": "STR", + "catOutL": "Straenbahn" + } + }, + { + "pid": "L::8::STR::B1146449194::8_swm002_N20::*", + "name": "N20", + "nameS": "N20", + "icoX": 4, + "cls": 256, + "prodCtx": { + "name": "N20", + "line": "N20", + "lineId": "8_swm002_N20", + "catOut": "STR ", + "catOutS": "STR", + "catOutL": "Straenbahn" + } + }, + { + "pid": "L::8::STR::B1146449194::8_swm002_N27::*", + "name": "N27", + "nameS": "N27", + "icoX": 4, + "cls": 256, + "prodCtx": { + "name": "N27", + "line": "N27", + "lineId": "8_swm002_N27", + "catOut": "STR ", + "catOutS": "STR", + "catOutL": "Straenbahn" + } + }, + { + "pid": "L::8::STR::B1146449194::8_swm002_SEVU2::*", + "name": "SEVU2", + "nameS": "SEVU2", + "icoX": 4, + "cls": 256, + "prodCtx": { + "name": "SEVU2", + "line": "SEVU2", + "lineId": "8_swm002_SEVU2", + "catOut": "STR ", + "catOutS": "STR", + "catOutL": "Straenbahn" + } + }, + { + "pid": "L::8::STR::B1146449194::8_swm002_29::*", + "name": "29", + "nameS": "29", + "number": "29", + "icoX": 4, + "cls": 256, + "prodCtx": { + "name": " 29", + "num": "16282", + "line": "29", + "matchId": "29", + "catOut": "STR", + "catOutS": "STR", + "catOutL": "Straenbahn", + "catIn": "STR", + "catCode": "8", + "admin": "swm002" + } + }, + { + "name": "S", + "nameS": "S", + "icoX": 18, + "cls": 16, + "prodCtx": { + "name": "S ", + "line": "", + "catOut": "S ", + "catOutS": "s", + "catOutL": "S-Bahn" + } + }, + { + "pid": "L::4::S::B0016128115::4_800725_1::*", + "name": "S 1", + "nameS": "S 1", + "icoX": 19, + "cls": 16, + "prodCtx": { + "name": "S 1", + "line": "1", + "lineId": "4_800725_1", + "catOut": "S ", + "catOutS": "s", + "catOutL": "S-Bahn" + }, + "himIdL": [ + "RIS_HIM_FREETEXT_1179605", + "RIS_HIM_FREETEXT_1179600", + "RIS_HIM_FREETEXT_1179608", + "RIS_HIM_FREETEXT_1179607", + "RIS_HIM_FREETEXT_1179602", + "RIS_HIM_FREETEXT_1179599", + "RIS_HIM_FREETEXT_1184948", + "RIS_HIM_FREETEXT_1184954" + ] + }, + { + "pid": "L::4::S::B0016128115::4_800725_2::*", + "name": "S 2", + "nameS": "S 2", + "icoX": 20, + "cls": 16, + "prodCtx": { + "name": "S 2", + "line": "2", + "lineId": "4_800725_2", + "catOut": "S ", + "catOutS": "s", + "catOutL": "S-Bahn" + }, + "himIdL": [ + "RIS_HIM_FREETEXT_1159178", + "RIS_HIM_FREETEXT_1179605", + "RIS_HIM_FREETEXT_1179600", + "RIS_HIM_FREETEXT_1179608", + "RIS_HIM_FREETEXT_1179607", + "RIS_HIM_FREETEXT_1179602", + "RIS_HIM_FREETEXT_1179599", + "RIS_HIM_FREETEXT_1179628", + "RIS_HIM_FREETEXT_1186304" + ] + }, + { + "pid": "L::4::S::B0016128115::4_800725_4::*", + "name": "S 4", + "nameS": "S 4", + "icoX": 21, + "cls": 16, + "prodCtx": { + "name": "S 4", + "line": "4", + "lineId": "4_800725_4", + "catOut": "S ", + "catOutS": "s", + "catOutL": "S-Bahn" + }, + "himIdL": [ + "RIS_HIM_FREETEXT_1179605", + "RIS_HIM_FREETEXT_1179600", + "RIS_HIM_FREETEXT_1179608", + "RIS_HIM_FREETEXT_1179607", + "RIS_HIM_FREETEXT_1179602", + "RIS_HIM_FREETEXT_1179599", + "RIS_HIM_FREETEXT_1183479", + "RIS_HIM_FREETEXT_1185509", + "RIS_HIM_FREETEXT_1179628" + ] + }, + { + "pid": "L::4::S::B0016128115::4_800725_6::*", + "name": "S 6", + "nameS": "S 6", + "icoX": 22, + "cls": 16, + "prodCtx": { + "name": "S 6", + "line": "6", + "lineId": "4_800725_6", + "catOut": "S ", + "catOutS": "s", + "catOutL": "S-Bahn" + }, + "himIdL": [ + "RIS_HIM_FREETEXT_1159180", + "RIS_HIM_FREETEXT_1163468", + "RIS_HIM_FREETEXT_1163469", + "RIS_HIM_FREETEXT_1174654", + "RIS_HIM_FREETEXT_1175966", + "RIS_HIM_FREETEXT_1179605", + "RIS_HIM_FREETEXT_1179600", + "RIS_HIM_FREETEXT_1179608", + "RIS_HIM_FREETEXT_1179607", + "RIS_HIM_FREETEXT_1179602", + "RIS_HIM_FREETEXT_1179599", + "RIS_HIM_FREETEXT_1183480", + "RIS_HIM_FREETEXT_1179628", + "RIS_HIM_FREETEXT_1186299" + ] + }, + { + "pid": "L::4::S::B0016128115::4_800725_8::*", + "name": "S 8", + "nameS": "S 8", + "icoX": 23, + "cls": 16, + "prodCtx": { + "name": "S 8", + "line": "8", + "lineId": "4_800725_8", + "catOut": "S ", + "catOutS": "s", + "catOutL": "S-Bahn" + }, + "himIdL": [ + "RIS_HIM_FREETEXT_1138462", + "RIS_HIM_FREETEXT_1150260", + "RIS_HIM_FREETEXT_1159169", + "RIS_HIM_FREETEXT_1159171", + "RIS_HIM_FREETEXT_1159175", + "RIS_HIM_FREETEXT_1159181", + "RIS_HIM_FREETEXT_1159182", + "RIS_HIM_FREETEXT_1159195", + "RIS_HIM_FREETEXT_1159199", + "RIS_HIM_FREETEXT_1159203", + "RIS_HIM_FREETEXT_1159274", + "RIS_HIM_FREETEXT_1159288", + "RIS_HIM_FREETEXT_1159291", + "RIS_HIM_FREETEXT_1159293", + "RIS_HIM_FREETEXT_1172180", + "RIS_HIM_FREETEXT_1179605", + "RIS_HIM_FREETEXT_1179600", + "RIS_HIM_FREETEXT_1179608", + "RIS_HIM_FREETEXT_1179607", + "RIS_HIM_FREETEXT_1179602", + "RIS_HIM_FREETEXT_1179599", + "RIS_HIM_FREETEXT_1184942", + "RIS_HIM_FREETEXT_1179628", + "RIS_HIM_FREETEXT_1186299" + ] + }, + { + "pid": "L::5::Bus::B1146449194::5_swm_12_717::*", + "name": "717", + "nameS": "717", + "icoX": 5, + "cls": 32, + "prodCtx": { + "name": "717", + "line": "717", + "lineId": "5_swm_12_717", + "catOut": "Bus ", + "catOutS": "Bus", + "catOutL": "Bus" + } + }, + { + "pid": "L::5::Bus::B1146449194::5_swm_12_720::*", + "name": "720", + "nameS": "720", + "icoX": 5, + "cls": 32, + "prodCtx": { + "name": "720", + "line": "720", + "lineId": "5_swm_12_720", + "catOut": "Bus ", + "catOutS": "Bus", + "catOutL": "Bus" + } + }, + { + "pid": "L::7::U::B1146449194::7_swm001_4::*", + "name": "U 4", + "nameS": "U 4", + "icoX": 9, + "cls": 128, + "prodCtx": { + "name": "U 4", + "line": "4", + "lineId": "7_swm001_4", + "catOut": "U ", + "catOutS": "U", + "catOutL": "U-Bahn" + } + }, + { + "pid": "L::7::U::B1146449194::7_swm001_5::*", + "name": "U 5", + "nameS": "U 5", + "icoX": 24, + "cls": 128, + "prodCtx": { + "name": "U 5", + "line": "5", + "lineId": "7_swm001_5", + "catOut": "U ", + "catOutS": "U", + "catOutL": "U-Bahn" + } + }, + { + "pid": "L::8::STR::B1146449194::8_swm002_19::*", + "name": "19", + "nameS": "19", + "icoX": 4, + "cls": 256, + "prodCtx": { + "name": "19", + "line": "19", + "lineId": "8_swm002_19", + "catOut": "STR ", + "catOutS": "STR", + "catOutL": "Straenbahn" + } + }, + { + "pid": "L::8::STR::B1146449194::8_swm002_20::*", + "name": "20", + "nameS": "20", + "icoX": 4, + "cls": 256, + "prodCtx": { + "name": "20", + "line": "20", + "lineId": "8_swm002_20", + "catOut": "STR ", + "catOutS": "STR", + "catOutL": "Straenbahn" + } + }, + { + "pid": "L::8::STR::B1146449194::8_swm002_21::*", + "name": "21", + "nameS": "21", + "icoX": 4, + "cls": 256, + "prodCtx": { + "name": "21", + "line": "21", + "lineId": "8_swm002_21", + "catOut": "STR ", + "catOutS": "STR", + "catOutL": "Straenbahn" + } + }, + { + "pid": "L::8::STR::B1146449194::8_swm002_39::*", + "name": "39", + "nameS": "39", + "icoX": 4, + "cls": 256, + "prodCtx": { + "name": "39", + "line": "39", + "lineId": "8_swm002_39", + "catOut": "STR ", + "catOutS": "STR", + "catOutL": "Straenbahn" + } + }, + { + "pid": "L::8::STR::B1146449194::8_swm002_N39::*", + "name": "N39", + "nameS": "N39", + "icoX": 4, + "cls": 256, + "prodCtx": { + "name": "N39", + "line": "N39", + "lineId": "8_swm002_N39", + "catOut": "STR ", + "catOutS": "STR", + "catOutL": "Straenbahn" + } + }, + { + "pid": "L::8::STR::B1146449194::8_swm002_29::*", + "name": "29", + "nameS": "29", + "number": "29", + "icoX": 4, + "cls": 256, + "prodCtx": { + "name": " 29", + "num": "16282", + "line": "29", + "lineId": "8_swm002_29", + "matchId": "29", + "catOut": "STR", + "catOutS": "STR", + "catOutL": "Straenbahn", + "catIn": "STR", + "catCode": "8", + "admin": "swm002" + } + }, + { + "pid": "L::8::STR::B1146449194::8_swm002_28::*", + "name": "28", + "nameS": "28", + "number": "28", + "icoX": 4, + "cls": 256, + "prodCtx": { + "name": " 28", + "num": "15820", + "line": "28", + "lineId": "8_swm002_28", + "matchId": "28", + "catOut": "STR", + "catOutS": "STR", + "catOutL": "Straenbahn", + "catIn": "STR", + "catCode": "8", + "admin": "swm002" + } + }, + { + "pid": "L::8::STR::B1146449194::8_swm002_28::*", + "name": "28", + "nameS": "28", + "number": "28", + "icoX": 4, + "cls": 256, + "prodCtx": { + "name": " 28", + "num": "15696", + "line": "28", + "matchId": "28", + "catOut": "STR", + "catOutS": "STR", + "catOutL": "Straenbahn", + "catIn": "STR", + "catCode": "8", + "admin": "swm002" + } + }, + { + "name": "ECE", + "icoX": 25, + "cls": 1, + "prodCtx": { + "name": "ECE ", + "line": "", + "catOut": "ECE ", + "catOutS": "ECE", + "catOutL": "Eurocity-Express" + } + }, + { + "name": "ICE", + "icoX": 25, + "cls": 1, + "prodCtx": { + "name": "ICE ", + "line": "", + "catOut": "ICE ", + "catOutS": "ICE", + "catOutL": "Intercity-Express" + } + }, + { + "name": "RJ", + "icoX": 25, + "cls": 1, + "prodCtx": { + "name": "RJ ", + "line": "", + "catOut": "RJ ", + "catOutS": "RJ", + "catOutL": "railjet" + } + }, + { + "name": "RJX", + "icoX": 25, + "cls": 1, + "prodCtx": { + "name": "RJX ", + "line": "", + "catOut": "RJX ", + "catOutS": "RJX", + "catOutL": "railjet xpress" + } + }, + { + "name": "TGV", + "icoX": 25, + "cls": 1, + "prodCtx": { + "name": "TGV ", + "line": "", + "catOut": "TGV ", + "catOutS": "RHT", + "catOutL": "TGV INOUI" + } + }, + { + "name": "EC", + "icoX": 26, + "cls": 2, + "prodCtx": { + "name": "EC ", + "line": "", + "catOut": "EC ", + "catOutS": "EC", + "catOutL": "Eurocity" + } + }, + { + "name": "IC", + "icoX": 26, + "cls": 2, + "prodCtx": { + "name": "IC ", + "line": "", + "catOut": "IC ", + "catOutS": "IC", + "catOutL": "Intercity" + } + }, + { + "name": "NJ", + "icoX": 26, + "cls": 2, + "prodCtx": { + "name": "NJ ", + "line": "", + "catOut": "NJ ", + "catOutS": "NJ", + "catOutL": "Nightjet" + } + }, + { + "name": "EN", + "icoX": 27, + "cls": 4, + "prodCtx": { + "name": "EN ", + "line": "", + "catOut": "EN ", + "catOutS": "EN", + "catOutL": "EuroNight" + } + }, + { + "name": "ALX", + "icoX": 0, + "cls": 8, + "prodCtx": { + "name": "ALX", + "line": "", + "catOut": "DPN ", + "catOutS": "DPN", + "catOutL": "Nahreisezug" + } + }, + { + "name": "RB", + "icoX": 0, + "cls": 8, + "prodCtx": { + "name": "RB ", + "line": "", + "catOut": "RB ", + "catOutS": "RB", + "catOutL": "Regionalbahn" + } + }, + { + "name": "RE", + "icoX": 0, + "cls": 8, + "prodCtx": { + "name": "RE ", + "line": "", + "catOut": "RE ", + "catOutS": "RE", + "catOutL": "Regional-Express" + } + }, + { + "pid": "L::3::Bus::B0723754675::3_A8N____SEV::*", + "name": "Bus SEV", + "nameS": "SEV", + "icoX": 0, + "cls": 8, + "prodCtx": { + "name": "Bus SEV", + "line": "SEV", + "lineId": "3_A8N____SEV", + "catOut": "Bus ", + "catOutS": "Bsv", + "catOutL": "SEV-Bus" + } + }, + { + "pid": "L::3::Bus::B1146449194::3_B7_____SEV::*", + "name": "Bus SEV", + "nameS": "SEV", + "icoX": 0, + "cls": 8, + "prodCtx": { + "name": "Bus SEV", + "line": "SEV", + "lineId": "3_B7_____SEV", + "catOut": "Bus ", + "catOutS": "Bsv", + "catOutL": "SEV-Bus" + } + }, + { + "pid": "L::5::Bus::B1146449194::5_swm003_58::*", + "name": "58", + "nameS": "58", + "icoX": 5, + "cls": 32, + "prodCtx": { + "name": "58", + "line": "58", + "lineId": "5_swm003_58", + "catOut": "Bus ", + "catOutS": "Bus", + "catOutL": "Bus" + } + }, + { + "pid": "L::5::Bus::B1146449194::5_swm003_68::*", + "name": "68", + "nameS": "68", + "icoX": 5, + "cls": 32, + "prodCtx": { + "name": "68", + "line": "68", + "lineId": "5_swm003_68", + "catOut": "Bus ", + "catOutS": "Bus", + "catOutL": "Bus" + } + }, + { + "pid": "L::5::Bus::B1146449194::5_swm003_100::*", + "name": "100", + "nameS": "100", + "icoX": 5, + "cls": 32, + "prodCtx": { + "name": "100", + "line": "100", + "lineId": "5_swm003_100", + "catOut": "Bus ", + "catOutS": "Bus", + "catOutL": "Bus" + } + }, + { + "pid": "L::5::Bus::B1146449194::5_mvvEBU_LHMUC::*", + "name": "LHMUC", + "nameS": "LHMUC", + "icoX": 5, + "cls": 32, + "prodCtx": { + "name": "LHMUC", + "line": "LHMUC", + "lineId": "5_mvvEBU_LHMUC", + "catOut": "Bus ", + "catOutS": "Bus", + "catOutL": "Bus" + } + }, + { + "pid": "L::5::Bus::B1146449194::5_swm_18_X98::*", + "name": "X98", + "nameS": "X98", + "icoX": 5, + "cls": 32, + "prodCtx": { + "name": "X98", + "line": "X98", + "lineId": "5_swm_18_X98", + "catOut": "Bus ", + "catOutS": "Bus", + "catOutL": "Bus" + } + }, + { + "pid": "L::8::STR::B1146449194::8_swm002_17!!1285889!!5355225::*", + "name": "17", + "nameS": "17", + "icoX": 4, + "cls": 256, + "prodCtx": { + "name": "17", + "line": "17", + "lineId": "8_swm002_17!!1285889!!5355225", + "catOut": "STR ", + "catOutS": "STR", + "catOutL": "Straenbahn" + } + }, + { + "pid": "L::9::AST::B0723754675::9_A8N____SEV::*", + "name": "AST SEV", + "nameS": "SEV", + "icoX": 28, + "cls": 512, + "prodCtx": { + "name": "AST SEV", + "line": "SEV", + "lineId": "9_A8N____SEV", + "catOut": "AST ", + "catOutS": "ast", + "catOutL": "Anruf-Sammel-Taxi" + } + }, + { + "pid": "L::7::U::B1146449194::7_swm001_2::*", + "name": "U 2", + "nameS": "U 2", + "number": "2", + "icoX": 10, + "cls": 128, + "prodCtx": { + "name": "U 2", + "num": "2062", + "line": "2", + "matchId": "2", + "catOut": "U", + "catOutS": "U", + "catOutL": "U-Bahn", + "catIn": "U", + "catCode": "7", + "admin": "swm001" + } + }, + { + "pid": "L::5::Bus::B1146449194::5_swm003_140::*", + "name": "140", + "nameS": "140", + "icoX": 5, + "cls": 32, + "prodCtx": { + "name": "140", + "line": "140", + "lineId": "5_swm003_140", + "catOut": "Bus ", + "catOutS": "Bus", + "catOutL": "Bus" + } + }, + { + "pid": "L::5::Bus::B1146449194::5_swm003_141::*", + "name": "141", + "nameS": "141", + "icoX": 5, + "cls": 32, + "prodCtx": { + "name": "141", + "line": "141", + "lineId": "5_swm003_141", + "catOut": "Bus ", + "catOutS": "Bus", + "catOutL": "Bus" + } + }, + { + "pid": "L::5::Bus::B1146449194::5_swm003_142::*", + "name": "142", + "nameS": "142", + "icoX": 5, + "cls": 32, + "prodCtx": { + "name": "142", + "line": "142", + "lineId": "5_swm003_142", + "catOut": "Bus ", + "catOutS": "Bus", + "catOutL": "Bus" + } + }, + { + "pid": "L::5::Bus::B1146449194::5_swm003_144::*", + "name": "144", + "nameS": "144", + "icoX": 5, + "cls": 32, + "prodCtx": { + "name": "144", + "line": "144", + "lineId": "5_swm003_144", + "catOut": "Bus ", + "catOutS": "Bus", + "catOutL": "Bus" + } + }, + { + "pid": "L::5::Bus::B1146449194::5_swm_12_U3::*", + "name": "U3", + "nameS": "U3", + "icoX": 5, + "cls": 32, + "prodCtx": { + "name": "U3", + "line": "U3", + "lineId": "5_swm_12_U3", + "catOut": "Bus ", + "catOutS": "Bus", + "catOutL": "Bus" + } + }, + { + "pid": "L::7::U::B1146449194::7_swm001_2::*", + "name": "U 2", + "nameS": "U 2", + "number": "2", + "icoX": 10, + "cls": 128, + "prodCtx": { + "name": "U 2", + "num": "2062", + "line": "2", + "lineId": "7_swm001_2", + "matchId": "2", + "catOut": "U", + "catOutS": "U", + "catOutL": "U-Bahn", + "catIn": "U", + "catCode": "7", + "admin": "swm001" + } + }, + { + "pid": "L::8::STR::B1146449194::8_swm002_28::*", + "name": "28", + "nameS": "28", + "number": "28", + "icoX": 4, + "cls": 256, + "prodCtx": { + "name": " 28", + "num": "15696", + "line": "28", + "lineId": "8_swm002_28", + "matchId": "28", + "catOut": "STR", + "catOutS": "STR", + "catOutL": "Straenbahn", + "catIn": "STR", + "catCode": "8", + "admin": "swm002" + } + }, + { + "pid": "L::8::STR::B1146449194::8_swm002_28::*", + "name": "28", + "nameS": "28", + "number": "28", + "icoX": 4, + "cls": 256, + "prodCtx": { + "name": " 28", + "num": "15821", + "line": "28", + "matchId": "28", + "catOut": "STR", + "catOutS": "STR", + "catOutL": "Straenbahn", + "catIn": "STR", + "catCode": "8", + "admin": "swm002" + } + }, + { + "pid": "L::8::STR::B1146449194::8_swm002_28::*", + "name": "28", + "nameS": "28", + "number": "28", + "icoX": 4, + "cls": 256, + "prodCtx": { + "name": " 28", + "num": "15821", + "line": "28", + "lineId": "8_swm002_28", + "matchId": "28", + "catOut": "STR", + "catOutS": "STR", + "catOutL": "Straenbahn", + "catIn": "STR", + "catCode": "8", + "admin": "swm002" + } + } + ], + "polyL": [], + "layerL": [ + { + "id": "standard", + "name": "standard", + "index": 0, + "annoCnt": 0 + } + ], + "crdSysL": [ + { + "id": "standard", + "index": 0, + "type": "WGS84" + } + ], + "opL": [ + { + "name": "DB Regio AG Bayern", + "icoX": 11 + } + ], + "remL": [ + { + "type": "A", + "code": "PB", + "prio": 200, + "icoX": 12, + "txtN": "Obligation to cover nose and mouth" + }, + { + "type": "A", + "code": "FB", + "prio": 260, + "icoX": 13, + "txtN": "Number of bicycles conveyed limited" + }, + { + "type": "A", + "code": "FS", + "prio": 260, + "icoX": 12, + "txtN": "conveying bicycles: mind the excluded times" + }, + { + "type": "A", + "code": "K2", + "prio": 300, + "icoX": 14, + "txtN": "2nd class only" + }, + { + "type": "A", + "code": "XK", + "prio": 100, + "icoX": 12, + "txtN": "walking distance 500 m" + } + ], + "icoL": [ + { + "res": "prod_reg", + "fg": { + "r": 255, + "g": 255, + "b": 255 + }, + "bg": { + "r": 89, + "g": 87, + "b": 87 + } + }, + { + "res": "prod_comm_t", + "fg": { + "r": 255, + "g": 255, + "b": 255 + }, + "bg": { + "r": 148, + "g": 27, + "b": 128 + }, + "shp": "C" + }, + { + "res": "prod_comm_t", + "fg": { + "r": 255, + "g": 255, + "b": 255 + }, + "bg": { + "r": 136, + "g": 46, + "b": 35 + }, + "shp": "C" + }, + { + "res": "prod_comm_t", + "fg": { + "r": 255, + "g": 255, + "b": 255 + }, + "bg": { + "r": 233, + "g": 81, + "b": 109 + }, + "shp": "C" + }, + { + "res": "prod_tram_t", + "fg": { + "r": 255, + "g": 255, + "b": 255 + }, + "bg": { + "r": 227, + "g": 6, + "b": 19 + } + }, + { + "res": "prod_bus", + "fg": { + "r": 255, + "g": 255, + "b": 255 + }, + "bg": { + "r": 0, + "g": 93, + "b": 137 + } + }, + { + "res": "prod_sub_t", + "fg": { + "r": 255, + "g": 255, + "b": 255 + }, + "bg": { + "r": 237, + "g": 114, + "b": 3 + } + }, + { + "res": "prod_walk", + "fg": { + "r": 255, + "g": 255, + "b": 255 + }, + "bg": { + "r": 255, + "g": 204, + "b": 17 + } + }, + { + "res": "STA" + }, + { + "res": "prod_sub_t", + "fg": { + "r": 255, + "g": 255, + "b": 255 + }, + "bg": { + "r": 0, + "g": 168, + "b": 131 + } + }, + { + "res": "prod_sub_t", + "fg": { + "r": 255, + "g": 255, + "b": 255 + }, + "bg": { + "r": 193, + "g": 8, + "b": 48 + } + }, + { + "res": "RE", + "txt": "DB Regio AG Bayern" + }, + { + "res": "attr_info" + }, + { + "res": "attr_bike" + }, + { + "res": "attr_2nd" + }, + { + "res": "prod_sub_t", + "fg": { + "r": 255, + "g": 255, + "b": 255 + }, + "bg": { + "r": 0, + "g": 101, + "b": 173 + } + }, + { + "res": "prod_sub_t", + "fg": { + "r": 255, + "g": 255, + "b": 255 + }, + "bg": { + "r": 82, + "g": 129, + "b": 46 + } + }, + { + "res": "prod_sub_t", + "fg": { + "r": 255, + "g": 255, + "b": 255 + }, + "bg": { + "r": 187, + "g": 14, + "b": 38 + } + }, + { + "res": "prod_comm_t", + "fg": { + "r": 255, + "g": 255, + "b": 255 + }, + "bg": { + "r": 76, + "g": 144, + "b": 70 + } + }, + { + "res": "prod_comm_t", + "fg": { + "r": 255, + "g": 255, + "b": 255 + }, + "bg": { + "r": 18, + "g": 185, + "b": 230 + }, + "shp": "C" + }, + { + "res": "prod_comm_t", + "fg": { + "r": 255, + "g": 255, + "b": 255 + }, + "bg": { + "r": 118, + "g": 183, + "b": 42 + }, + "shp": "C" + }, + { + "res": "prod_comm_t", + "fg": { + "r": 255, + "g": 255, + "b": 255 + }, + "bg": { + "r": 226, + "g": 5, + "b": 27 + }, + "shp": "C" + }, + { + "res": "prod_comm_t", + "fg": { + "r": 255, + "g": 255, + "b": 255 + }, + "bg": { + "r": 0, + "g": 140, + "b": 88 + }, + "shp": "C" + }, + { + "res": "prod_comm_t", + "fg": { + "r": 255, + "g": 203, + "b": 0 + }, + "bg": { + "r": 29, + "g": 29, + "b": 27 + }, + "shp": "C" + }, + { + "res": "prod_sub_t", + "fg": { + "r": 255, + "g": 255, + "b": 255 + }, + "bg": { + "r": 187, + "g": 122, + "b": 0 + } + }, + { + "res": "prod_ice", + "fg": { + "r": 255, + "g": 255, + "b": 255 + }, + "bg": { + "r": 89, + "g": 87, + "b": 87 + } + }, + { + "res": "prod_ic", + "fg": { + "r": 255, + "g": 255, + "b": 255 + }, + "bg": { + "r": 89, + "g": 87, + "b": 87 + } + }, + { + "res": "prod_gen", + "fg": { + "r": 255, + "g": 255, + "b": 255 + }, + "bg": { + "r": 89, + "g": 87, + "b": 87 + } + }, + { + "res": "prod_taxi", + "fg": { + "r": 255, + "g": 255, + "b": 255 + }, + "bg": { + "r": 255, + "g": 203, + "b": 20 + } + }, + { + "res": "pt_only" + } + ] + }, + "outConL": [ + { + "cid": "C-0", + "date": "20201116", + "dur": "003700", + "chg": 0, + "sDays": { + "sDaysR": "runs 15. Nov until 12. Dec 2020 ", + "sDaysB": "FF0000000000000000000000000000000000000000000000000000000000000000000000000000003FFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + "dep": { + "locX": 0, + "dInR": true, + "dTimeS": "100100", + "dTZOffset": 60, + "type": "N" + }, + "arr": { + "locX": 1, + "aOutR": true, + "aTimeS": "103800", + "aTZOffset": 60, + "type": "N" + }, + "secL": [ + { + "type": "WALK", + "icoX": 7, + "dep": { + "locX": 0, + "dInR": true, + "dTimeS": "100100", + "dTZOffset": 60, + "type": "N" + }, + "arr": { + "locX": 2, + "aOutR": true, + "aTimeS": "101600", + "aTZOffset": 60, + "type": "N" + }, + "gis": { + "dist": 1201, + "durS": "001500", + "ctx": "G|1|G@F|A=1@O=München-Mittersendling@X=11536351@Y=48107823@U=80@L=8004154@|A=1@O=Thalkirchen (Tierpark), München@X=11546015@Y=48102708@U=80@L=625236@|16112020|100100|101600|bf|ft@0@2000@120@1@100@1@1000@0@@@@@false@0@-1@$f@$f@$f@$f@$f@$§bt@0@2000@120@1@100@1@1000@0@@@@@false@0@-1@$f@$f@$f@$f@$f@$§tt@0@5000@120@1@100@1@2500@0@@@@@false@0@-1@$t@0@25000@120@1@100@1@3000@0@@@@@false@0@-1@$f@$f@$f@$f@$§|", + "gisPrvr": "E", + "getDescr": true, + "getPoly": true + } + }, + { + "type": "JNY", + "icoX": 6, + "dep": { + "locX": 2, + "idx": 6, + "dProdX": 11, + "dInR": true, + "dTimeS": "101600", + "dTZOffset": 60, + "type": "N" + }, + "arr": { + "locX": 4, + "idx": 17, + "aOutR": true, + "aTimeS": "103300", + "aTZOffset": 60, + "type": "N" + }, + "jny": { + "jid": "1|24525|9|80|16112020", + "prodX": 12, + "dirTxt": "Moosach, München", + "dirFlg": "2", + "status": "P", + "isRchbl": true, + "stopL": [ + { + "locX": 2, + "idx": 6, + "dProdX": 12, + "dInR": true, + "dTimeS": "101600", + "dDirTxt": "Moosach, München", + "dDirFlg": "2", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 6, + "idx": 7, + "aProdX": 12, + "aOutR": true, + "aTimeS": "101800", + "aTZOffset": 60, + "dProdX": 12, + "dInR": true, + "dTimeS": "101800", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 8, + "idx": 8, + "aProdX": 12, + "aOutR": true, + "aTimeS": "102000", + "aTZOffset": 60, + "dProdX": 12, + "dInR": true, + "dTimeS": "102000", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 10, + "idx": 9, + "aProdX": 12, + "aOutR": true, + "aTimeS": "102100", + "aTZOffset": 60, + "dProdX": 12, + "dInR": true, + "dTimeS": "102100", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 11, + "idx": 10, + "aProdX": 12, + "aOutR": true, + "aTimeS": "102200", + "aTZOffset": 60, + "dProdX": 12, + "dInR": true, + "dTimeS": "102200", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 12, + "idx": 11, + "aProdX": 12, + "aOutR": true, + "aTimeS": "102400", + "aTZOffset": 60, + "dProdX": 12, + "dInR": true, + "dTimeS": "102400", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 13, + "idx": 12, + "aProdX": 12, + "aOutR": true, + "aTimeS": "102600", + "aTZOffset": 60, + "dProdX": 12, + "dInR": true, + "dTimeS": "102600", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 15, + "idx": 13, + "aProdX": 12, + "aOutR": true, + "aTimeS": "102700", + "aTZOffset": 60, + "dProdX": 12, + "dInR": true, + "dTimeS": "102700", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 17, + "idx": 14, + "aProdX": 12, + "aOutR": true, + "aTimeS": "102900", + "aTZOffset": 60, + "dProdX": 12, + "dInR": true, + "dTimeS": "102900", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 19, + "idx": 15, + "aProdX": 12, + "aOutR": true, + "aTimeS": "103000", + "aTZOffset": 60, + "dProdX": 12, + "dInR": true, + "dTimeS": "103000", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 21, + "idx": 16, + "aProdX": 12, + "aOutR": true, + "aTimeS": "103100", + "aTZOffset": 60, + "dProdX": 12, + "dInR": true, + "dTimeS": "103100", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 4, + "idx": 17, + "aProdX": 12, + "aOutR": true, + "aTimeS": "103300", + "aTZOffset": 60, + "type": "N" + } + ], + "freq": { + "minC": 10, + "maxC": 10, + "numC": 13 + }, + "ctxRecon": "T$A=1@O=Thalkirchen (Tierpark), München@L=625236@a=128@$A=1@O=Bonner Platz, München@L=624333@a=128@$202011161016$202011161033$U 3$$1$$$", + "subscr": "N", + "prodL": [ + { + "prodX": 12, + "fLocX": 2, + "tLocX": 4, + "fIdx": 6, + "tIdx": 17 + } + ] + }, + "minChg": "000500" + }, + { + "type": "WALK", + "icoX": 7, + "dep": { + "locX": 4, + "dInR": true, + "dTimeS": "103300", + "dTZOffset": 60, + "type": "N" + }, + "arr": { + "locX": 1, + "aOutR": true, + "aTimeS": "103800", + "aTZOffset": 60, + "type": "N" + }, + "gis": { + "dist": 353, + "durS": "000500", + "ctx": "G|1|G@F|A=1@O=Bonner Platz, München@X=11578151@Y=48166702@U=80@L=624333@|A=1@O=Karl-Theodor-Straße, München@X=11574043@Y=48166918@U=80@L=621790@|16112020|103300|103800|fb|ft@0@2000@120@1@100@1@1000@0@@@@@false@0@-1@$f@$f@$f@$f@$f@$§bt@0@2000@120@1@100@1@1000@0@@@@@false@0@-1@$f@$f@$f@$f@$f@$§tt@0@5000@120@1@100@1@2500@0@@@@@false@0@-1@$t@0@25000@120@1@100@1@3000@0@@@@@false@0@-1@$f@$f@$f@$f@$§|", + "gisPrvr": "E", + "getDescr": true, + "getPoly": true + } + } + ], + "ctxRecon": "¶HKI¶G@F$A=1@O=München-Mittersendling@L=8004154@a=128@$A=1@O=Thalkirchen (Tierpark), München@L=625236@a=128@$202011161001$202011161016$$$1$$$§T$A=1@O=Thalkirchen (Tierpark), München@L=625236@a=128@$A=1@O=Bonner Platz, München@L=624333@a=128@$202011161016$202011161033$U 3$$1$$$§G@F$A=1@O=Bonner Platz, München@L=624333@a=128@$A=1@O=Karl-Theodor-Straße, München@L=621790@a=128@$202011161033$202011161038$$$1$$$¶GP¶ft@0@2000@120@1@100@1@1000@0@@@@@false@0@-1@$f@$f@$f@$f@$f@$§bt@0@2000@120@1@100@1@1000@0@@@@@false@0@-1@$f@$f@$f@$f@$f@$§tt@0@5000@120@1@100@1@2500@0@@@@@false@0@-1@$t@0@25000@120@1@100@1@3000@0@@@@@false@0@-1@$f@$f@$f@$f@$§", + "freq": { + "minC": 10 + }, + "conSubscr": "N", + "recState": "U", + "sotRating": 0, + "isSotCon": false, + "showARSLink": false, + "sotCtxt": { + "calcDate": "20201115", + "locMode": "FROM_START", + "reqMode": "UNKNOWN", + "calcTime": "143055" + }, + "cksum": "70d844fe_3", + "cksumDti": "15d623ad_3" + }, + { + "cid": "C-1", + "date": "20201116", + "dur": "005900", + "chg": 0, + "sDays": { + "sDaysR": "runs 16. Nov until 12. Dec 2020 Mo - Sa ", + "sDaysB": "7E8DB9F7EFDFBF7EFDFBF7EFDFBF7A7DFBD7EFDDBF3EEDFBF7EFDFBF7EFDF3F7EFDFBF7EF9FBF7EFDFBF7EFDFBF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + "dep": { + "locX": 0, + "dInR": true, + "dTimeS": "100200", + "dTZOffset": 60, + "type": "N" + }, + "arr": { + "locX": 1, + "aOutR": true, + "aTimeS": "110100", + "aTZOffset": 60, + "type": "N" + }, + "secL": [ + { + "type": "WALK", + "icoX": 7, + "dep": { + "locX": 0, + "dInR": true, + "dTimeS": "100200", + "dTZOffset": 60, + "type": "N" + }, + "arr": { + "locX": 22, + "aOutR": true, + "aTimeS": "100800", + "aTZOffset": 60, + "type": "N" + }, + "gis": { + "dist": 430, + "durS": "000600", + "ctx": "G|1|G@F|A=1@O=München-Mittersendling@X=11536351@Y=48107823@U=80@L=8004154@|A=1@O=Adunistraße, München@X=11534356@Y=48109297@U=80@L=790090@|16112020|100200|100800|bf|ft@0@2000@120@1@100@1@1000@0@@@@@false@0@-1@$f@$f@$f@$f@$f@$§bt@0@2000@120@1@100@1@1000@0@@@@@false@0@-1@$f@$f@$f@$f@$f@$§tt@0@5000@120@1@100@1@2500@0@@@@@false@0@-1@$t@0@25000@120@1@100@1@3000@0@@@@@false@0@-1@$f@$f@$f@$f@$§|", + "gisPrvr": "E", + "getDescr": true, + "getPoly": true + } + }, + { + "type": "JNY", + "icoX": 5, + "dep": { + "locX": 22, + "idx": 6, + "dProdX": 15, + "dInR": true, + "dTimeS": "100800", + "dTZOffset": 60, + "type": "N" + }, + "arr": { + "locX": 23, + "idx": 33, + "aProdX": 15, + "aOutR": true, + "aTimeS": "105200", + "aTZOffset": 60, + "type": "N" + }, + "jny": { + "jid": "1|23698|14|80|16112020", + "prodX": 18, + "dirTxt": "Münchner Freiheit, München", + "dirFlg": "2", + "status": "P", + "isRchbl": true, + "stopL": [ + { + "locX": 22, + "idx": 6, + "dProdX": 18, + "dInR": true, + "dTimeS": "100800", + "dDirTxt": "Münchner Freiheit, München", + "dDirFlg": "2", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 24, + "idx": 7, + "aProdX": 18, + "aOutR": true, + "aTimeS": "101000", + "aTZOffset": 60, + "dProdX": 18, + "dInR": true, + "dTimeS": "101000", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 26, + "idx": 8, + "aProdX": 18, + "aOutR": true, + "aTimeS": "101200", + "aTZOffset": 60, + "dProdX": 18, + "dInR": true, + "dTimeS": "101400", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 28, + "idx": 9, + "aProdX": 18, + "aOutR": true, + "aTimeS": "101600", + "aTZOffset": 60, + "dProdX": 18, + "dInR": true, + "dTimeS": "101600", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 30, + "idx": 10, + "aProdX": 18, + "aOutR": true, + "aTimeS": "101700", + "aTZOffset": 60, + "dProdX": 18, + "dInR": true, + "dTimeS": "101700", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 32, + "idx": 11, + "aProdX": 18, + "aOutR": true, + "aTimeS": "101900", + "aTZOffset": 60, + "dProdX": 18, + "dInR": true, + "dTimeS": "101900", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 34, + "idx": 12, + "aProdX": 18, + "aOutR": true, + "aTimeS": "102100", + "aTZOffset": 60, + "dProdX": 18, + "dInR": true, + "dTimeS": "102100", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 35, + "idx": 13, + "aProdX": 18, + "aOutR": true, + "aTimeS": "102200", + "aTZOffset": 60, + "dProdX": 18, + "dInR": true, + "dTimeS": "102200", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 36, + "idx": 14, + "aProdX": 18, + "aOutR": true, + "aTimeS": "102300", + "aTZOffset": 60, + "dProdX": 18, + "dInR": true, + "dTimeS": "102300", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 38, + "idx": 15, + "aProdX": 18, + "aOutR": true, + "aTimeS": "102400", + "aTZOffset": 60, + "dProdX": 18, + "dInR": true, + "dTimeS": "102400", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 40, + "idx": 16, + "aProdX": 18, + "aOutR": true, + "aTimeS": "102500", + "aTZOffset": 60, + "dProdX": 18, + "dInR": true, + "dTimeS": "102500", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 42, + "idx": 17, + "aProdX": 18, + "aOutR": true, + "aTimeS": "102600", + "aTZOffset": 60, + "dProdX": 18, + "dInR": true, + "dTimeS": "102600", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 43, + "idx": 18, + "aProdX": 18, + "aOutR": true, + "aTimeS": "102700", + "aTZOffset": 60, + "dProdX": 18, + "dInR": true, + "dTimeS": "102700", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 44, + "idx": 19, + "aProdX": 18, + "aOutR": true, + "aTimeS": "102900", + "aTZOffset": 60, + "dProdX": 18, + "dInR": true, + "dTimeS": "102900", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 46, + "idx": 20, + "aProdX": 18, + "aOutR": true, + "aTimeS": "103100", + "aTZOffset": 60, + "dProdX": 18, + "dInR": true, + "dTimeS": "103100", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 48, + "idx": 21, + "aProdX": 18, + "aOutR": true, + "aTimeS": "103300", + "aTZOffset": 60, + "dProdX": 18, + "dInR": true, + "dTimeS": "103300", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 49, + "idx": 22, + "aProdX": 18, + "aOutR": true, + "aTimeS": "103400", + "aTZOffset": 60, + "dProdX": 18, + "dInR": true, + "dTimeS": "103400", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 50, + "idx": 23, + "aProdX": 18, + "aOutR": true, + "aTimeS": "103600", + "aTZOffset": 60, + "dProdX": 18, + "dInR": true, + "dTimeS": "103600", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 52, + "idx": 24, + "aProdX": 18, + "aOutR": true, + "aTimeS": "103800", + "aTZOffset": 60, + "dProdX": 18, + "dInR": true, + "dTimeS": "103800", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 54, + "idx": 25, + "aProdX": 18, + "aOutR": true, + "aTimeS": "104000", + "aTZOffset": 60, + "dProdX": 18, + "dInR": true, + "dTimeS": "104000", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 55, + "idx": 26, + "aProdX": 18, + "aOutR": true, + "aTimeS": "104100", + "aTZOffset": 60, + "dProdX": 18, + "dInR": true, + "dTimeS": "104100", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 57, + "idx": 27, + "aProdX": 18, + "aOutR": true, + "aTimeS": "104300", + "aTZOffset": 60, + "dProdX": 18, + "dInR": true, + "dTimeS": "104300", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 58, + "idx": 28, + "aProdX": 18, + "aOutR": true, + "aTimeS": "104400", + "aTZOffset": 60, + "dProdX": 18, + "dInR": true, + "dTimeS": "104400", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 59, + "idx": 29, + "aProdX": 18, + "aOutR": true, + "aTimeS": "104500", + "aTZOffset": 60, + "dProdX": 18, + "dInR": true, + "dTimeS": "104500", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 61, + "idx": 30, + "aProdX": 18, + "aOutR": true, + "aTimeS": "104700", + "aTZOffset": 60, + "dProdX": 18, + "dInR": true, + "dTimeS": "104700", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 63, + "idx": 31, + "aProdX": 18, + "aOutR": true, + "aTimeS": "104800", + "aTZOffset": 60, + "dProdX": 18, + "dInR": true, + "dTimeS": "104800", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 65, + "idx": 32, + "aProdX": 18, + "aOutR": true, + "aTimeS": "105000", + "aTZOffset": 60, + "dProdX": 18, + "dInR": true, + "dTimeS": "105000", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 23, + "idx": 33, + "aProdX": 18, + "aOutR": true, + "aTimeS": "105200", + "aTZOffset": 60, + "type": "N" + } + ], + "freq": { + "minC": 10, + "maxC": 10, + "numC": 13 + }, + "ctxRecon": "T$A=1@O=Adunistraße, München@L=790090@a=128@$A=1@O=Pündterplatz, München@L=622912@a=128@$202011161008$202011161052$ 53$$1$$$", + "subscr": "N", + "prodL": [ + { + "prodX": 18, + "fLocX": 22, + "tLocX": 23, + "fIdx": 6, + "tIdx": 33 + } + ] + }, + "minChg": "000900" + }, + { + "type": "WALK", + "icoX": 7, + "dep": { + "locX": 23, + "dInR": true, + "dTimeS": "105200", + "dTZOffset": 60, + "type": "N" + }, + "arr": { + "locX": 1, + "aOutR": true, + "aTimeS": "110100", + "aTZOffset": 60, + "type": "N" + }, + "gis": { + "dist": 659, + "durS": "000900", + "ctx": "G|1|G@F|A=1@O=Pündterplatz, München@X=11576866@Y=48162603@U=80@L=622912@|A=1@O=Karl-Theodor-Straße, München@X=11574043@Y=48166918@U=80@L=621790@|16112020|105200|110100|fb|ft@0@2000@120@1@100@1@1000@0@@@@@false@0@-1@$f@$f@$f@$f@$f@$§bt@0@2000@120@1@100@1@1000@0@@@@@false@0@-1@$f@$f@$f@$f@$f@$§tt@0@5000@120@1@100@1@2500@0@@@@@false@0@-1@$t@0@25000@120@1@100@1@3000@0@@@@@false@0@-1@$f@$f@$f@$f@$§|", + "gisPrvr": "E", + "getDescr": true, + "getPoly": true + } + } + ], + "ctxRecon": "¶HKI¶G@F$A=1@O=München-Mittersendling@L=8004154@a=128@$A=1@O=Adunistraße, München@L=790090@a=128@$202011161002$202011161008$$$1$$$§T$A=1@O=Adunistraße, München@L=790090@a=128@$A=1@O=Pündterplatz, München@L=622912@a=128@$202011161008$202011161052$ 53$$1$$$§G@F$A=1@O=Pündterplatz, München@L=622912@a=128@$A=1@O=Karl-Theodor-Straße, München@L=621790@a=128@$202011161052$202011161101$$$1$$$¶GP¶ft@0@2000@120@1@100@1@1000@0@@@@@false@0@-1@$f@$f@$f@$f@$f@$§bt@0@2000@120@1@100@1@1000@0@@@@@false@0@-1@$f@$f@$f@$f@$f@$§tt@0@5000@120@1@100@1@2500@0@@@@@false@0@-1@$t@0@25000@120@1@100@1@3000@0@@@@@false@0@-1@$f@$f@$f@$f@$§", + "freq": { + "minC": 10 + }, + "conSubscr": "N", + "recState": "U", + "sotRating": 0, + "isSotCon": false, + "showARSLink": false, + "sotCtxt": { + "calcDate": "20201115", + "locMode": "FROM_START", + "reqMode": "UNKNOWN", + "calcTime": "143055" + }, + "cksum": "43edeca7_3", + "cksumDti": "59cf890b_3" + }, + { + "cid": "C-2", + "date": "20201116", + "dur": "003400", + "chg": 1, + "sDays": { + "sDaysR": "runs 15. Nov until 12. Dec 2020 ", + "sDaysB": "FF0000000000000000000000000000000000000000000000000000000000000000000000000000003FFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + "dep": { + "locX": 0, + "idx": 20, + "dProdX": 19, + "dPlatfS": "2", + "dInR": true, + "dTimeS": "100400", + "dTZOffset": 60, + "type": "N" + }, + "arr": { + "locX": 1, + "aOutR": true, + "aTimeS": "103800", + "aTZOffset": 60, + "type": "N" + }, + "secL": [ + { + "type": "JNY", + "icoX": 2, + "dep": { + "locX": 0, + "idx": 20, + "dProdX": 19, + "dPlatfS": "2", + "dInR": true, + "dTimeS": "100400", + "dTZOffset": 60, + "type": "N" + }, + "arr": { + "locX": 67, + "idx": 21, + "aProdX": 19, + "aPlatfS": "2", + "aOutR": true, + "aTimeS": "100500", + "aTZOffset": 60, + "type": "N" + }, + "jny": { + "jid": "1|9612|1|80|16112020", + "prodX": 22, + "dirTxt": "Höllriegelskreuth", + "status": "P", + "isRchbl": true, + "stopL": [ + { + "locX": 0, + "idx": 20, + "dProdX": 22, + "dPlatfS": "2", + "dInR": true, + "dTimeS": "100400", + "dDirTxt": "Höllriegelskreuth", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 67, + "idx": 21, + "aProdX": 22, + "aPlatfS": "2", + "aOutR": true, + "aTimeS": "100500", + "aTZOffset": 60, + "type": "N" + } + ], + "freq": { + "minC": 20, + "maxC": 20, + "numC": 7 + }, + "ctxRecon": "T$A=1@O=München-Mittersendling@L=8004154@a=128@$A=1@O=München Siemenswerke@L=8004137@a=128@$202011161004$202011161005$S 7$$1$$$", + "msgL": [ + { + "type": "REM", + "remX": 0, + "fLocX": 0, + "tLocX": 67, + "tagL": [ + "RES_JNY_DTL" + ], + "sort": 1126170624 + }, + { + "type": "REM", + "remX": 1, + "fLocX": 0, + "tLocX": 67, + "tagL": [ + "RES_JNY_DTL_L" + ], + "sort": 1141899264 + }, + { + "type": "REM", + "remX": 2, + "fLocX": 0, + "tLocX": 67, + "tagL": [ + "RES_JNY_DTL" + ], + "sort": 1141899264 + }, + { + "type": "REM", + "remX": 3, + "fLocX": 0, + "tLocX": 67, + "tagL": [ + "RES_JNY_DTL_L" + ], + "sort": 1152385024 + } + ], + "chRatingSoll": 2, + "subscr": "F", + "chgDurR": 10, + "prodL": [ + { + "prodX": 22, + "fLocX": 0, + "tLocX": 67, + "fIdx": 20, + "tIdx": 21 + } + ] + }, + "minChg": "001000" + }, + { + "type": "WALK", + "icoX": 7, + "dep": { + "locX": 67, + "dInR": true, + "dTimeS": "100500", + "dTZOffset": 60, + "type": "N" + }, + "arr": { + "locX": 68, + "aOutR": true, + "aTimeS": "101500", + "aTZOffset": 60, + "type": "N" + }, + "gis": { + "dist": 500, + "durS": "001000", + "dirGeo": 6, + "ctx": "H|1|W$A=1@O=München Siemenswerke@L=8004137@a=128@$A=1@O=Obersendling, München@L=625016@a=128@$202011161005$202011161015$$$1$$$", + "gisPrvr": "H", + "msgL": [ + { + "type": "REM", + "remX": 4, + "tagL": [ + "RES_JNY_DTL_H2" + ], + "sort": 1099956224 + } + ], + "getDescr": true, + "getPoly": true + } + }, + { + "type": "JNY", + "icoX": 6, + "dep": { + "locX": 68, + "idx": 5, + "dProdX": 11, + "dInR": true, + "dTimeS": "101500", + "dTZOffset": 60, + "type": "N" + }, + "arr": { + "locX": 4, + "idx": 17, + "aProdX": 11, + "aOutR": true, + "aTimeS": "103300", + "aTZOffset": 60, + "type": "N" + }, + "jny": { + "jid": "1|24525|9|80|16112020", + "prodX": 12, + "dirTxt": "Moosach, München", + "dirFlg": "2", + "status": "P", + "isRchbl": true, + "stopL": [ + { + "locX": 68, + "idx": 5, + "dProdX": 12, + "dInR": true, + "dTimeS": "101500", + "dDirTxt": "Moosach, München", + "dDirFlg": "2", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 2, + "idx": 6, + "aProdX": 12, + "aOutR": true, + "aTimeS": "101600", + "aTZOffset": 60, + "dProdX": 12, + "dInR": true, + "dTimeS": "101600", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 6, + "idx": 7, + "aProdX": 12, + "aOutR": true, + "aTimeS": "101800", + "aTZOffset": 60, + "dProdX": 12, + "dInR": true, + "dTimeS": "101800", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 8, + "idx": 8, + "aProdX": 12, + "aOutR": true, + "aTimeS": "102000", + "aTZOffset": 60, + "dProdX": 12, + "dInR": true, + "dTimeS": "102000", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 10, + "idx": 9, + "aProdX": 12, + "aOutR": true, + "aTimeS": "102100", + "aTZOffset": 60, + "dProdX": 12, + "dInR": true, + "dTimeS": "102100", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 11, + "idx": 10, + "aProdX": 12, + "aOutR": true, + "aTimeS": "102200", + "aTZOffset": 60, + "dProdX": 12, + "dInR": true, + "dTimeS": "102200", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 12, + "idx": 11, + "aProdX": 12, + "aOutR": true, + "aTimeS": "102400", + "aTZOffset": 60, + "dProdX": 12, + "dInR": true, + "dTimeS": "102400", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 13, + "idx": 12, + "aProdX": 12, + "aOutR": true, + "aTimeS": "102600", + "aTZOffset": 60, + "dProdX": 12, + "dInR": true, + "dTimeS": "102600", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 15, + "idx": 13, + "aProdX": 12, + "aOutR": true, + "aTimeS": "102700", + "aTZOffset": 60, + "dProdX": 12, + "dInR": true, + "dTimeS": "102700", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 17, + "idx": 14, + "aProdX": 12, + "aOutR": true, + "aTimeS": "102900", + "aTZOffset": 60, + "dProdX": 12, + "dInR": true, + "dTimeS": "102900", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 19, + "idx": 15, + "aProdX": 12, + "aOutR": true, + "aTimeS": "103000", + "aTZOffset": 60, + "dProdX": 12, + "dInR": true, + "dTimeS": "103000", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 21, + "idx": 16, + "aProdX": 12, + "aOutR": true, + "aTimeS": "103100", + "aTZOffset": 60, + "dProdX": 12, + "dInR": true, + "dTimeS": "103100", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 4, + "idx": 17, + "aProdX": 12, + "aOutR": true, + "aTimeS": "103300", + "aTZOffset": 60, + "type": "N" + } + ], + "freq": { + "minC": 10, + "maxC": 10, + "numC": 13 + }, + "ctxRecon": "T$A=1@O=Obersendling, München@L=625016@a=128@$A=1@O=Bonner Platz, München@L=624333@a=128@$202011161015$202011161033$U 3$$1$$$", + "subscr": "N", + "prodL": [ + { + "prodX": 12, + "fLocX": 68, + "tLocX": 4, + "fIdx": 5, + "tIdx": 17 + } + ] + }, + "minChg": "000500" + }, + { + "type": "WALK", + "icoX": 7, + "dep": { + "locX": 4, + "dInR": true, + "dTimeS": "103300", + "dTZOffset": 60, + "type": "N" + }, + "arr": { + "locX": 1, + "aOutR": true, + "aTimeS": "103800", + "aTZOffset": 60, + "type": "N" + }, + "gis": { + "dist": 353, + "durS": "000500", + "ctx": "G|1|G@F|A=1@O=Bonner Platz, München@X=11578151@Y=48166702@U=80@L=624333@|A=1@O=Karl-Theodor-Straße, München@X=11574043@Y=48166918@U=80@L=621790@|16112020|103300|103800|fb|ft@0@2000@120@1@100@1@1000@0@@@@@false@0@-1@$f@$f@$f@$f@$f@$§bt@0@2000@120@1@100@1@1000@0@@@@@false@0@-1@$f@$f@$f@$f@$f@$§tt@0@5000@120@1@100@1@2500@0@@@@@false@0@-1@$t@0@25000@120@1@100@1@3000@0@@@@@false@0@-1@$f@$f@$f@$f@$§|", + "gisPrvr": "E", + "getDescr": true, + "getPoly": true + } + } + ], + "ctxRecon": "¶HKI¶T$A=1@O=München-Mittersendling@L=8004154@a=128@$A=1@O=München Siemenswerke@L=8004137@a=128@$202011161004$202011161005$S 7$$1$$$§W$A=1@O=München Siemenswerke@L=8004137@a=128@$A=1@O=Obersendling, München@L=625016@a=128@$202011161005$202011161015$$$1$$$§T$A=1@O=Obersendling, München@L=625016@a=128@$A=1@O=Bonner Platz, München@L=624333@a=128@$202011161015$202011161033$U 3$$1$$$§G@F$A=1@O=Bonner Platz, München@L=624333@a=128@$A=1@O=Karl-Theodor-Straße, München@L=621790@a=128@$202011161033$202011161038$$$1$$$¶GP¶ft@0@2000@120@1@100@1@1000@0@@@@@false@0@-1@$f@$f@$f@$f@$f@$§bt@0@2000@120@1@100@1@1000@0@@@@@false@0@-1@$f@$f@$f@$f@$f@$§tt@0@5000@120@1@100@1@2500@0@@@@@false@0@-1@$t@0@25000@120@1@100@1@3000@0@@@@@false@0@-1@$f@$f@$f@$f@$§", + "freq": { + "minC": 20 + }, + "conSubscr": "P", + "recState": "U", + "sotRating": 0, + "isSotCon": false, + "showARSLink": false, + "sotCtxt": { + "cnLocX": 0, + "calcDate": "20201115", + "jid": "1|9612|1|80|-1", + "locMode": "FROM_START", + "pLocX": 0, + "reqMode": "UNKNOWN", + "sectX": 0, + "calcTime": "143055" + }, + "cksum": "88112d2f_3", + "cksumDti": "f76189b5_3" + }, + { + "cid": "C-3", + "date": "20201116", + "dur": "003700", + "chg": 0, + "sDays": { + "sDaysR": "runs 15. Nov until 12. Dec 2020 ", + "sDaysB": "FF0000000000000000000000000000000000000000000000000000000000000000000000000000003FFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + "dep": { + "locX": 0, + "dInR": true, + "dTimeS": "101100", + "dTZOffset": 60, + "type": "N" + }, + "arr": { + "locX": 1, + "aOutR": true, + "aTimeS": "104800", + "aTZOffset": 60, + "type": "N" + }, + "secL": [ + { + "type": "WALK", + "icoX": 7, + "dep": { + "locX": 0, + "dInR": true, + "dTimeS": "101100", + "dTZOffset": 60, + "type": "N" + }, + "arr": { + "locX": 2, + "aOutR": true, + "aTimeS": "102600", + "aTZOffset": 60, + "type": "N" + }, + "gis": { + "dist": 1201, + "durS": "001500", + "ctx": "G|1|G@F|A=1@O=München-Mittersendling@X=11536351@Y=48107823@U=80@L=8004154@|A=1@O=Thalkirchen (Tierpark), München@X=11546015@Y=48102708@U=80@L=625236@|16112020|101100|102600|bf|ft@0@2000@120@1@100@1@1000@0@@@@@false@0@-1@$f@$f@$f@$f@$f@$§bt@0@2000@120@1@100@1@1000@0@@@@@false@0@-1@$f@$f@$f@$f@$f@$§tt@0@5000@120@1@100@1@2500@0@@@@@false@0@-1@$t@0@25000@120@1@100@1@3000@0@@@@@false@0@-1@$f@$f@$f@$f@$§|", + "gisPrvr": "E", + "getDescr": true, + "getPoly": true + } + }, + { + "type": "JNY", + "icoX": 6, + "dep": { + "locX": 2, + "idx": 6, + "dProdX": 24, + "dInR": true, + "dTimeS": "102600", + "dTZOffset": 60, + "type": "N" + }, + "arr": { + "locX": 4, + "idx": 17, + "aProdX": 24, + "aOutR": true, + "aTimeS": "104300", + "aTZOffset": 60, + "type": "N" + }, + "jny": { + "jid": "1|24525|10|80|16112020", + "prodX": 25, + "dirTxt": "Moosach, München", + "dirFlg": "2", + "status": "P", + "isRchbl": true, + "stopL": [ + { + "locX": 2, + "idx": 6, + "dProdX": 25, + "dInR": true, + "dTimeS": "102600", + "dDirTxt": "Moosach, München", + "dDirFlg": "2", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 6, + "idx": 7, + "aProdX": 25, + "aOutR": true, + "aTimeS": "102800", + "aTZOffset": 60, + "dProdX": 25, + "dInR": true, + "dTimeS": "102800", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 8, + "idx": 8, + "aProdX": 25, + "aOutR": true, + "aTimeS": "103000", + "aTZOffset": 60, + "dProdX": 25, + "dInR": true, + "dTimeS": "103000", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 10, + "idx": 9, + "aProdX": 25, + "aOutR": true, + "aTimeS": "103100", + "aTZOffset": 60, + "dProdX": 25, + "dInR": true, + "dTimeS": "103100", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 11, + "idx": 10, + "aProdX": 25, + "aOutR": true, + "aTimeS": "103200", + "aTZOffset": 60, + "dProdX": 25, + "dInR": true, + "dTimeS": "103200", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 12, + "idx": 11, + "aProdX": 25, + "aOutR": true, + "aTimeS": "103400", + "aTZOffset": 60, + "dProdX": 25, + "dInR": true, + "dTimeS": "103400", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 13, + "idx": 12, + "aProdX": 25, + "aOutR": true, + "aTimeS": "103600", + "aTZOffset": 60, + "dProdX": 25, + "dInR": true, + "dTimeS": "103600", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 15, + "idx": 13, + "aProdX": 25, + "aOutR": true, + "aTimeS": "103700", + "aTZOffset": 60, + "dProdX": 25, + "dInR": true, + "dTimeS": "103700", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 17, + "idx": 14, + "aProdX": 25, + "aOutR": true, + "aTimeS": "103900", + "aTZOffset": 60, + "dProdX": 25, + "dInR": true, + "dTimeS": "103900", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 19, + "idx": 15, + "aProdX": 25, + "aOutR": true, + "aTimeS": "104000", + "aTZOffset": 60, + "dProdX": 25, + "dInR": true, + "dTimeS": "104000", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 21, + "idx": 16, + "aProdX": 25, + "aOutR": true, + "aTimeS": "104100", + "aTZOffset": 60, + "dProdX": 25, + "dInR": true, + "dTimeS": "104100", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 4, + "idx": 17, + "aProdX": 25, + "aOutR": true, + "aTimeS": "104300", + "aTZOffset": 60, + "type": "N" + } + ], + "freq": { + "minC": 10, + "maxC": 10, + "numC": 13 + }, + "ctxRecon": "T$A=1@O=Thalkirchen (Tierpark), München@L=625236@a=128@$A=1@O=Bonner Platz, München@L=624333@a=128@$202011161026$202011161043$U 3$$1$$$", + "subscr": "N", + "prodL": [ + { + "prodX": 25, + "fLocX": 2, + "tLocX": 4, + "fIdx": 6, + "tIdx": 17 + } + ] + }, + "minChg": "000500" + }, + { + "type": "WALK", + "icoX": 7, + "dep": { + "locX": 4, + "dInR": true, + "dTimeS": "104300", + "dTZOffset": 60, + "type": "N" + }, + "arr": { + "locX": 1, + "aOutR": true, + "aTimeS": "104800", + "aTZOffset": 60, + "type": "N" + }, + "gis": { + "dist": 353, + "durS": "000500", + "ctx": "G|1|G@F|A=1@O=Bonner Platz, München@X=11578151@Y=48166702@U=80@L=624333@|A=1@O=Karl-Theodor-Straße, München@X=11574043@Y=48166918@U=80@L=621790@|16112020|104300|104800|fb|ft@0@2000@120@1@100@1@1000@0@@@@@false@0@-1@$f@$f@$f@$f@$f@$§bt@0@2000@120@1@100@1@1000@0@@@@@false@0@-1@$f@$f@$f@$f@$f@$§tt@0@5000@120@1@100@1@2500@0@@@@@false@0@-1@$t@0@25000@120@1@100@1@3000@0@@@@@false@0@-1@$f@$f@$f@$f@$§|", + "gisPrvr": "E", + "getDescr": true, + "getPoly": true + } + } + ], + "ctxRecon": "¶HKI¶G@F$A=1@O=München-Mittersendling@L=8004154@a=128@$A=1@O=Thalkirchen (Tierpark), München@L=625236@a=128@$202011161011$202011161026$$$1$$$§T$A=1@O=Thalkirchen (Tierpark), München@L=625236@a=128@$A=1@O=Bonner Platz, München@L=624333@a=128@$202011161026$202011161043$U 3$$1$$$§G@F$A=1@O=Bonner Platz, München@L=624333@a=128@$A=1@O=Karl-Theodor-Straße, München@L=621790@a=128@$202011161043$202011161048$$$1$$$¶GP¶ft@0@2000@120@1@100@1@1000@0@@@@@false@0@-1@$f@$f@$f@$f@$f@$§bt@0@2000@120@1@100@1@1000@0@@@@@false@0@-1@$f@$f@$f@$f@$f@$§tt@0@5000@120@1@100@1@2500@0@@@@@false@0@-1@$t@0@25000@120@1@100@1@3000@0@@@@@false@0@-1@$f@$f@$f@$f@$§", + "freq": { + "minC": 10 + }, + "conSubscr": "N", + "recState": "U", + "sotRating": 0, + "isSotCon": false, + "showARSLink": false, + "sotCtxt": { + "calcDate": "20201115", + "locMode": "FROM_START", + "reqMode": "UNKNOWN", + "calcTime": "143055" + }, + "cksum": "e409aaf9_3", + "cksumDti": "d4ad4942_3" + }, + { + "cid": "C-4", + "date": "20201116", + "dur": "005900", + "chg": 0, + "sDays": { + "sDaysR": "runs 16. Nov until 12. Dec 2020 Mo - Sa ", + "sDaysB": "7E8DB9F7EFDFBF7EFDFBF7EFDFBF7A7DFBD7EFDDBF3EEDFBF7EFDFBF7EFDF3F7EFDFBF7EF9FBF7EFDFBF7EFDFBF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + "dep": { + "locX": 0, + "dInR": true, + "dTimeS": "101200", + "dTZOffset": 60, + "type": "N" + }, + "arr": { + "locX": 1, + "aOutR": true, + "aTimeS": "111100", + "aTZOffset": 60, + "type": "N" + }, + "secL": [ + { + "type": "WALK", + "icoX": 7, + "dep": { + "locX": 0, + "dInR": true, + "dTimeS": "101200", + "dTZOffset": 60, + "type": "N" + }, + "arr": { + "locX": 22, + "aOutR": true, + "aTimeS": "101800", + "aTZOffset": 60, + "type": "N" + }, + "gis": { + "dist": 430, + "durS": "000600", + "ctx": "G|1|G@F|A=1@O=München-Mittersendling@X=11536351@Y=48107823@U=80@L=8004154@|A=1@O=Adunistraße, München@X=11534356@Y=48109297@U=80@L=790090@|16112020|101200|101800|bf|ft@0@2000@120@1@100@1@1000@0@@@@@false@0@-1@$f@$f@$f@$f@$f@$§bt@0@2000@120@1@100@1@1000@0@@@@@false@0@-1@$f@$f@$f@$f@$f@$§tt@0@5000@120@1@100@1@2500@0@@@@@false@0@-1@$t@0@25000@120@1@100@1@3000@0@@@@@false@0@-1@$f@$f@$f@$f@$§|", + "gisPrvr": "E", + "getDescr": true, + "getPoly": true + } + }, + { + "type": "JNY", + "icoX": 5, + "dep": { + "locX": 22, + "idx": 6, + "dProdX": 26, + "dInR": true, + "dTimeS": "101800", + "dTZOffset": 60, + "type": "N" + }, + "arr": { + "locX": 23, + "idx": 33, + "aProdX": 26, + "aOutR": true, + "aTimeS": "110200", + "aTZOffset": 60, + "type": "N" + }, + "jny": { + "jid": "1|23698|15|80|16112020", + "prodX": 27, + "dirTxt": "Münchner Freiheit, München", + "dirFlg": "2", + "status": "P", + "isRchbl": true, + "stopL": [ + { + "locX": 22, + "idx": 6, + "dProdX": 27, + "dInR": true, + "dTimeS": "101800", + "dDirTxt": "Münchner Freiheit, München", + "dDirFlg": "2", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 24, + "idx": 7, + "aProdX": 27, + "aOutR": true, + "aTimeS": "102000", + "aTZOffset": 60, + "dProdX": 27, + "dInR": true, + "dTimeS": "102000", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 26, + "idx": 8, + "aProdX": 27, + "aOutR": true, + "aTimeS": "102200", + "aTZOffset": 60, + "dProdX": 27, + "dInR": true, + "dTimeS": "102400", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 28, + "idx": 9, + "aProdX": 27, + "aOutR": true, + "aTimeS": "102600", + "aTZOffset": 60, + "dProdX": 27, + "dInR": true, + "dTimeS": "102600", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 30, + "idx": 10, + "aProdX": 27, + "aOutR": true, + "aTimeS": "102700", + "aTZOffset": 60, + "dProdX": 27, + "dInR": true, + "dTimeS": "102700", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 32, + "idx": 11, + "aProdX": 27, + "aOutR": true, + "aTimeS": "102900", + "aTZOffset": 60, + "dProdX": 27, + "dInR": true, + "dTimeS": "102900", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 34, + "idx": 12, + "aProdX": 27, + "aOutR": true, + "aTimeS": "103100", + "aTZOffset": 60, + "dProdX": 27, + "dInR": true, + "dTimeS": "103100", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 35, + "idx": 13, + "aProdX": 27, + "aOutR": true, + "aTimeS": "103200", + "aTZOffset": 60, + "dProdX": 27, + "dInR": true, + "dTimeS": "103200", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 36, + "idx": 14, + "aProdX": 27, + "aOutR": true, + "aTimeS": "103300", + "aTZOffset": 60, + "dProdX": 27, + "dInR": true, + "dTimeS": "103300", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 38, + "idx": 15, + "aProdX": 27, + "aOutR": true, + "aTimeS": "103400", + "aTZOffset": 60, + "dProdX": 27, + "dInR": true, + "dTimeS": "103400", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 40, + "idx": 16, + "aProdX": 27, + "aOutR": true, + "aTimeS": "103500", + "aTZOffset": 60, + "dProdX": 27, + "dInR": true, + "dTimeS": "103500", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 42, + "idx": 17, + "aProdX": 27, + "aOutR": true, + "aTimeS": "103600", + "aTZOffset": 60, + "dProdX": 27, + "dInR": true, + "dTimeS": "103600", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 43, + "idx": 18, + "aProdX": 27, + "aOutR": true, + "aTimeS": "103700", + "aTZOffset": 60, + "dProdX": 27, + "dInR": true, + "dTimeS": "103700", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 44, + "idx": 19, + "aProdX": 27, + "aOutR": true, + "aTimeS": "103900", + "aTZOffset": 60, + "dProdX": 27, + "dInR": true, + "dTimeS": "103900", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 46, + "idx": 20, + "aProdX": 27, + "aOutR": true, + "aTimeS": "104100", + "aTZOffset": 60, + "dProdX": 27, + "dInR": true, + "dTimeS": "104100", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 48, + "idx": 21, + "aProdX": 27, + "aOutR": true, + "aTimeS": "104300", + "aTZOffset": 60, + "dProdX": 27, + "dInR": true, + "dTimeS": "104300", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 49, + "idx": 22, + "aProdX": 27, + "aOutR": true, + "aTimeS": "104400", + "aTZOffset": 60, + "dProdX": 27, + "dInR": true, + "dTimeS": "104400", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 50, + "idx": 23, + "aProdX": 27, + "aOutR": true, + "aTimeS": "104600", + "aTZOffset": 60, + "dProdX": 27, + "dInR": true, + "dTimeS": "104600", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 52, + "idx": 24, + "aProdX": 27, + "aOutR": true, + "aTimeS": "104800", + "aTZOffset": 60, + "dProdX": 27, + "dInR": true, + "dTimeS": "104800", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 54, + "idx": 25, + "aProdX": 27, + "aOutR": true, + "aTimeS": "105000", + "aTZOffset": 60, + "dProdX": 27, + "dInR": true, + "dTimeS": "105000", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 55, + "idx": 26, + "aProdX": 27, + "aOutR": true, + "aTimeS": "105100", + "aTZOffset": 60, + "dProdX": 27, + "dInR": true, + "dTimeS": "105100", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 57, + "idx": 27, + "aProdX": 27, + "aOutR": true, + "aTimeS": "105300", + "aTZOffset": 60, + "dProdX": 27, + "dInR": true, + "dTimeS": "105300", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 58, + "idx": 28, + "aProdX": 27, + "aOutR": true, + "aTimeS": "105400", + "aTZOffset": 60, + "dProdX": 27, + "dInR": true, + "dTimeS": "105400", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 59, + "idx": 29, + "aProdX": 27, + "aOutR": true, + "aTimeS": "105500", + "aTZOffset": 60, + "dProdX": 27, + "dInR": true, + "dTimeS": "105500", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 61, + "idx": 30, + "aProdX": 27, + "aOutR": true, + "aTimeS": "105700", + "aTZOffset": 60, + "dProdX": 27, + "dInR": true, + "dTimeS": "105700", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 63, + "idx": 31, + "aProdX": 27, + "aOutR": true, + "aTimeS": "105800", + "aTZOffset": 60, + "dProdX": 27, + "dInR": true, + "dTimeS": "105800", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 65, + "idx": 32, + "aProdX": 27, + "aOutR": true, + "aTimeS": "110000", + "aTZOffset": 60, + "dProdX": 27, + "dInR": true, + "dTimeS": "110000", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 23, + "idx": 33, + "aProdX": 27, + "aOutR": true, + "aTimeS": "110200", + "aTZOffset": 60, + "type": "N" + } + ], + "freq": { + "minC": 10, + "maxC": 10, + "numC": 13 + }, + "ctxRecon": "T$A=1@O=Adunistraße, München@L=790090@a=128@$A=1@O=Pündterplatz, München@L=622912@a=128@$202011161018$202011161102$ 53$$1$$$", + "subscr": "N", + "prodL": [ + { + "prodX": 27, + "fLocX": 22, + "tLocX": 23, + "fIdx": 6, + "tIdx": 33 + } + ] + }, + "minChg": "000900" + }, + { + "type": "WALK", + "icoX": 7, + "dep": { + "locX": 23, + "dInR": true, + "dTimeS": "110200", + "dTZOffset": 60, + "type": "N" + }, + "arr": { + "locX": 1, + "aOutR": true, + "aTimeS": "111100", + "aTZOffset": 60, + "type": "N" + }, + "gis": { + "dist": 659, + "durS": "000900", + "ctx": "G|1|G@F|A=1@O=Pündterplatz, München@X=11576866@Y=48162603@U=80@L=622912@|A=1@O=Karl-Theodor-Straße, München@X=11574043@Y=48166918@U=80@L=621790@|16112020|110200|111100|fb|ft@0@2000@120@1@100@1@1000@0@@@@@false@0@-1@$f@$f@$f@$f@$f@$§bt@0@2000@120@1@100@1@1000@0@@@@@false@0@-1@$f@$f@$f@$f@$f@$§tt@0@5000@120@1@100@1@2500@0@@@@@false@0@-1@$t@0@25000@120@1@100@1@3000@0@@@@@false@0@-1@$f@$f@$f@$f@$§|", + "gisPrvr": "E", + "getDescr": true, + "getPoly": true + } + } + ], + "ctxRecon": "¶HKI¶G@F$A=1@O=München-Mittersendling@L=8004154@a=128@$A=1@O=Adunistraße, München@L=790090@a=128@$202011161012$202011161018$$$1$$$§T$A=1@O=Adunistraße, München@L=790090@a=128@$A=1@O=Pündterplatz, München@L=622912@a=128@$202011161018$202011161102$ 53$$1$$$§G@F$A=1@O=Pündterplatz, München@L=622912@a=128@$A=1@O=Karl-Theodor-Straße, München@L=621790@a=128@$202011161102$202011161111$$$1$$$¶GP¶ft@0@2000@120@1@100@1@1000@0@@@@@false@0@-1@$f@$f@$f@$f@$f@$§bt@0@2000@120@1@100@1@1000@0@@@@@false@0@-1@$f@$f@$f@$f@$f@$§tt@0@5000@120@1@100@1@2500@0@@@@@false@0@-1@$t@0@25000@120@1@100@1@3000@0@@@@@false@0@-1@$f@$f@$f@$f@$§", + "freq": { + "minC": 10 + }, + "conSubscr": "N", + "recState": "U", + "sotRating": 0, + "isSotCon": false, + "showARSLink": false, + "sotCtxt": { + "calcDate": "20201115", + "locMode": "FROM_START", + "reqMode": "UNKNOWN", + "calcTime": "143055" + }, + "cksum": "5db863da_3", + "cksumDti": "2bb9e7d8_3" + }, + { + "cid": "C-5", + "date": "20201116", + "dur": "002800", + "chg": 3, + "sDays": { + "sDaysR": "runs 16. until 27. Nov 2020 Mo - Fr ", + "sDaysB": "000000000000000000000000000000000000000000000000000000000000000000000000000000001F3E7CF80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + "dep": { + "locX": 0, + "idx": 11, + "dProdX": 28, + "dPlatfS": "1", + "dInR": true, + "dTimeS": "101500", + "dTZOffset": 60, + "type": "N" + }, + "arr": { + "locX": 70, + "idx": 9, + "aProdX": 29, + "aOutR": true, + "aTimeS": "104300", + "aTZOffset": 60, + "type": "N" + }, + "secL": [ + { + "type": "JNY", + "icoX": 2, + "dep": { + "locX": 0, + "idx": 11, + "dProdX": 28, + "dPlatfS": "1", + "dInR": true, + "dTimeS": "101500", + "dTZOffset": 60, + "type": "N" + }, + "arr": { + "locX": 27, + "idx": 12, + "aProdX": 28, + "aPlatfS": "1", + "aOutR": true, + "aTimeS": "101700", + "aTZOffset": 60, + "type": "N" + }, + "jny": { + "jid": "1|9605|2|80|16112020", + "prodX": 30, + "dirTxt": "Höhenkirchen-Siegertsbrunn", + "status": "P", + "isRchbl": true, + "stopL": [ + { + "locX": 0, + "idx": 11, + "dProdX": 30, + "dPlatfS": "1", + "dInR": true, + "dTimeS": "101500", + "dDirTxt": "Höhenkirchen-Siegertsbrunn", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 27, + "idx": 12, + "aProdX": 30, + "aPlatfS": "1", + "aOutR": true, + "aTimeS": "101700", + "aTZOffset": 60, + "type": "N" + } + ], + "freq": { + "minC": 20, + "maxC": 20, + "numC": 7 + }, + "ctxRecon": "T$A=1@O=München-Mittersendling@L=8004154@a=128@$A=1@O=München Harras@L=8004130@a=128@$202011161015$202011161017$S 7$$1$$$", + "msgL": [ + { + "type": "REM", + "remX": 0, + "fLocX": 0, + "tLocX": 27, + "tagL": [ + "RES_JNY_DTL" + ], + "sort": 1126170624 + }, + { + "type": "REM", + "remX": 1, + "fLocX": 0, + "tLocX": 27, + "tagL": [ + "RES_JNY_DTL_L" + ], + "sort": 1141899264 + }, + { + "type": "REM", + "remX": 2, + "fLocX": 0, + "tLocX": 27, + "tagL": [ + "RES_JNY_DTL" + ], + "sort": 1141899264 + }, + { + "type": "REM", + "remX": 3, + "fLocX": 0, + "tLocX": 27, + "tagL": [ + "RES_JNY_DTL_L" + ], + "sort": 1152385024 + } + ], + "chRatingSoll": 2, + "subscr": "F", + "chgDurR": 3, + "prodL": [ + { + "prodX": 30, + "fLocX": 0, + "tLocX": 27, + "fIdx": 11, + "tIdx": 12 + } + ] + }, + "minChg": "000300" + }, + { + "type": "WALK", + "icoX": 7, + "dep": { + "locX": 27, + "dInR": true, + "dTimeS": "101700", + "dTZOffset": 60, + "type": "N" + }, + "arr": { + "locX": 71, + "aOutR": true, + "aTimeS": "102000", + "aTZOffset": 60, + "type": "N" + }, + "gis": { + "dist": 152, + "durS": "000300", + "dirGeo": 28, + "ctx": "H|1|W$A=1@O=München Harras@L=8004130@a=128@$A=1@O=Harras, München@L=624602@a=128@$202011161017$202011161020$$$1$$$", + "gisPrvr": "H", + "getDescr": true, + "getPoly": true + } + }, + { + "type": "JNY", + "icoX": 15, + "dep": { + "locX": 71, + "idx": 0, + "dProdX": 37, + "dInR": true, + "dTimeS": "102000", + "dProgType": "PROGNOSED", + "dTZOffset": 60, + "type": "N" + }, + "arr": { + "locX": 12, + "idx": 4, + "aProdX": 37, + "aOutR": true, + "aTimeS": "102600", + "aTZOffset": 60, + "type": "N" + }, + "jny": { + "jid": "1|27512|1|80|16112020", + "prodX": 38, + "dirTxt": "Münchner Freiheit, München", + "dirFlg": "2", + "status": "P", + "isRchbl": true, + "stopL": [ + { + "locX": 71, + "idx": 0, + "dProdX": 38, + "dInR": true, + "dTimeS": "102000", + "dProgType": "PROGNOSED", + "dDirTxt": "Münchner Freiheit, München", + "dDirFlg": "2", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 8, + "idx": 1, + "aProdX": 38, + "aOutR": true, + "aTimeS": "102200", + "aTZOffset": 60, + "dProdX": 38, + "dInR": true, + "dTimeS": "102200", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 10, + "idx": 2, + "aProdX": 38, + "aOutR": true, + "aTimeS": "102300", + "aTZOffset": 60, + "dProdX": 38, + "dInR": true, + "dTimeS": "102300", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 11, + "idx": 3, + "aProdX": 38, + "aOutR": true, + "aTimeS": "102400", + "aTZOffset": 60, + "dProdX": 38, + "dInR": true, + "dTimeS": "102400", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 12, + "idx": 4, + "aProdX": 38, + "aOutR": true, + "aTimeS": "102600", + "aTZOffset": 60, + "type": "N" + } + ], + "freq": { + "minC": 4, + "maxC": 6, + "numC": 25 + }, + "ctxRecon": "T$A=1@O=Harras, München@L=624602@a=128@$A=1@O=Sendlinger Tor, München@L=625176@a=128@$202011161020$202011161026$U 6$$1$$$", + "chRatingSoll": 2, + "subscr": "N", + "chgDurR": 2, + "prodL": [ + { + "prodX": 38, + "fLocX": 71, + "tLocX": 12, + "fIdx": 0, + "tIdx": 4 + } + ] + }, + "minChg": "000200" + }, + { + "type": "WALK", + "icoX": 7, + "dep": { + "locX": 12, + "dInR": true, + "dTimeS": "102600", + "dTZOffset": 60, + "type": "N" + }, + "arr": { + "locX": 72, + "aOutR": true, + "aTimeS": "102800", + "aTZOffset": 60, + "type": "N" + }, + "gis": { + "dist": 56, + "durS": "000200", + "dirGeo": 12, + "ctx": "H|1|W$A=1@O=Sendlinger Tor, München@L=625176@a=128@$A=1@O=Sendlinger Tor, München@L=624625@a=128@$202011161026$202011161028$$$1$$$", + "gisPrvr": "H", + "getDescr": true, + "getPoly": true + } + }, + { + "type": "JNY", + "icoX": 4, + "dep": { + "locX": 72, + "idx": 0, + "dProdX": 58, + "dInR": true, + "dTimeS": "102800", + "dProgType": "PROGNOSED", + "dTZOffset": 60, + "type": "N" + }, + "arr": { + "locX": 73, + "idx": 1, + "aProdX": 58, + "aOutR": true, + "aTimeS": "103000", + "aTZOffset": 60, + "type": "N" + }, + "jny": { + "jid": "1|22977|21|80|16112020", + "prodX": 74, + "dirTxt": "Willibaldplatz, München", + "dirFlg": "2", + "status": "P", + "isRchbl": true, + "stopL": [ + { + "locX": 72, + "idx": 0, + "dProdX": 74, + "dInR": true, + "dTimeS": "102800", + "dProgType": "PROGNOSED", + "dDirTxt": "Willibaldplatz, München", + "dDirFlg": "2", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 73, + "idx": 1, + "aProdX": 74, + "aOutR": true, + "aTimeS": "103000", + "aTZOffset": 60, + "type": "N" + } + ], + "freq": { + "minC": 2, + "maxC": 3, + "numC": 49 + }, + "ctxRecon": "T$A=1@O=Sendlinger Tor, München@L=624625@a=128@$A=1@O=Karlsplatz (Stachus), München@L=624746@a=128@$202011161028$202011161030$ 29$$1$$$", + "chRatingSoll": 2, + "subscr": "N", + "chgDurR": 1, + "prodL": [ + { + "prodX": 74, + "fLocX": 72, + "tLocX": 73, + "fIdx": 0, + "tIdx": 1 + } + ] + }, + "minChg": "000100" + }, + { + "type": "WALK", + "icoX": 7, + "dep": { + "locX": 73, + "dInR": true, + "dTimeS": "103000", + "dTZOffset": 60, + "type": "N" + }, + "arr": { + "locX": 75, + "aOutR": true, + "aTimeS": "103100", + "aTZOffset": 60, + "type": "N" + }, + "gis": { + "dist": 20, + "durS": "000100", + "dirGeo": 20, + "ctx": "H|1|W$A=1@O=Karlsplatz (Stachus), München@L=624746@a=128@$A=1@O=Karlsplatz (Stachus), München@L=624744@a=128@$202011161030$202011161031$$$1$$$", + "gisPrvr": "H", + "getDescr": true, + "getPoly": true + } + }, + { + "type": "JNY", + "icoX": 4, + "dep": { + "locX": 75, + "idx": 0, + "dProdX": 29, + "dInR": true, + "dTimeS": "103100", + "dProgType": "PROGNOSED", + "dTZOffset": 60, + "type": "N" + }, + "arr": { + "locX": 70, + "idx": 9, + "aProdX": 29, + "aOutR": true, + "aTimeS": "104300", + "aTZOffset": 60, + "type": "N" + }, + "jny": { + "jid": "1|22959|2|80|16112020", + "prodX": 75, + "dirTxt": "Scheidplatz, München", + "dirFlg": "2", + "status": "P", + "isRchbl": true, + "stopL": [ + { + "locX": 75, + "idx": 0, + "dProdX": 75, + "dInR": true, + "dTimeS": "103100", + "dProgType": "PROGNOSED", + "dDirTxt": "Scheidplatz, München", + "dDirFlg": "2", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 76, + "idx": 1, + "aProdX": 75, + "aOutR": true, + "aTimeS": "103300", + "aTZOffset": 60, + "dProdX": 75, + "dInR": true, + "dTimeS": "103300", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 78, + "idx": 2, + "aProdX": 75, + "aOutR": true, + "aTimeS": "103400", + "aTZOffset": 60, + "dProdX": 75, + "dInR": true, + "dTimeS": "103400", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 80, + "idx": 3, + "aProdX": 75, + "aOutR": true, + "aTimeS": "103600", + "aTZOffset": 60, + "dProdX": 75, + "dInR": true, + "dTimeS": "103600", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 81, + "idx": 4, + "aProdX": 75, + "aOutR": true, + "aTimeS": "103700", + "aTZOffset": 60, + "dProdX": 75, + "dInR": true, + "dTimeS": "103700", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 82, + "idx": 5, + "aProdX": 75, + "aOutR": true, + "aTimeS": "103800", + "aTZOffset": 60, + "dProdX": 75, + "dInR": true, + "dTimeS": "103800", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 84, + "idx": 6, + "aProdX": 75, + "aOutR": true, + "aTimeS": "103900", + "aTZOffset": 60, + "dProdX": 75, + "dInR": true, + "dTimeS": "103900", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 86, + "idx": 7, + "aProdX": 75, + "aOutR": true, + "aTimeS": "104100", + "aTZOffset": 60, + "dProdX": 75, + "dInR": true, + "dTimeS": "104100", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 87, + "idx": 8, + "aProdX": 75, + "aOutR": true, + "aTimeS": "104200", + "aTZOffset": 60, + "dProdX": 75, + "dInR": true, + "dTimeS": "104200", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 70, + "idx": 9, + "aProdX": 75, + "aOutR": true, + "aTimeS": "104300", + "aTZOffset": 60, + "type": "N" + } + ], + "freq": { + "minC": 10, + "maxC": 10, + "numC": 13 + }, + "ctxRecon": "T$A=1@O=Karlsplatz (Stachus), München@L=624744@a=128@$A=1@O=Karl-Theodor-Straße, München@L=638842@a=128@$202011161031$202011161043$ 28$$1$$$", + "subscr": "N", + "prodL": [ + { + "prodX": 75, + "fLocX": 75, + "tLocX": 70, + "fIdx": 0, + "tIdx": 9 + } + ] + } + } + ], + "ctxRecon": "¶HKI¶T$A=1@O=München-Mittersendling@L=8004154@a=128@$A=1@O=München Harras@L=8004130@a=128@$202011161015$202011161017$S 7$$1$$$§W$A=1@O=München Harras@L=8004130@a=128@$A=1@O=Harras, München@L=624602@a=128@$202011161017$202011161020$$$1$$$§T$A=1@O=Harras, München@L=624602@a=128@$A=1@O=Sendlinger Tor, München@L=625176@a=128@$202011161020$202011161026$U 6$$1$$$§W$A=1@O=Sendlinger Tor, München@L=625176@a=128@$A=1@O=Sendlinger Tor, München@L=624625@a=128@$202011161026$202011161028$$$1$$$§T$A=1@O=Sendlinger Tor, München@L=624625@a=128@$A=1@O=Karlsplatz (Stachus), München@L=624746@a=128@$202011161028$202011161030$ 29$$1$$$§W$A=1@O=Karlsplatz (Stachus), München@L=624746@a=128@$A=1@O=Karlsplatz (Stachus), München@L=624744@a=128@$202011161030$202011161031$$$1$$$§T$A=1@O=Karlsplatz (Stachus), München@L=624744@a=128@$A=1@O=Karl-Theodor-Straße, München@L=638842@a=128@$202011161031$202011161043$ 28$$1$$$", + "freq": { + "minC": 20 + }, + "conSubscr": "P", + "recState": "U", + "sotRating": 0, + "isSotCon": false, + "showARSLink": false, + "sotCtxt": { + "cnLocX": 0, + "calcDate": "20201115", + "jid": "1|9605|2|80|-1", + "locMode": "FROM_START", + "pLocX": 0, + "reqMode": "UNKNOWN", + "sectX": 0, + "calcTime": "143055" + }, + "cksum": "484ac4c9_3", + "cksumDti": "894674a3_3" + }, + { + "cid": "C-6", + "date": "20201116", + "dur": "003000", + "chg": 2, + "sDays": { + "sDaysR": "runs 16. until 27. Nov 2020 Mo - Fr ", + "sDaysB": "000000000000000000000000000000000000000000000000000000000000000000000000000000001F3E7CF80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + "dep": { + "locX": 0, + "idx": 11, + "dProdX": 28, + "dPlatfS": "1", + "dInR": true, + "dTimeS": "101500", + "dTZOffset": 60, + "type": "N" + }, + "arr": { + "locX": 70, + "idx": 1, + "aProdX": 76, + "aOutR": true, + "aTimeS": "104500", + "aTZOffset": 60, + "type": "N" + }, + "secL": [ + { + "type": "JNY", + "icoX": 2, + "dep": { + "locX": 0, + "idx": 11, + "dProdX": 28, + "dPlatfS": "1", + "dInR": true, + "dTimeS": "101500", + "dTZOffset": 60, + "type": "N" + }, + "arr": { + "locX": 88, + "idx": 16, + "aProdX": 28, + "aPlatfS": "1", + "aOutR": true, + "aTimeS": "102700", + "aTZOffset": 60, + "type": "N" + }, + "jny": { + "jid": "1|9605|2|80|16112020", + "prodX": 30, + "dirTxt": "Höhenkirchen-Siegertsbrunn", + "status": "P", + "isRchbl": true, + "stopL": [ + { + "locX": 0, + "idx": 11, + "dProdX": 30, + "dPlatfS": "1", + "dInR": true, + "dTimeS": "101500", + "dDirTxt": "Höhenkirchen-Siegertsbrunn", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 27, + "idx": 12, + "aProdX": 30, + "aPlatfS": "1", + "aOutR": true, + "aTimeS": "101700", + "aTZOffset": 60, + "dProdX": 30, + "dPlatfS": "1", + "dInR": true, + "dTimeS": "101700", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 90, + "idx": 13, + "aProdX": 30, + "aPlatfS": "2", + "aOutR": true, + "aTimeS": "101900", + "aTZOffset": 60, + "dProdX": 30, + "dPlatfS": "2", + "dInR": true, + "dTimeS": "102000", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 47, + "idx": 14, + "aProdX": 30, + "aPlatfS": "4", + "aOutR": true, + "aTimeS": "102200", + "aTZOffset": 60, + "dProdX": 30, + "dPlatfS": "4", + "dInR": true, + "dTimeS": "102400", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 91, + "idx": 15, + "aProdX": 30, + "aPlatfS": "1", + "aOutR": true, + "aTimeS": "102500", + "aTZOffset": 60, + "dProdX": 30, + "dPlatfS": "1", + "dInR": true, + "dTimeS": "102600", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 88, + "idx": 16, + "aProdX": 30, + "aPlatfS": "1", + "aOutR": true, + "aTimeS": "102700", + "aTZOffset": 60, + "type": "N" + } + ], + "freq": { + "minC": 20, + "maxC": 20, + "numC": 7 + }, + "ctxRecon": "T$A=1@O=München-Mittersendling@L=8004154@a=128@$A=1@O=München Hbf (tief)@L=8098263@a=128@$202011161015$202011161027$S 7$$1$$$", + "msgL": [ + { + "type": "REM", + "remX": 0, + "fLocX": 0, + "tLocX": 88, + "tagL": [ + "RES_JNY_DTL" + ], + "sort": 1126170624 + }, + { + "type": "REM", + "remX": 1, + "fLocX": 0, + "tLocX": 88, + "tagL": [ + "RES_JNY_DTL_L" + ], + "sort": 1141899264 + }, + { + "type": "REM", + "remX": 2, + "fLocX": 0, + "tLocX": 88, + "tagL": [ + "RES_JNY_DTL" + ], + "sort": 1141899264 + }, + { + "type": "REM", + "remX": 3, + "fLocX": 0, + "tLocX": 88, + "tagL": [ + "RES_JNY_DTL_L" + ], + "sort": 1152385024 + } + ], + "chRatingSoll": 2, + "subscr": "F", + "chgDurR": 6, + "prodL": [ + { + "prodX": 30, + "fLocX": 0, + "tLocX": 88, + "fIdx": 11, + "tIdx": 16 + } + ] + }, + "minChg": "000300" + }, + { + "type": "WALK", + "icoX": 7, + "dep": { + "locX": 88, + "dInR": true, + "dTimeS": "102700", + "dTZOffset": 60, + "type": "N" + }, + "arr": { + "locX": 92, + "aOutR": true, + "aTimeS": "103000", + "aTZOffset": 60, + "type": "N" + }, + "gis": { + "dist": 134, + "durS": "000300", + "dirGeo": 26, + "ctx": "H|1|W$A=1@O=München Hbf (tief)@L=8098263@a=128@$A=1@O=Hauptbahnhof, München@L=624637@a=128@$202011161027$202011161030$$$1$$$", + "gisPrvr": "H", + "getDescr": true, + "getPoly": true + } + }, + { + "type": "JNY", + "icoX": 10, + "dep": { + "locX": 92, + "idx": 14, + "dProdX": 98, + "dInR": true, + "dTimeS": "103300", + "dTZOffset": 60, + "type": "N" + }, + "arr": { + "locX": 93, + "idx": 19, + "aProdX": 98, + "aOutR": true, + "aTimeS": "104000", + "aTZOffset": 60, + "type": "N" + }, + "jny": { + "jid": "1|23370|7|80|16112020", + "prodX": 104, + "dirTxt": "Harthof, München", + "dirFlg": "2", + "status": "P", + "isRchbl": true, + "stopL": [ + { + "locX": 92, + "idx": 14, + "dProdX": 104, + "dInR": true, + "dTimeS": "103300", + "dDirTxt": "Harthof, München", + "dDirFlg": "2", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 95, + "idx": 15, + "aProdX": 104, + "aOutR": true, + "aTimeS": "103500", + "aTZOffset": 60, + "dProdX": 104, + "dInR": true, + "dTimeS": "103500", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 96, + "idx": 16, + "aProdX": 104, + "aOutR": true, + "aTimeS": "103600", + "aTZOffset": 60, + "dProdX": 104, + "dInR": true, + "dTimeS": "103600", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 97, + "idx": 17, + "aProdX": 104, + "aOutR": true, + "aTimeS": "103700", + "aTZOffset": 60, + "dProdX": 104, + "dInR": true, + "dTimeS": "103700", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 64, + "idx": 18, + "aProdX": 104, + "aOutR": true, + "aTimeS": "103800", + "aTZOffset": 60, + "dProdX": 104, + "dInR": true, + "dTimeS": "103800", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 93, + "idx": 19, + "aProdX": 104, + "aOutR": true, + "aTimeS": "104000", + "aTZOffset": 60, + "type": "N" + } + ], + "freq": { + "minC": 5, + "maxC": 5, + "numC": 25 + }, + "ctxRecon": "T$A=1@O=Hauptbahnhof, München@L=624637@a=128@$A=1@O=Scheidplatz, München@L=624529@a=128@$202011161033$202011161040$U 2$$1$$$", + "chRatingSoll": 2, + "subscr": "N", + "chgDurR": 4, + "prodL": [ + { + "prodX": 104, + "fLocX": 92, + "tLocX": 93, + "fIdx": 14, + "tIdx": 19 + } + ] + }, + "minChg": "000300" + }, + { + "type": "WALK", + "icoX": 7, + "dep": { + "locX": 93, + "dInR": true, + "dTimeS": "104000", + "dTZOffset": 60, + "type": "N" + }, + "arr": { + "locX": 98, + "aOutR": true, + "aTimeS": "104300", + "aTZOffset": 60, + "type": "N" + }, + "gis": { + "dist": 18, + "durS": "000300", + "dirGeo": 24, + "ctx": "H|1|W$A=1@O=Scheidplatz, München@L=624529@a=128@$A=1@O=Scheidplatz, München@L=624388@a=128@$202011161040$202011161043$$$1$$$", + "gisPrvr": "H", + "getDescr": true, + "getPoly": true + } + }, + { + "type": "JNY", + "icoX": 4, + "dep": { + "locX": 98, + "idx": 0, + "dProdX": 76, + "dInR": true, + "dTimeS": "104400", + "dProgType": "PROGNOSED", + "dTZOffset": 60, + "type": "N" + }, + "arr": { + "locX": 70, + "idx": 1, + "aProdX": 76, + "aOutR": true, + "aTimeS": "104500", + "aTZOffset": 60, + "type": "N" + }, + "jny": { + "jid": "1|22954|1|80|16112020", + "prodX": 105, + "dirTxt": "Karlsplatz (Stachus), München", + "dirFlg": "1", + "status": "P", + "isRchbl": true, + "stopL": [ + { + "locX": 98, + "idx": 0, + "dProdX": 105, + "dInR": true, + "dTimeS": "104400", + "dProgType": "PROGNOSED", + "dDirTxt": "Karlsplatz (Stachus), München", + "dDirFlg": "1", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 70, + "idx": 1, + "aProdX": 105, + "aOutR": true, + "aTimeS": "104500", + "aTZOffset": 60, + "type": "N" + } + ], + "freq": { + "minC": 5, + "maxC": 5, + "numC": 25 + }, + "ctxRecon": "T$A=1@O=Scheidplatz, München@L=624388@a=128@$A=1@O=Karl-Theodor-Straße, München@L=638842@a=128@$202011161044$202011161045$ 28$$1$$$", + "subscr": "N", + "prodL": [ + { + "prodX": 105, + "fLocX": 98, + "tLocX": 70, + "fIdx": 0, + "tIdx": 1 + } + ] + } + } + ], + "ctxRecon": "¶HKI¶T$A=1@O=München-Mittersendling@L=8004154@a=128@$A=1@O=München Hbf (tief)@L=8098263@a=128@$202011161015$202011161027$S 7$$1$$$§W$A=1@O=München Hbf (tief)@L=8098263@a=128@$A=1@O=Hauptbahnhof, München@L=624637@a=128@$202011161027$202011161030$$$1$$$§T$A=1@O=Hauptbahnhof, München@L=624637@a=128@$A=1@O=Scheidplatz, München@L=624529@a=128@$202011161033$202011161040$U 2$$1$$$§W$A=1@O=Scheidplatz, München@L=624529@a=128@$A=1@O=Scheidplatz, München@L=624388@a=128@$202011161040$202011161043$$$1$$$§T$A=1@O=Scheidplatz, München@L=624388@a=128@$A=1@O=Karl-Theodor-Straße, München@L=638842@a=128@$202011161044$202011161045$ 28$$1$$$", + "freq": { + "minC": 20 + }, + "conSubscr": "P", + "recState": "U", + "sotRating": 0, + "isSotCon": false, + "showARSLink": false, + "sotCtxt": { + "cnLocX": 0, + "calcDate": "20201115", + "jid": "1|9605|2|80|-1", + "locMode": "FROM_START", + "pLocX": 0, + "reqMode": "UNKNOWN", + "sectX": 0, + "calcTime": "143055" + }, + "cksum": "5fa6c133_3", + "cksumDti": "b1e58a35_3" + }, + { + "cid": "C-7", + "date": "20201116", + "dur": "003800", + "chg": 1, + "sDays": { + "sDaysR": "runs 16. until 28. Nov 2020 Mo - Sa ", + "sDaysB": "00000000000000000000000000007A0003D7EF9DBF3EEDFBF7EFDFBF00000000000FBF7EB9FBF7CFDFBF7EFC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + "dep": { + "locX": 0, + "idx": 11, + "dProdX": 28, + "dPlatfS": "1", + "dInR": true, + "dTimeS": "101500", + "dTZOffset": 60, + "type": "N" + }, + "arr": { + "locX": 70, + "idx": 9, + "aProdX": 106, + "aOutR": true, + "aTimeS": "105300", + "aTZOffset": 60, + "type": "N" + }, + "secL": [ + { + "type": "JNY", + "icoX": 2, + "dep": { + "locX": 0, + "idx": 11, + "dProdX": 28, + "dPlatfS": "1", + "dInR": true, + "dTimeS": "101500", + "dTZOffset": 60, + "type": "N" + }, + "arr": { + "locX": 74, + "idx": 17, + "aProdX": 28, + "aPlatfS": "1", + "aOutR": true, + "aTimeS": "102800", + "aTZOffset": 60, + "type": "N" + }, + "jny": { + "jid": "1|9605|2|80|16112020", + "prodX": 30, + "dirTxt": "Höhenkirchen-Siegertsbrunn", + "status": "P", + "isRchbl": true, + "stopL": [ + { + "locX": 0, + "idx": 11, + "dProdX": 30, + "dPlatfS": "1", + "dInR": true, + "dTimeS": "101500", + "dDirTxt": "Höhenkirchen-Siegertsbrunn", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 27, + "idx": 12, + "aProdX": 30, + "aPlatfS": "1", + "aOutR": true, + "aTimeS": "101700", + "aTZOffset": 60, + "dProdX": 30, + "dPlatfS": "1", + "dInR": true, + "dTimeS": "101700", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 90, + "idx": 13, + "aProdX": 30, + "aPlatfS": "2", + "aOutR": true, + "aTimeS": "101900", + "aTZOffset": 60, + "dProdX": 30, + "dPlatfS": "2", + "dInR": true, + "dTimeS": "102000", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 47, + "idx": 14, + "aProdX": 30, + "aPlatfS": "4", + "aOutR": true, + "aTimeS": "102200", + "aTZOffset": 60, + "dProdX": 30, + "dPlatfS": "4", + "dInR": true, + "dTimeS": "102400", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 91, + "idx": 15, + "aProdX": 30, + "aPlatfS": "1", + "aOutR": true, + "aTimeS": "102500", + "aTZOffset": 60, + "dProdX": 30, + "dPlatfS": "1", + "dInR": true, + "dTimeS": "102600", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 88, + "idx": 16, + "aProdX": 30, + "aPlatfS": "1", + "aOutR": true, + "aTimeS": "102700", + "aTZOffset": 60, + "dProdX": 30, + "dPlatfS": "1", + "dInR": true, + "dTimeS": "102700", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 74, + "idx": 17, + "aProdX": 30, + "aPlatfS": "1", + "aOutR": true, + "aTimeS": "102800", + "aTZOffset": 60, + "type": "N" + } + ], + "freq": { + "minC": 20, + "maxC": 20, + "numC": 7 + }, + "ctxRecon": "T$A=1@O=München-Mittersendling@L=8004154@a=128@$A=1@O=München Karlsplatz@L=8004132@a=128@$202011161015$202011161028$S 7$$1$$$", + "msgL": [ + { + "type": "REM", + "remX": 0, + "fLocX": 0, + "tLocX": 74, + "tagL": [ + "RES_JNY_DTL" + ], + "sort": 1126170624 + }, + { + "type": "REM", + "remX": 1, + "fLocX": 0, + "tLocX": 74, + "tagL": [ + "RES_JNY_DTL_L" + ], + "sort": 1141899264 + }, + { + "type": "REM", + "remX": 2, + "fLocX": 0, + "tLocX": 74, + "tagL": [ + "RES_JNY_DTL" + ], + "sort": 1141899264 + }, + { + "type": "REM", + "remX": 3, + "fLocX": 0, + "tLocX": 74, + "tagL": [ + "RES_JNY_DTL_L" + ], + "sort": 1152385024 + } + ], + "chRatingSoll": 2, + "subscr": "F", + "chgDurR": 13, + "prodL": [ + { + "prodX": 30, + "fLocX": 0, + "tLocX": 74, + "fIdx": 11, + "tIdx": 17 + } + ] + }, + "minChg": "000400" + }, + { + "type": "WALK", + "icoX": 7, + "dep": { + "locX": 74, + "dInR": true, + "dTimeS": "102800", + "dTZOffset": 60, + "type": "N" + }, + "arr": { + "locX": 75, + "aOutR": true, + "aTimeS": "103200", + "aTZOffset": 60, + "type": "N" + }, + "gis": { + "dist": 111, + "durS": "000400", + "dirGeo": 22, + "ctx": "H|1|W$A=1@O=München Karlsplatz@L=8004132@a=128@$A=1@O=Karlsplatz (Stachus), München@L=624744@a=128@$202011161028$202011161032$$$1$$$", + "gisPrvr": "H", + "getDescr": true, + "getPoly": true + } + }, + { + "type": "JNY", + "icoX": 4, + "dep": { + "locX": 75, + "idx": 0, + "dProdX": 106, + "dInR": true, + "dTimeS": "104100", + "dProgType": "PROGNOSED", + "dTZOffset": 60, + "type": "N" + }, + "arr": { + "locX": 70, + "idx": 9, + "aProdX": 106, + "aOutR": true, + "aTimeS": "105300", + "aTZOffset": 60, + "type": "N" + }, + "jny": { + "jid": "1|22959|3|80|16112020", + "prodX": 107, + "dirTxt": "Scheidplatz, München", + "dirFlg": "2", + "status": "P", + "isRchbl": true, + "stopL": [ + { + "locX": 75, + "idx": 0, + "dProdX": 107, + "dInR": true, + "dTimeS": "104100", + "dProgType": "PROGNOSED", + "dDirTxt": "Scheidplatz, München", + "dDirFlg": "2", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 76, + "idx": 1, + "aProdX": 107, + "aOutR": true, + "aTimeS": "104300", + "aTZOffset": 60, + "dProdX": 107, + "dInR": true, + "dTimeS": "104300", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 78, + "idx": 2, + "aProdX": 107, + "aOutR": true, + "aTimeS": "104400", + "aTZOffset": 60, + "dProdX": 107, + "dInR": true, + "dTimeS": "104400", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 80, + "idx": 3, + "aProdX": 107, + "aOutR": true, + "aTimeS": "104600", + "aTZOffset": 60, + "dProdX": 107, + "dInR": true, + "dTimeS": "104600", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 81, + "idx": 4, + "aProdX": 107, + "aOutR": true, + "aTimeS": "104700", + "aTZOffset": 60, + "dProdX": 107, + "dInR": true, + "dTimeS": "104700", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 82, + "idx": 5, + "aProdX": 107, + "aOutR": true, + "aTimeS": "104800", + "aTZOffset": 60, + "dProdX": 107, + "dInR": true, + "dTimeS": "104800", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 84, + "idx": 6, + "aProdX": 107, + "aOutR": true, + "aTimeS": "104900", + "aTZOffset": 60, + "dProdX": 107, + "dInR": true, + "dTimeS": "104900", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 86, + "idx": 7, + "aProdX": 107, + "aOutR": true, + "aTimeS": "105100", + "aTZOffset": 60, + "dProdX": 107, + "dInR": true, + "dTimeS": "105100", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 87, + "idx": 8, + "aProdX": 107, + "aOutR": true, + "aTimeS": "105200", + "aTZOffset": 60, + "dProdX": 107, + "dInR": true, + "dTimeS": "105200", + "dTZOffset": 60, + "type": "N" + }, + { + "locX": 70, + "idx": 9, + "aProdX": 107, + "aOutR": true, + "aTimeS": "105300", + "aTZOffset": 60, + "type": "N" + } + ], + "freq": { + "minC": 10, + "maxC": 10, + "numC": 13 + }, + "ctxRecon": "T$A=1@O=Karlsplatz (Stachus), München@L=624744@a=128@$A=1@O=Karl-Theodor-Straße, München@L=638842@a=128@$202011161041$202011161053$ 28$$1$$$", + "subscr": "N", + "prodL": [ + { + "prodX": 107, + "fLocX": 75, + "tLocX": 70, + "fIdx": 0, + "tIdx": 9 + } + ] + } + } + ], + "ctxRecon": "¶HKI¶T$A=1@O=München-Mittersendling@L=8004154@a=128@$A=1@O=München Karlsplatz@L=8004132@a=128@$202011161015$202011161028$S 7$$1$$$§W$A=1@O=München Karlsplatz@L=8004132@a=128@$A=1@O=Karlsplatz (Stachus), München@L=624744@a=128@$202011161028$202011161032$$$1$$$§T$A=1@O=Karlsplatz (Stachus), München@L=624744@a=128@$A=1@O=Karl-Theodor-Straße, München@L=638842@a=128@$202011161041$202011161053$ 28$$1$$$", + "freq": { + "minC": 20 + }, + "conSubscr": "P", + "recState": "U", + "sotRating": 0, + "isSotCon": false, + "showARSLink": false, + "sotCtxt": { + "cnLocX": 0, + "calcDate": "20201115", + "jid": "1|9605|2|80|-1", + "locMode": "FROM_START", + "pLocX": 0, + "reqMode": "UNKNOWN", + "sectX": 0, + "calcTime": "143055" + }, + "cksum": "a2dec66f_3", + "cksumDti": "917ce36f_3" + } + ], + "outCtxScrB": "2|OB|MT#11#488764#488761#488798#488798#0#0#165#488760#1#-2147482624#0#1#2|PDH#2b878f47f29a9a10624384e358b5f85e|RD#16112020|RT#100000|US#1", + "outCtxScrF": "2|OF|MT#11#488775#488775#488803#488813#0#0#165#488765#8#-2147483646#0#1#2|PDH#2b878f47f29a9a10624384e358b5f85e|RD#16112020|RT#100000|US#1", + "fpB": "20191215", + "fpE": "20211211", + "bfATS": -1, + "bfIOSTS": -1, + "planrtTS": "1605447010", + "outConGrpL": [ + { + "name": "Alle Verbindungen", + "icoX": 29, + "grpid": "pt_only", + "conScoringL": [ + { + "type": "DT", + "conScoreL": [ + { + "score": 7086444799915459000, + "conRefL": [ + 0 + ] + }, + { + "score": 7086440401822810000, + "conRefL": [ + 1 + ] + }, + { + "score": 7086431605782217000, + "conRefL": [ + 2 + ] + }, + { + "score": 7086400819450348000, + "conRefL": [ + 3 + ] + }, + { + "score": 7086396421357699000, + "conRefL": [ + 4 + ] + }, + { + "score": 7086383227283177000, + "conRefL": [ + 5 + ] + }, + { + "score": 7086383227278983000, + "conRefL": [ + 6 + ] + }, + { + "score": 7086383227262206000, + "conRefL": [ + 7 + ] + } + ], + "name": "Departure" + }, + { + "type": "AT", + "conScoreL": [ + { + "score": 7086282072194548000, + "conRefL": [ + 0 + ] + }, + { + "score": 7086180917078655000, + "conRefL": [ + 1 + ] + }, + { + "score": 7086282072200839000, + "conRefL": [ + 2 + ] + }, + { + "score": 7086238091729437000, + "conRefL": [ + 3 + ] + }, + { + "score": 7086136936613544000, + "conRefL": [ + 4 + ] + }, + { + "score": 7086260081980867000, + "conRefL": [ + 5 + ] + }, + { + "score": 7086251285883650000, + "conRefL": [ + 6 + ] + }, + { + "score": 7086216101494784000, + "conRefL": [ + 7 + ] + } + ], + "name": "Arrival" + }, + { + "type": "TI", + "conScoreL": [ + { + "score": 9223208290167554000, + "conRefL": [ + 0 + ] + }, + { + "score": 9223111533142213000, + "conRefL": [ + 1 + ] + }, + { + "score": 9223221484300796000, + "conRefL": [ + 2 + ] + }, + { + "score": 9223208290146583000, + "conRefL": [ + 3 + ] + }, + { + "score": 9223111533121241000, + "conRefL": [ + 4 + ] + }, + { + "score": 9223247872556794000, + "conRefL": [ + 5 + ] + }, + { + "score": 9223239076463772000, + "conRefL": [ + 6 + ] + }, + { + "score": 9223203892091683000, + "conRefL": [ + 7 + ] + } + ], + "name": "Duration" + } + ], + "initScoringType": "DT" + } + ] +} +const r3 : RawResult = +{ + "common": { + "locL": [ + { + "lid": "A=1@O=Berlin Hbf (tief)@X=13369549@Y=52525589@U=80@L=8098160@", + "type": "S", + "name": "Berlin Hbf (tief)", + "icoX": 0, + "extId": "8098160", + "state": "F", + "crd": { + "x": 13368892, + "y": 52525850, + "z": 0, + "type": "WGS84", + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 319, + "entry": true, + "mMastLocX": 1 + }, + { + "lid": "A=1@O=Berlin Hbf@X=13369549@Y=52525589@U=80@L=8011160@", + "type": "S", + "name": "Berlin Hbf", + "icoX": 0, + "extId": "8011160", + "state": "F", + "crd": { + "x": 13369629, + "y": 52524924, + "z": 0, + "type": "WGS84", + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 319 + }, + { + "lid": "A=1@O=Hamburg Hbf@X=10006909@Y=53552733@U=80@L=8002549@", + "type": "S", + "name": "Hamburg Hbf", + "icoX": 0, + "extId": "8002549", + "state": "F", + "crd": { + "x": 10006360, + "y": 53553533, + "z": 0, + "type": "WGS84", + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 191 + } + ], + "prodL": [ + { + "name": "ICE 696", + "number": "696", + "icoX": 0, + "cls": 1, + "oprX": 0, + "prodCtx": { + "name": "ICE 696", + "num": "696", + "matchId": "11", + "catOut": "ICE", + "catOutS": "ICE", + "catOutL": "Intercity-Express", + "catIn": "ICE", + "catCode": "0", + "admin": "80____" + } + }, + { + "name": "ICE 602", + "number": "602", + "icoX": 0, + "cls": 1, + "oprX": 0, + "prodCtx": { + "name": "ICE 602", + "num": "602", + "matchId": "28", + "catOut": "ICE", + "catOutS": "ICE", + "catOutL": "Intercity-Express", + "catIn": "ICE", + "catCode": "0", + "admin": "80____" + } + }, + { + "name": "ICE 802", + "number": "802", + "icoX": 0, + "cls": 1, + "oprX": 0, + "prodCtx": { + "name": "ICE 802", + "num": "802", + "matchId": "18", + "catOut": "ICE", + "catOutS": "ICE", + "catOutL": "Intercity-Express", + "catIn": "ICE", + "catCode": "0", + "admin": "80____" + } + } + ], + "polyL": [], + "layerL": [ + { + "id": "standard", + "name": "standard", + "index": 0, + "annoCnt": 0 + } + ], + "crdSysL": [ + { + "id": "standard", + "index": 0, + "type": "WGS84", + "dim": 3 + } + ], + "opL": [ + { + "name": "DB Fernverkehr AG", + "icoX": 1 + } + ], + "remL": [ + { + "type": "A", + "code": "CK", + "prio": 200, + "icoX": 2, + "txtN": "Komfort Check-in möglich (Infos unter bahn.de/kci)" + }, + { + "type": "A", + "code": "BR", + "prio": 450, + "icoX": 3, + "txtN": "Bordrestaurant" + }, + { + "type": "M", + "code": "", + "icoX": 4, + "txtS": "ICE 696: Berlin Hbf (tief)->Hamburg Hbf: Information.", + "txtN": "Bitte beachten Sie die Regelung zur Mund-Nase-Bedeckung im öffentlichen Personenverkehr.", + "sIdx": 0 + }, + { + "type": "A", + "code": "FR", + "prio": 260, + "icoX": 5, + "txtN": "Bicycles conveyed - subject to reservation" + }, + { + "type": "A", + "code": "FB", + "prio": 260, + "icoX": 6, + "txtN": "Number of bicycles conveyed limited" + }, + { + "type": "A", + "code": "EH", + "prio": 560, + "icoX": 2, + "txtN": "vehicle-mounted accessaid" + }, + { + "type": "M", + "code": "", + "icoX": 4, + "txtS": "ICE 602: Berlin Hbf (tief)->Hamburg Hbf: Information.", + "txtN": "Bitte beachten Sie die Regelung zur Mund-Nase-Bedeckung im öffentlichen Personenverkehr.", + "sIdx": 0 + }, + { + "type": "M", + "code": "", + "icoX": 4, + "txtS": "ICE 802: Berlin Hbf (tief)->Hamburg Hbf: Information.", + "txtN": "Bitte beachten Sie die Regelung zur Mund-Nase-Bedeckung im öffentlichen Personenverkehr.", + "sIdx": 0 + } + ], + "icoL": [ + { + "res": "ICE" + }, + { + "res": "D", + "txt": "DB Fernverkehr AG" + }, + { + "res": "attr_info" + }, + { + "res": "attr_resto" + }, + { + "res": "HimLow" + }, + { + "res": "attr_bike_r" + }, + { + "res": "attr_bike" + } + ], + "tcocL": [ + { + "c": "FIRST", + "r": 1 + }, + { + "c": "SECOND", + "r": 1 + }, + { + "c": "SECOND", + "r": 3 + } + ] + }, + "outConL": [ + { + "cid": "C-0", + "date": "20200727", + "dur": "015600", + "chg": 0, + "sDays": { + "sDaysR": "runs 26. until 28. Jul 2020 ", + "sDaysB": "00000000000000000000000000000000000000000000000000000004E00000000000000000000000000000000000" + }, + "dep": { + "locX": 0, + "idx": 9, + "dProdX": 0, + "dPlatfS": "7", + "dInR": true, + "dTimeS": "103800", + "dProgType": "PROGNOSED", + "dTZOffset": 120, + "type": "N" + }, + "arr": { + "locX": 2, + "idx": 11, + "aPlatfS": "5", + "aOutR": true, + "aTimeS": "123400", + "aProgType": "PROGNOSED", + "aTZOffset": 120, + "type": "N" + }, + "secL": [ + { + "type": "JNY", + "icoX": 0, + "dep": { + "locX": 0, + "idx": 9, + "dProdX": 0, + "dPlatfS": "7", + "dInR": true, + "dTimeS": "103800", + "dProgType": "PROGNOSED", + "dTZOffset": 120, + "type": "N" + }, + "arr": { + "locX": 2, + "idx": 11, + "aPlatfS": "5", + "aOutR": true, + "aTimeS": "123400", + "aProgType": "PROGNOSED", + "aTZOffset": 120, + "type": "N" + }, + "jny": { + "jid": "1|244757|0|80|27072020", + "prodX": 0, + "dirTxt": "Kiel Hbf", + "status": "P", + "isRchbl": true, + "poly": { + "delta": true, + "dim": 3, + "type": "WGS84", + "crdEncYX": "q}q_IqbrpA@BeMfIyHvH_A_D??sEnGwNzO??h@jB{EjFgF`GgB`DiAdDoArHHBFB[|F?dGn@dNq@L??`BvTfA`T??nApPn@zKXGYFtB|\\SDRE`Cr`@??N~BDAWHrPp`ClEjs@??@@TGrDhg@z@dQlLbwEF?DAnApj@M|^mA~NoHj`@qBbZUEAtCeCpg@JB??mGf_AOC@@kBjYq@OuBpUcH`]h@d@qB|N[O}BbViElj@rAf@aA]sA|NCAB@eMjwAiFf_@yFt_@st@zmE??rAaI??qRfkA??aSdiAyXjbB??c}@hnF??w]zuB??????od@foCcMlv@??sSzoA}Lpq@geAxnGoUdsAkWv}AuLtv@{S~kA??mHpe@gHt^ey@z|C??owFp~S??qp@deCqHxUiItS??aInPiItNw~HrvM??q|DhwG??a{OnaX??gZjg@uFlJO[s\\`k@??P\\yj@`aAcD|H{EnPc}CjjNyDbTcCdUeA|UIdVvLn~HdBvc@p[jiG~@|c@@rQUhS??y[jtMaArZcAdQaEvb@ydA`eI??mJjh@_I~ZujIx_W??kRvl@_Vz~@kDjOoeBf_JsTjkAgD`UkCf\\mCvaAeRxoI[nTLle@_@fLkAYjAXeAnLyB~LqEpNkD|G}ExG}CrCyG`EkKrEiLzE??eMhD_OhBi`AxH??en@lEkiJ~u@??s`NvhA??myDrZcJnA_U~FaOnGuSpMyMfLeMbNmL|OsKpQiNhZaoCvyH??ub@bmA??m}EhfNyIlTkSv`@??gkDjbHjDbHkDcHqH|MqHrKgLhMcLdJgHdEaIbDqWfFmGbBoHnD{FhEgGvG{HrLiCnFqOx`@??u~B`mG??kiC|cHaQhg@sGdWeFlXyR|yA??qkAdbJ??udBjyMaFlb@_AvQObPPvMh@pL|@rKjBfNnCzN`F`ScAzAvJtSpH|St@jDx@jI??jBqD|iE~rHtDlIbDdJdF`SnDrTlCx[??xk@prJ??ni@t}IbAlUVlVs@nmEUvQe@zLu@xLcB~Po`@pyC??i_ArgH_D|YmAhQu@pQ[tQGd[x@rfVYlVuA`VoBzP}DpT??cHv[wFnR}HnQaIhMuo@pv@}aFngG??w_D~zDiP~VoUpe@???B??_~AveDh@zAiDlDqBdDoCpFs\\zs@??iJ~SoL~\\oF|ReQhx@??k}@deE??yX~pA{C~OsCdU}@vLg@|LQbMBbMf@vQv@xLjAnL~AdLnM~r@bBbLbBbQbAfVAd[mA|ZwAfQ}Hlm@??wBjSkAjQ}Bz{@w@pQyBtUiClPiDnOwCtJijAdiDgCdKuBtKuCdU_AvLi@|LSbM@bMxMbsFRzQQvQsAbVoAnLiB~KkDnO}Mfa@mC~J}DhToCvV??oFlk@qBj_@s@d[Gb\\G@Fv@H`[WNPxGxBz_@bDv^tBnP~QrmA~CxOfEvNdFjM|FnK??fHtJjR|Q|E`GpGfKpFzLpEfNjDpOhB~KjFpb@vCbQPMdExPbDbJvDjInGjKfQzT`IjOhG~QfE~S??QJxBxRbAjQ????fApQjApLhB|K|BpKlC~JpEfNfOx_@???@????tErMpDjO`CnPjAjQDd[gEfx@VD??MxBWGiNhlC??qBb^PDQEcB|SqBzP{Gpa@qDhOmElNsQ|e@??}Whn@e^v|@??\\l@a@|@wm@~zAEKDJkBvEKO_nAj|CgEhKDHBFyHbSMOoQdk@aJr_@cBnI@@HD{@jI{Bh_@oFph@B@CAoJzk@{AjNoAlGuIvZ_CjK}CjJiCbK_AxGkAlQ_HxV}BvEuC|CmDfAiGh@cFEoG~AiEg@ED`@~B", + "crdEncZ": "???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????", + "crdEncS": "NNMNNNLNNNNLNLNNNLNNNNKNNNNNNNNNNNNNNLNNNNLNNNNNNNNNNNNNNNNNNNNNNNNKNNNNNNNNLNNNNNNKNNNNNNNNNNNLMLMKMNNMNNNNNNMNNLNNNNNNNNNNNNNNLNNMNMNNMNNKNNNLNNNNNNNNNKNNMNNNNMMNNNMNMNLNKNNNMNNNKNNNNLNMNMNMNMNNNNNNMNNNNNLNMNKNKNLNMNKNNNNMNMNNNNNLNMNKNKNLNNNNKNNNNKNNNNNNNNMNNKNKNNNNNKNLNNNNMNNMNMNLNNNNNNNNNNKNNNNMNMNNNNKNNKNKNLNKNKNMNNNMNNLNKNMNLNNKNNKNKNNLNNKNMLNMNNNNMNNNNNKNNLNMNMNNMLNMNMNKLNNNKNMNNNNNNMNNNKNKNKNNNNNNMNMNNNNNNNNNNNNLNNLNNNKNNNNNNNNNNNNNNNNNNNNKNNNNNLNKKKNLNNMNLNMNNNN", + "crdEncF": "???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????", + "ppLocRefL": [ + { + "ppIdx": 0, + "locX": 0 + }, + { + "ppIdx": 474, + "locX": 2 + } + ] + }, + "ctxRecon": "T$A=1@O=Berlin Hbf (tief)@L=8098160@a=128@$A=1@O=Hamburg Hbf@L=8002549@a=128@$202007271038$202007271234$ICE 696$$1$$$", + "msgL": [ + { + "type": "REM", + "remX": 0, + "fLocX": 0, + "tLocX": 2, + "fIdx": 9, + "tIdx": 11, + "tagL": [ + "RES_JNY_DTL" + ] + }, + { + "type": "REM", + "remX": 1, + "fLocX": 0, + "tLocX": 2, + "fIdx": 9, + "tIdx": 11, + "tagL": [ + "RES_JNY_DTL_L" + ] + }, + { + "type": "REM", + "remX": 2, + "prio": 240, + "fIdx": -1, + "tIdx": -1, + "tagL": [ + "RES_CON_FTR_H3" + ] + } + ], + "subscr": "F", + "dTrnCmpSX": { + "tcocX": [ + 0, + 1 + ] + } + }, + "resState": "N", + "resRecommendation": "N" + } + ], + "ctxRecon": "¶HKI¶T$A=1@O=Berlin Hbf (tief)@L=8098160@a=128@$A=1@O=Hamburg Hbf@L=8002549@a=128@$202007271038$202007271234$ICE 696$$1$$$", + "trfRes": { + "statusCode": "OK", + "fareSetL": [ + { + "fareL": [ + { + "price": { "amount": 6990 }, + "isFromPrice": true, + "isBookable": true, + "isUpsell": false, + "targetCtx": "D", + "buttonText": "Continue to booking" + } + ] + } + ] + }, + "conSubscr": "F", + "resState": "N", + "resRecommendation": "N", + "recState": "U", + "sotRating": 0, + "isSotCon": false, + "showARSLink": false, + "sotCtxt": { + "cnLocX": 0, + "calcDate": "20200726", + "jid": "1|244757|0|80|-1", + "locMode": "FROM_START", + "pLocX": 0, + "reqMode": "UNKNOWN", + "sectX": 0, + "calcTime": "132949" + }, + "cksum": "cdf4550c_3", + "dTrnCmpSX": { + "tcocX": [ + 0, + 1 + ] + } + }, + { + "cid": "C-1", + "date": "20200727", + "dur": "020100", + "chg": 0, + "sDays": { + "sDaysR": "runs 27. Jul until 3. Aug 2020 Mo, Tu, Sa, Su ", + "sDaysB": "00000000000000000000000000000000000000000000000000000006638000000000000000000000000000000000" + }, + "dep": { + "locX": 0, + "idx": 8, + "dProdX": 1, + "dPlatfS": "8", + "dInR": true, + "dTimeS": "114000", + "dProgType": "PROGNOSED", + "dTZOffset": 120, + "type": "N" + }, + "arr": { + "locX": 2, + "idx": 10, + "aPlatfS": "8", + "aOutR": true, + "aTimeS": "134100", + "aProgType": "PROGNOSED", + "aTZOffset": 120, + "type": "N" + }, + "secL": [ + { + "type": "JNY", + "icoX": 0, + "dep": { + "locX": 0, + "idx": 8, + "dProdX": 1, + "dPlatfS": "8", + "dInR": true, + "dTimeS": "114000", + "dProgType": "PROGNOSED", + "dTZOffset": 120, + "type": "N" + }, + "arr": { + "locX": 2, + "idx": 10, + "aPlatfS": "8", + "aOutR": true, + "aTimeS": "134100", + "aProgType": "PROGNOSED", + "aTZOffset": 120, + "type": "N" + }, + "jny": { + "jid": "1|243213|0|80|27072020", + "prodX": 1, + "dirTxt": "Hamburg-Altona", + "status": "P", + "isRchbl": true, + "poly": { + "delta": true, + "dim": 3, + "type": "WGS84", + "crdEncYX": "q}q_IqbrpA@BeMfIyHvH_A_D??sEnGwNzO??h@jB{EjFgF`GgB`DiAdDoArHHBFB[|F?dGn@dNq@L??`BvTfA`T??nApPn@zKXGYFtB|\\SDRE`Cr`@??N~BDAWHrPp`ClEjs@??@@TGrDhg@z@dQlLbwEF?DAnApj@M|^mA~NoHj`@qBbZUEAtCeCpg@JB??mGf_AOC@@kBjYq@OuBpUcH`]h@d@qB|N[O}BbViElj@rAf@aA]sA|NCAB@eMjwAiFf_@yFt_@st@zmE??rAaI??qRfkA??aSdiAyXjbB??c}@hnF??w]zuB??????od@foCcMlv@??sSzoA}Lpq@geAxnGoUdsAkWv}AuLtv@{S~kA??mHpe@gHt^ey@z|C??owFp~S??qp@deCqHxUiItS??aInPiItNw~HrvM??q|DhwG??a{OnaX??gZjg@uFlJO[s\\`k@??P\\yj@`aAcD|H{EnPc}CjjNyDbTcCdUeA|UIdVvLn~HdBvc@p[jiG~@|c@@rQUhS??y[jtMaArZcAdQaEvb@ydA`eI??mJjh@_I~ZujIx_W??kRvl@_Vz~@kDjOoeBf_JsTjkAgD`UkCf\\mCvaAeRxoI[nTLle@_@fLkAYjAXeAnLyB~LqEpNkD|G}ExG}CrCyG`EkKrEiLzE??eMhD_OhBi`AxH??en@lEkiJ~u@??s`NvhA??myDrZcJnA_U~FaOnGuSpMyMfLeMbNmL|OsKpQiNhZaoCvyH??ub@bmA??m}EhfNyIlTkSv`@??gkDjbHjDbHkDcHqH|MqHrKgLhMcLdJgHdEaIbDqWfFmGbBoHnD{FhEgGvG{HrLiCnFqOx`@??u~B`mG??kiC|cHaQhg@sGdWeFlXyR|yA??qkAdbJ??udBjyMaFlb@_AvQObPPvMh@pL|@rKjBfNnCzN`F`ScAzAvJtSpH|St@jDx@jI??jBqD|iE~rHtDlIbDdJdF`SnDrTlCx[??xk@prJ??ni@t}IbAlUVlVs@nmEUvQe@zLu@xLcB~Po`@pyC??i_ArgH_D|YmAhQu@pQ[tQGd[x@rfVYlVuA`VoBzP}DpT??cHv[wFnR}HnQaIhMuo@pv@}aFngG??w_D~zDiP~VoUpe@???B??_~AveDh@zAiDlDqBdDoCpFs\\zs@??iJ~SoL~\\oF|ReQhx@??k}@deE??yX~pA{C~OsCdU}@vLg@|LQbMBbMf@vQv@xLjAnL~AdLnM~r@bBbLbBbQbAfVAd[mA|ZwAfQ}Hlm@??wBjSkAjQ}Bz{@w@pQyBtUiClPiDnOwCtJijAdiDgCdKuBtKuCdU_AvLi@|LSbM@bMxMbsFRzQQvQsAbVoAnLiB~KkDnO}Mfa@mC~J}DhToCvV??oFlk@qBj_@s@d[Gb\\G@Fv@H`[WNPxGxBz_@bDv^tBnP~QrmA~CxOfEvNdFjM|FnK??fHtJjR|Q|E`GpGfKpFzLpEfNjDpOhB~KjFpb@vCbQPMdExPbDbJvDjInGjKfQzT`IjOhG~QfE~S??QJxBxRbAjQ????fApQjApLhB|K|BpKlC~JpEfNfOx_@???@????tErMpDjO`CnPjAjQDd[gEfx@VD??MxBWGiNhlC??qBb^PDQEcB|SqBzP{Gpa@qDhOmElNsQ|e@??}Whn@e^v|@??\\l@a@|@wm@~zAEKDJkBvEKO_nAj|CgEhKDHBFyHbSMOoQdk@aJr_@cBnI@@HD{@jI{Bh_@oFph@B@CAoJzk@{AjNoAlGuIvZ_CjK}CjJiCbK_AxGkAlQ_HxV}BvEuC|CmDfAiGh@cFEoG~AiEg@ED`@~B", + "crdEncZ": "???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????", + "crdEncS": "NNMNNNLNNNNLNLNNNLNNNNKNNNNNNNNNNNNNNLNNNNLNNNNNNNNNNNNNNNNNNNNNNNNKNNNNNNNNLNNNNNNKNNNNNNNNNNNLMLMKMNNMNNNNNNMNNLNNNNNNNNNNNNNNLNNMNMNNMNNKNNNLNNNNNNNNNKNNMNNNNMMNNNMNMNLNKNNNMNNNKNNNNLNMNMNMNMNNNNNNMNNNNNLNMNKNKNLNMNKNNNNMNMNNNNNLNMNKNKNLNNNNKNNNNKNNNNNNNNMNNKNKNNNNNKNLNNNNMNNMNMNLNNNNNNNNNNKNNNNMNMNNNNKNNKNKNLNKNKNMNNNMNNLNKNMNLNNKNNKNKNNLNNKNMLNMNNNNMNNNNNKNNLNMNMNNMLNMNMNKLNNNKNMNNNNNNMNNNKNKNKNNNNNNMNMNNNNNNNNNNNNLNNLNNNKNNNNNNNNNNNNNNNNNNNNKNNNNNLNKKKNLNNMNLNMNNNN", + "crdEncF": "???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????", + "ppLocRefL": [ + { + "ppIdx": 0, + "locX": 0 + }, + { + "ppIdx": 474, + "locX": 2 + } + ] + }, + "ctxRecon": "T$A=1@O=Berlin Hbf (tief)@L=8098160@a=128@$A=1@O=Hamburg Hbf@L=8002549@a=128@$202007271140$202007271341$ICE 602$$1$$$", + "msgL": [ + { + "type": "REM", + "remX": 0, + "fLocX": 0, + "tLocX": 2, + "fIdx": 8, + "tIdx": 10, + "tagL": [ + "RES_JNY_DTL" + ] + }, + { + "type": "REM", + "remX": 3, + "fLocX": 0, + "tLocX": 2, + "fIdx": 8, + "tIdx": 10, + "tagL": [ + "RES_JNY_DTL_L" + ] + }, + { + "type": "REM", + "remX": 4, + "fLocX": 0, + "tLocX": 2, + "fIdx": 8, + "tIdx": 10, + "tagL": [ + "RES_JNY_DTL_L" + ] + }, + { + "type": "REM", + "remX": 1, + "fLocX": 0, + "tLocX": 2, + "fIdx": 8, + "tIdx": 10, + "tagL": [ + "RES_JNY_DTL_L" + ] + }, + { + "type": "REM", + "remX": 5, + "fLocX": 0, + "tLocX": 2, + "fIdx": 8, + "tIdx": 10, + "tagL": [ + "RES_JNY_DTL" + ] + }, + { + "type": "REM", + "remX": 6, + "prio": 240, + "fIdx": -1, + "tIdx": -1, + "tagL": [ + "RES_CON_FTR_H3" + ] + } + ], + "subscr": "F", + "dTrnCmpSX": { + "tcocX": [ + 0, + 2 + ] + } + }, + "resState": "N", + "resRecommendation": "N" + } + ], + "ctxRecon": "¶HKI¶T$A=1@O=Berlin Hbf (tief)@L=8098160@a=128@$A=1@O=Hamburg Hbf@L=8002549@a=128@$202007271140$202007271341$ICE 602$$1$$$", + "trfRes": { + "statusCode": "OK", + "fareSetL": [ + { + "fareL": [ + { + "price": { "amount": 6990 }, + "isFromPrice": true, + "isBookable": true, + "isUpsell": false, + "targetCtx": "D", + "buttonText": "Continue to booking" + } + ] + } + ] + }, + "conSubscr": "F", + "resState": "N", + "resRecommendation": "N", + "recState": "U", + "sotRating": 0, + "isSotCon": false, + "showARSLink": false, + "sotCtxt": { + "cnLocX": 0, + "calcDate": "20200726", + "jid": "1|243213|0|80|-1", + "locMode": "FROM_START", + "pLocX": 0, + "reqMode": "UNKNOWN", + "sectX": 0, + "calcTime": "132949" + }, + "cksum": "98e53541_3", + "dTrnCmpSX": { + "tcocX": [ + 0, + 2 + ] + } + }, + { + "cid": "C-2", + "date": "20200727", + "dur": "021400", + "chg": 0, + "sDays": { + "sDaysR": "runs 26. until 28. Jul 2020 ", + "sDaysB": "00000000000000000000000000000000000000000000000000000007E00000000000000000000000000000000000" + }, + "dep": { + "locX": 0, + "idx": 9, + "dProdX": 2, + "dPlatfS": "7", + "dInR": true, + "dTimeS": "123800", + "dProgType": "PROGNOSED", + "dTZOffset": 120, + "type": "N" + }, + "arr": { + "locX": 2, + "idx": 11, + "aPlatfS": "5", + "aOutR": true, + "aTimeS": "145200", + "aProgType": "PROGNOSED", + "aTZOffset": 120, + "type": "N" + }, + "secL": [ + { + "type": "JNY", + "icoX": 0, + "dep": { + "locX": 0, + "idx": 9, + "dProdX": 2, + "dPlatfS": "7", + "dInR": true, + "dTimeS": "123800", + "dProgType": "PROGNOSED", + "dTZOffset": 120, + "type": "N" + }, + "arr": { + "locX": 2, + "idx": 11, + "aPlatfS": "5", + "aOutR": true, + "aTimeS": "145200", + "aProgType": "PROGNOSED", + "aTZOffset": 120, + "type": "N" + }, + "jny": { + "jid": "1|246102|0|80|27072020", + "prodX": 2, + "dirTxt": "Hamburg-Altona", + "status": "P", + "isRchbl": true, + "poly": { + "delta": true, + "dim": 3, + "type": "WGS84", + "crdEncYX": "q}q_IqbrpA@BeMfIyHvH_A_D??sEnGwNzO??h@jB{EjFgF`GgB`DiAdDoArHHBFB[|F?dGn@dNq@L??`BvTfA`T??nApPn@zKXGYFtB|\\SDRE`Cr`@??N~BDAWHrPp`ClEjs@??@@TGrDhg@z@dQlLbwEF?DAnApj@M|^mA~NoHj`@qBbZUEAtCeCpg@JB??mGf_AOC@@kBjYq@OuBpUcH`]h@d@qB|N[O}BbViElj@rAf@aA]sA|NCAB@eMjwAiFf_@yFt_@st@zmE??rAaI??qRfkA??aSdiAyXjbB??c}@hnF??w]zuB??????od@foCcMlv@??sSzoA}Lpq@geAxnGoUdsAkWv}AuLtv@{S~kA??mHpe@gHt^ey@z|C??owFp~S??qp@deCqHxUiItS??aInPiItNw~HrvM??q|DhwG??a{OnaX??gZjg@uFlJO[s\\`k@??P\\yj@`aAcD|H{EnPc}CjjNyDbTcCdUeA|UIdVvLn~HdBvc@p[jiG~@|c@@rQUhS??y[jtMaArZcAdQaEvb@ydA`eI??mJjh@_I~ZujIx_W??kRvl@_Vz~@kDjOoeBf_JsTjkAgD`UkCf\\mCvaAeRxoI[nTLle@_@fLkAYjAXeAnLyB~LqEpNkD|G}ExG}CrCyG`EkKrEiLzE??eMhD_OhBi`AxH??en@lEkiJ~u@??s`NvhA??myDrZcJnA_U~FaOnGuSpMyMfLeMbNmL|OsKpQiNhZaoCvyH??ub@bmA??m}EhfNyIlTkSv`@??gkDjbHjDbHkDcHqH|MqHrKgLhMcLdJgHdEaIbDqWfFmGbBoHnD{FhEgGvG{HrLiCnFqOx`@??u~B`mG??kiC|cHaQhg@sGdWeFlXyR|yA??qkAdbJ??udBjyMaFlb@_AvQObPPvMh@pL|@rKjBfNnCzN`F`ScAzAvJtSpH|St@jDx@jI??jBqD|iE~rHtDlIbDdJdF`SnDrTlCx[??xk@prJ??ni@t}IbAlUVlVs@nmEUvQe@zLu@xLcB~Po`@pyC??i_ArgH_D|YmAhQu@pQ[tQGd[x@rfVYlVuA`VoBzP}DpT??cHv[wFnR}HnQaIhMuo@pv@}aFngG??w_D~zDiP~VoUpe@???B??_~AveDh@zAiDlDqBdDoCpFs\\zs@??iJ~SoL~\\oF|ReQhx@??k}@deE??yX~pA{C~OsCdU}@vLg@|LQbMBbMf@vQv@xLjAnL~AdLnM~r@bBbLbBbQbAfVAd[mA|ZwAfQ}Hlm@??wBjSkAjQ}Bz{@w@pQyBtUiClPiDnOwCtJijAdiDgCdKuBtKuCdU_AvLi@|LSbM@bMxMbsFRzQQvQsAbVoAnLiB~KkDnO}Mfa@mC~J}DhToCvV??oFlk@qBj_@s@d[Gb\\G@Fv@H`[WNPxGxBz_@bDv^tBnP~QrmA~CxOfEvNdFjM|FnK??fHtJjR|Q|E`GpGfKpFzLpEfNjDpOhB~KjFpb@vCbQPMdExPbDbJvDjInGjKfQzT`IjOhG~QfE~S??QJxBxRbAjQ????fApQjApLhB|K|BpKlC~JpEfNfOx_@???@????tErMpDjO`CnPjAjQDd[gEfx@VD??MxBWGiNhlC??qBb^PDQEcB|SqBzP{Gpa@qDhOmElNsQ|e@??}Whn@e^v|@??\\l@a@|@wm@~zAEKDJkBvEKO_nAj|CgEhKDHBFyHbSMOoQdk@aJr_@cBnI@@HD{@jI{Bh_@oFph@B@CAoJzk@{AjNoAlGuIvZ_CjK}CjJiCbK_AxGkAlQ_HxV}BvEuC|CmDfAiGh@cFEoG~AiEg@ED`@~B", + "crdEncZ": "???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????", + "crdEncS": "NNMNNNLNNNNLNLNNNLNNNNKNNNNNNNNNNNNNNLNNNNLNNNNNNNNNNNNNNNNNNNNNNNNKNNNNNNNNLNNNNNNKNNNNNNNNNNNLMLMKMNNMNNNNNNMNNLNNNNNNNNNNNNNNLNNMNMNNMNNKNNNLNNNNNNNNNKNNMNNNNMMNNNMNMNLNKNNNMNNNKNNNNLNMNMNMNMNNNNNNMNNNNNLNMNKNKNLNMNKNNNNMNMNNNNNLNMNKNKNLNNNNKNNNNKNNNNNNNNMNNKNKNNNNNKNLNNNNMNNMNMNLNNNNNNNNNNKNNNNMNMNNNNKNNKNKNLNKNKNMNNNMNNLNKNMNLNNKNNKNKNNLNNKNMLNMNNNNMNNNNNKNNLNMNMNNMLNMNMNKLNNNKNMNNNNNNMNNNKNKNKNNNNNNMNMNNNNNNNNNNNNLNNLNNNKNNNNNNNNNNNNNNNNNNNNKNNNNNLNKKKNLNNMNLNMNNNN", + "crdEncF": "???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????", + "ppLocRefL": [ + { + "ppIdx": 0, + "locX": 0 + }, + { + "ppIdx": 474, + "locX": 2 + } + ] + }, + "ctxRecon": "T$A=1@O=Berlin Hbf (tief)@L=8098160@a=128@$A=1@O=Hamburg Hbf@L=8002549@a=128@$202007271238$202007271452$ICE 802$$1$$$", + "msgL": [ + { + "type": "REM", + "remX": 0, + "fLocX": 0, + "tLocX": 2, + "fIdx": 9, + "tIdx": 11, + "tagL": [ + "RES_JNY_DTL" + ] + }, + { + "type": "REM", + "remX": 3, + "fLocX": 0, + "tLocX": 2, + "fIdx": 9, + "tIdx": 11, + "tagL": [ + "RES_JNY_DTL_L" + ] + }, + { + "type": "REM", + "remX": 4, + "fLocX": 0, + "tLocX": 2, + "fIdx": 9, + "tIdx": 11, + "tagL": [ + "RES_JNY_DTL_L" + ] + }, + { + "type": "REM", + "remX": 1, + "fLocX": 0, + "tLocX": 2, + "fIdx": 9, + "tIdx": 11, + "tagL": [ + "RES_JNY_DTL_L" + ] + }, + { + "type": "REM", + "remX": 5, + "fLocX": 0, + "tLocX": 2, + "fIdx": 9, + "tIdx": 11, + "tagL": [ + "RES_JNY_DTL" + ] + }, + { + "type": "REM", + "remX": 7, + "prio": 240, + "fIdx": -1, + "tIdx": -1, + "tagL": [ + "RES_CON_FTR_H3" + ] + } + ], + "subscr": "F", + "dTrnCmpSX": { + "tcocX": [ + 0, + 1 + ] + } + }, + "resState": "N", + "resRecommendation": "N" + } + ], + "ctxRecon": "¶HKI¶T$A=1@O=Berlin Hbf (tief)@L=8098160@a=128@$A=1@O=Hamburg Hbf@L=8002549@a=128@$202007271238$202007271452$ICE 802$$1$$$", + "trfRes": { + "statusCode": "OK", + "fareSetL": [ + { + "fareL": [ + { + "prc": 5990, + "isFromPrice": true, + "isBookable": true, + "isUpsell": false, + "targetCtx": "D", + "buttonText": "Continue to booking" + } + ] + } + ] + }, + "conSubscr": "F", + "resState": "N", + "resRecommendation": "N", + "recState": "U", + "sotRating": 0, + "isSotCon": false, + "showARSLink": false, + "sotCtxt": { + "cnLocX": 0, + "calcDate": "20200726", + "jid": "1|246102|0|80|-1", + "locMode": "FROM_START", + "pLocX": 0, + "reqMode": "UNKNOWN", + "sectX": 0, + "calcTime": "132949" + }, + "cksum": "bbe9b8dd_3", + "dTrnCmpSX": { + "tcocX": [ + 0, + 1 + ] + } + } + ], + "outCtxScrB": "2|OB|MT#11#327518#327518#327634#327634#0#0#485#327476#1#-2147482598#0#1#2|PDH#75e25308610ed872d1e38869082dfcf9|RD#27072020|RT#95600|US#1", + "outCtxScrF": "2|OF|MT#11#327638#327638#327772#327772#0#0#485#327581#3#-2147482598#0#1#2|PDH#75e25308610ed872d1e38869082dfcf9|RD#27072020|RT#95600|US#1", + "fpB": "20191215", + "fpE": "20201212", + "bfATS": -1, + "bfIOSTS": -1, + "planrtTS": "1595762840" +} +const dbJourney: Journey = { + type: 'journey', + legs: [ + { + origin: { + type: 'stop', + id: '8000207', + name: 'Köln Hbf', + location: { + type: 'location', + id: '8000207', + latitude: 50.942823, + longitude: 6.959197, + }, + products: { + nationalExpress: true, + national: true, + regionalExpress: true, + regional: true, + suburban: true, + bus: true, + ferry: false, + subway: false, + tram: true, + taxi: false, + }, + }, + destination: { + type: 'stop', + id: '8073368', + name: 'Köln Messe/Deutz Gl.11-12', + location: { + type: 'location', + id: '8073368', + latitude: 50.940602, + longitude: 6.975162, + }, + products: { + nationalExpress: true, + national: true, + regionalExpress: true, + regional: true, + suburban: true, + bus: true, + ferry: false, + subway: false, + tram: true, + taxi: false, + }, + station: { + type: 'station', + id: '8003368', + name: 'Köln Messe/Deutz', + location: { + type: 'location', + id: '8003368', + latitude: 50.940989, + longitude: 6.974578, + }, + products: { + nationalExpress: true, + national: true, + regionalExpress: true, + regional: true, + suburban: true, + bus: true, + ferry: false, + subway: false, + tram: true, + taxi: false, + }, + }, + }, + arrival: '2020-04-11T05:20:00+02:00', + plannedArrival: '2020-04-11T05:20:00+02:00', + arrivalDelay: null, + departure: '2020-04-11T05:17:00+02:00', + plannedDeparture: '2020-04-11T05:17:00+02:00', + departureDelay: null, + public: true, + walking: true, + distance: null, + transfer: true, + }, + { + origin: { + type: 'stop', + id: '8073368', + name: 'Köln Messe/Deutz Gl.11-12', + location: { + type: 'location', + id: '8073368', + latitude: 50.940602, + longitude: 6.975162, + }, + products: { + nationalExpress: true, + national: true, + regionalExpress: true, + regional: true, + suburban: true, + bus: true, + ferry: false, + subway: false, + tram: true, + taxi: false, + }, + station: { + type: 'station', + id: '8003368', + name: 'Köln Messe/Deutz', + location: { + type: 'location', + id: '8003368', + latitude: 50.940989, + longitude: 6.974578, + }, + products: { + nationalExpress: true, + national: true, + regionalExpress: true, + regional: true, + suburban: true, + bus: true, + ferry: false, + subway: false, + tram: true, + taxi: false, + }, + }, + }, + destination: { + type: 'stop', + id: '8000284', + name: 'Nürnberg Hbf', + location: { + type: 'location', + id: '8000284', + latitude: 49.445435, + longitude: 11.08227, + }, + products: { + nationalExpress: true, + national: true, + regionalExpress: false, + regional: true, + suburban: true, + bus: true, + ferry: false, + subway: true, + tram: true, + taxi: false, + }, + }, + arrival: '2020-04-11T09:01:00+02:00', + plannedArrival: '2020-04-11T09:01:00+02:00', + arrivalDelay: null, + arrivalPrognosisType: 'prognosed', + departure: '2020-04-11T05:20:00+02:00', + plannedDeparture: '2020-04-11T05:20:00+02:00', + departureDelay: null, + departurePrognosisType: 'prognosed', + reachable: true, + tripId: '1|301001|0|80|11042020', + line: { + type: 'line', + id: 'ice-523', + fahrtNr: '523', + name: 'ICE 523', + public: true, + adminCode: '80____', + productName: 'ICE', + mode: 'train', + product: 'nationalExpress', + operator: { + type: 'operator', + id: 'db-fernverkehr-ag', + name: 'DB Fernverkehr AG', + }, + }, + direction: 'München Hbf', + arrivalPlatform: '9', + plannedArrivalPlatform: '9', + departurePlatform: '11', + plannedDeparturePlatform: '11', + remarks: [ + { + text: 'Komfort Check-in möglich (Infos unter bahn.de/kci)', + type: 'hint', + code: 'komfort-checkin', + summary: 'Komfort-Checkin available', + }, + ], + }, + ], + refreshToken: '¶HKI¶D$A=1@O=Köln Hbf@L=8000207@a=128@$A=1@O=Köln Messe/Deutz Gl.11-12@L=8073368@a=128@$202004110517$202004110520$$$1$§T$A=1@O=Köln Messe/Deutz Gl.11-12@L=8073368@a=128@$A=1@O=Nürnberg Hbf@L=8000284@a=128@$202004110520$202004110901$ICE 523$$1$', + price: {amount: 49.9, currency: 'EUR', hint: null}, +}; + +export { + dbJourney, +}; +const dbJourneyPolyline: Journey = { + type: 'journey', + legs: [ + { + origin: { + type: 'stop', + id: '8098160', + name: 'Berlin Hbf (tief)', + location: { + type: 'location', + id: '8098160', + latitude: 52.52585, + longitude: 13.368892, + }, + products: { + nationalExpress: true, + national: true, + regionalExpress: true, + regional: true, + suburban: true, + bus: true, + ferry: false, + subway: false, + tram: true, + taxi: false, + }, + station: { + type: 'station', + id: '8011160', + name: 'Berlin Hbf', + location: { + type: 'location', + id: '8011160', + latitude: 52.524924, + longitude: 13.369629, + }, + products: { + nationalExpress: true, + national: true, + regionalExpress: true, + regional: true, + suburban: true, + bus: true, + ferry: false, + subway: false, + tram: true, + taxi: false, + }, + }, + }, + destination: { + type: 'stop', + id: '8002549', + name: 'Hamburg Hbf', + location: { + type: 'location', + id: '8002549', + latitude: 53.553533, + longitude: 10.00636, + }, + products: { + nationalExpress: true, + national: true, + regionalExpress: true, + regional: true, + suburban: true, + bus: true, + ferry: false, + subway: true, + tram: false, + taxi: false, + }, + }, + arrival: '2020-07-27T12:34:00+02:00', + plannedArrival: '2020-07-27T12:34:00+02:00', + arrivalDelay: null, + arrivalPrognosisType: 'prognosed', + departure: '2020-07-27T10:38:00+02:00', + plannedDeparture: '2020-07-27T10:38:00+02:00', + departureDelay: null, + departurePrognosisType: 'prognosed', + reachable: true, + polyline: { + type: 'FeatureCollection', + features: [ + { + type: 'Feature', + properties: { + type: 'stop', + id: '8098160', + name: 'Berlin Hbf (tief)', + location: { + type: 'location', + id: '8098160', + latitude: 52.52585, + longitude: 13.368892, + }, + products: { + nationalExpress: true, + national: true, + regionalExpress: true, + regional: true, + suburban: true, + bus: true, + ferry: false, + subway: false, + tram: true, + taxi: false, + }, + station: { + type: 'station', + id: '8011160', + name: 'Berlin Hbf', + location: { + type: 'location', + id: '8011160', + latitude: 52.524924, + longitude: 13.369629, + }, + products: { + nationalExpress: true, + national: true, + regionalExpress: true, + regional: true, + suburban: true, + bus: true, + ferry: false, + subway: false, + tram: true, + taxi: false, + }, + }, + }, + geometry: { + type: 'Point', + coordinates: [13.36889, 52.52585], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.36723, 52.52811], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.36567, 52.52968], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.36647, 52.53], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.36647, 52.53], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.36511, 52.53106], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.36241, 52.53358], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.36241, 52.53358], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.36187, 52.53337], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.36069, 52.53447], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.3594, 52.53563], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.35859, 52.53615], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.35776, 52.53652], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.35622, 52.53692], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.3562, 52.53687], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.35618, 52.53683], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.35491, 52.53697], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.3536, 52.53697], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.35117, 52.53673], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.3511, 52.53698], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.3511, 52.53698], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.34762, 52.53649], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.34425, 52.53613], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.34425, 52.53613], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.34144, 52.53573], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.33938, 52.53549], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.33942, 52.53536], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.33938, 52.53549], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.33459, 52.5349], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.33456, 52.535], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.33459, 52.5349], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.32921, 52.53425], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.32921, 52.53425], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.32857, 52.53417], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.32858, 52.53414], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.32853, 52.53426], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.3078, 52.53144], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.29942, 52.53041], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.29942, 52.53041], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.29941, 52.5304], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.29945, 52.53029], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.293, 52.52939], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.29009, 52.52909], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.25551, 52.52694], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.25551, 52.5269], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.25552, 52.52687], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.24855, 52.52647], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.24344, 52.52654], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.24088, 52.52693], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.23554, 52.52845], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.2312, 52.52902], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.23123, 52.52913], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.23048, 52.52914], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.22399, 52.52981], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.22397, 52.52975], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.22397, 52.52975], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.21369, 52.5311], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.21371, 52.53118], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.2137, 52.53117], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.20948, 52.53171], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.20956, 52.53196], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.20595, 52.53255], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.20114, 52.53401], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.20095, 52.5338], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.1984, 52.53437], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.19848, 52.53451], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.19478, 52.53514], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.18783, 52.53615], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.18763, 52.53573], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.18778, 52.53606], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.18523, 52.53648], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.18524, 52.5365], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.18523, 52.53648], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.17109, 52.53875], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.16593, 52.53992], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.1607, 52.54117], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.1276, 52.54975], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.1276, 52.54975], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.12921, 52.54933], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.12921, 52.54933], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.11701, 52.55246], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.11701, 52.55246], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.10514, 52.55567], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.08924, 52.5598], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.08924, 52.5598], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.05095, 52.56974], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.05095, 52.56974], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.03193, 52.57466], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.03193, 52.57466], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.03193, 52.57466], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.03193, 52.57466], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [13.00885, 52.58066], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.99998, 52.58292], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.99998, 52.58292], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.98704, 52.58622], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.97895, 52.58845], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.93546, 52.59969], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.92199, 52.60329], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.90683, 52.60719], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.89792, 52.60938], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.8856, 52.61272], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.8856, 52.61272], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.87943, 52.61423], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.87436, 52.61571], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.8491, 52.62502], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.8491, 52.62502], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.74165, 52.66478], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.74165, 52.66478], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.72018, 52.67271], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.71653, 52.67424], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.71322, 52.67589], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.71322, 52.67589], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.71042, 52.6775], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.70791, 52.67915], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.63245, 52.73031], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.63245, 52.73031], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.5876, 52.76064], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.5876, 52.76064], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.4592, 52.84705], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.4592, 52.84705], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.45274, 52.85141], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.45091, 52.85264], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.45105, 52.85272], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.444, 52.85746], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.444, 52.85746], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.44385, 52.85737], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.43328, 52.86438], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.43169, 52.8652], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.42889, 52.8663], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.35027, 52.8916], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.34689, 52.89253], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.34334, 52.89319], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.33967, 52.89354], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.33596, 52.89359], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.28484, 52.89139], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.27896, 52.89088], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.23634, 52.88631], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.23043, 52.88599], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.22745, 52.88598], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.2242, 52.88609], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.2242, 52.88609], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.1491, 52.8907], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.14468, 52.89103], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.14177, 52.89137], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.13605, 52.89234], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.08388, 52.90351], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.08388, 52.90351], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.07726, 52.90534], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [12.07278, 52.90694], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.94977, 52.96001], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.94977, 52.96001], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.94245, 52.96311], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.93223, 52.96679], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.92961, 52.96765], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.87325, 52.98405], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.86103, 52.98751], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.8575, 52.98835], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.85282, 52.98905], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.84214, 52.98976], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.78825, 52.99283], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.78481, 52.99297], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.77866, 52.9929], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.77654, 52.99306], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.77667, 52.99344], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.77654, 52.99306], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.77438, 52.99341], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.77214, 52.99402], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.76965, 52.99507], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.76822, 52.99593], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.76681, 52.99704], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.76607, 52.99783], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.7651, 52.99924], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.76404, 53.00122], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.76294, 53.00335], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.76294, 53.00335], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.76209, 53.00562], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.76156, 53.00818], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.75999, 53.01863], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.75999, 53.01863], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.75896, 53.02618], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.75016, 53.08416], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.75016, 53.08416], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.73836, 53.16122], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.73836, 53.16122], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.73394, 53.19105], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.73354, 53.19283], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.73226, 53.19635], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.7309, 53.19892], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.72857, 53.20223], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.72645, 53.2046], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.72403, 53.20687], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.72132, 53.20902], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.71835, 53.21104], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.71398, 53.21349], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.66362, 53.23654], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.66362, 53.23654], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.65112, 53.24225], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.65112, 53.24225], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.57315, 53.27784], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.56972, 53.27957], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.56432, 53.28283], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.56432, 53.28283], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.5177, 53.31039], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.51624, 53.30953], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.5177, 53.31039], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.51531, 53.31192], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.51329, 53.31345], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.511, 53.31557], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.50921, 53.31767], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.50822, 53.31915], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.5074, 53.32076], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.50624, 53.32469], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.50574, 53.32604], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.50486, 53.32756], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.50385, 53.32882], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.50245, 53.33014], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.50027, 53.33172], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.49907, 53.33241], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.49366, 53.33506], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.49366, 53.33506], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.45045, 53.35549], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.45045, 53.35549], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.40358, 53.37763], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.39713, 53.38052], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.39326, 53.3819], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.38919, 53.38305], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.37464, 53.38622], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.37464, 53.38622], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.31781, 53.39847], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.31781, 53.39847], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.24191, 53.41474], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.23624, 53.41587], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.23324, 53.41619], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.2305, 53.41627], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.22814, 53.41618], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.22597, 53.41597], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.22395, 53.41566], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.22151, 53.41512], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.21897, 53.4144], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.21576, 53.41327], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.2153, 53.41361], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.21199, 53.41173], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.20864, 53.4102], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.20778, 53.40993], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.20612, 53.40964], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.20612, 53.40964], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.20701, 53.4091], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.15773, 53.37663], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.15606, 53.37572], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.15427, 53.3749], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.15106, 53.37375], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.1476, 53.37287], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.14299, 53.37216], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.14299, 53.37216], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.08354, 53.36499], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.08354, 53.36499], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.02743, 53.35819], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.02384, 53.35785], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [11.02009, 53.35773], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.98705, 53.35799], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.98405, 53.3581], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.98183, 53.35829], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.97962, 53.35856], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.97674, 53.35906], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.95201, 53.36442], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.95201, 53.36442], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.90455, 53.37471], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.90024, 53.37551], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.89731, 53.3759], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.89434, 53.37617], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.89135, 53.37631], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.88684, 53.37635], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.76786, 53.37606], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.76411, 53.37619], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.76042, 53.37662], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.75756, 53.37718], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.75411, 53.37813], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.75411, 53.37813], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.74951, 53.37959], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.74639, 53.38083], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.74343, 53.38242], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.74114, 53.38403], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.73225, 53.39182], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.68993, 53.42813], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.68993, 53.42813], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.65985, 53.45385], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.65601, 53.45662], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.64984, 53.46022], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.64984, 53.46022], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.64982, 53.46022], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.64982, 53.46022], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.62314, 53.47542], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.62268, 53.47521], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.62181, 53.47606], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.62098, 53.47663], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.61977, 53.47735], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.61131, 53.48209], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.61131, 53.48209], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.60795, 53.4839], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.60315, 53.48606], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.59996, 53.48726], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.59079, 53.49017], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.59079, 53.49017], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.55908, 53.50015], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.55908, 53.50015], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.54596, 53.50428], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.54324, 53.50506], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.53969, 53.5058], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.53749, 53.50611], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.53526, 53.50631], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.533, 53.5064], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.53074, 53.50638], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.52774, 53.50618], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.52553, 53.5059], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.52337, 53.50552], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.52126, 53.50504], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.51294, 53.50272], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.51084, 53.50222], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.50794, 53.50172], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.50422, 53.50138], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.49971, 53.50139], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.49524, 53.50178], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.49232, 53.50222], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.48489, 53.50381], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.48489, 53.50381], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.48163, 53.50441], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.47869, 53.50479], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.46895, 53.50542], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.46598, 53.5057], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.46235, 53.50631], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.45956, 53.507], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.45692, 53.50785], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.45505, 53.50861], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.42782, 53.52066], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.42587, 53.52134], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.42384, 53.52193], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.42029, 53.52268], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.41809, 53.523], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.41586, 53.52321], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.4136, 53.52331], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.41134, 53.5233], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.37228, 53.52093], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.36926, 53.52083], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.36626, 53.52092], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.36256, 53.52134], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.3604, 53.52174], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.35832, 53.52227], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.35568, 53.52313], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.3502, 53.52552], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.34828, 53.52623], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.34487, 53.52718], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.34107, 53.5279], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.34107, 53.5279], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.33396, 53.5291], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.32878, 53.52967], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.32427, 53.52993], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.31961, 53.52997], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.3196, 53.53001], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.31932, 53.52997], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.31483, 53.52992], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.31475, 53.53004], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.31334, 53.52995], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.30808, 53.52934], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.303, 53.52852], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.3002, 53.52793], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.28762, 53.52489], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.28493, 53.52409], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.28241, 53.52309], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.28011, 53.52194], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.27811, 53.52067], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.27811, 53.52067], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.27624, 53.51919], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.27321, 53.51609], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.27192, 53.51498], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.26996, 53.51361], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.26774, 53.5124], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.2653, 53.51135], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.26265, 53.51049], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.26057, 53.50996], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.25488, 53.50878], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.25198, 53.50802], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.25205, 53.50793], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.2492, 53.50694], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.24742, 53.50612], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.24576, 53.5052], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.24378, 53.50384], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.24028, 53.50092], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.23766, 53.49931], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.23462, 53.49798], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.23126, 53.49698], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.23126, 53.49698], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.2312, 53.49707], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.22803, 53.49646], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.22509, 53.49612], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.22509, 53.49612], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.22509, 53.49612], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.22212, 53.49576], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.21995, 53.49538], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.21788, 53.49485], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.21587, 53.49422], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.21395, 53.49351], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.21151, 53.49246], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.20626, 53.48986], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.20626, 53.48986], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.20625, 53.48986], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.20625, 53.48986], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.20625, 53.48986], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.20391, 53.48879], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.20129, 53.4879], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.19849, 53.48725], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.19555, 53.48687], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.19104, 53.48684], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.18188, 53.48784], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.18185, 53.48772], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.18185, 53.48772], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.18124, 53.48779], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.18128, 53.48791], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.15867, 53.49036], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.15867, 53.49036], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.15369, 53.49093], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.15366, 53.49084], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.15369, 53.49093], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.15034, 53.49143], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.14748, 53.492], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.14195, 53.49342], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.13934, 53.49431], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.13687, 53.49534], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.13064, 53.49832], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.13064, 53.49832], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.12307, 53.50231], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.11319, 53.5073], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.11319, 53.5073], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.11296, 53.50715], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.11265, 53.50732], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.09793, 53.5148], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.09799, 53.51483], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.09793, 53.5148], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.09685, 53.51534], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.09693, 53.5154], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.07175, 53.52804], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.06978, 53.52904], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.06973, 53.52901], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.06969, 53.52899], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.06647, 53.53056], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.06655, 53.53063], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.05948, 53.53359], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.05426, 53.53536], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.05258, 53.53586], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.05257, 53.53585], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.05254, 53.5358], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.05088, 53.5361], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.04571, 53.53672], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.03906, 53.53792], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.03905, 53.5379], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.03906, 53.53792], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.03188, 53.53976], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.02942, 53.54022], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.02807, 53.54062], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.02363, 53.54233], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.02165, 53.54297], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.01983, 53.54376], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.01789, 53.54445], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.01648, 53.54477], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.01353, 53.54515], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.00972, 53.54659], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.00864, 53.54722], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.00785, 53.54797], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.00749, 53.54884], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.00728, 53.55017], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.00731, 53.55131], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.00683, 53.55267], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.00703, 53.55368], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [10.007, 53.55371], + }, + }, + { + type: 'Feature', + properties: { + type: 'stop', + id: '8002549', + name: 'Hamburg Hbf', + location: { + type: 'location', + id: '8002549', + latitude: 53.553533, + longitude: 10.00636, + }, + products: { + nationalExpress: true, + national: true, + regionalExpress: true, + regional: true, + suburban: true, + bus: true, + ferry: false, + subway: true, + tram: false, + taxi: false, + }, + }, + geometry: { + type: 'Point', + coordinates: [10.00636, 53.55354], + }, + }, + ], + }, + tripId: '1|244757|0|80|27072020', + line: { + type: 'line', + id: 'ice-696', + fahrtNr: '696', + name: 'ICE 696', + public: true, + adminCode: '80____', + productName: 'ICE', + mode: 'train', + product: 'nationalExpress', + operator: { + type: 'operator', + id: 'db-fernverkehr-ag', + name: 'DB Fernverkehr AG', + }, + }, + direction: 'Kiel Hbf', + arrivalPlatform: '5', + plannedArrivalPlatform: '5', + departurePlatform: '7', + plannedDeparturePlatform: '7', + loadFactor: 'low-to-medium', + }, + ], + refreshToken: '¶HKI¶T$A=1@O=Berlin Hbf (tief)@L=8098160@a=128@$A=1@O=Hamburg Hbf@L=8002549@a=128@$202007271038$202007271234$ICE 696$$1$$$', + price: { + amount: 69.9, + currency: 'EUR', + hint: null, + }, +}; + +export { + dbJourneyPolyline, +}; +const dbArrivals: Alternative[] = [ + { + tripId: '1|1144239|52|80|9062020', + stop: { + type: 'stop', + id: '730985', + name: 'Jungfernheide Bahnhof (S+U), Berlin', + location: { + type: 'location', + id: '730985', + latitude: 52.530866, + longitude: 13.300781, + }, + products: { + nationalExpress: false, + national: false, + regionalExpress: false, + regional: true, + suburban: true, + bus: true, + ferry: false, + subway: true, + tram: false, + taxi: false, + }, + station: { + type: 'station', + id: '8011167', + name: 'Berlin Jungfernheide', + location: { + type: 'location', + id: '8011167', + latitude: 52.530291, + longitude: 13.299451, + }, + products: { + nationalExpress: false, + national: false, + regionalExpress: false, + regional: true, + suburban: true, + bus: true, + ferry: false, + subway: true, + tram: false, + taxi: false, + }, + lines: [ + { + type: 'line', + id: '3-bb-re6', + fahrtNr: null, + name: 'Bus RE6', + public: true, + mode: 'train', + product: 'regional', + }, + { + type: 'line', + id: '3-08-sev-1491900-5842741', + fahrtNr: null, + name: 'Bus SEV', + public: true, + mode: 'train', + product: 'regional', + }, + { + type: 'line', + id: 'rb', + fahrtNr: null, + name: 'RB', + public: true, + mode: 'train', + product: 'regional', + }, + { + type: 'line', + id: 're', + fahrtNr: null, + name: 'RE', + public: true, + mode: 'train', + product: 'regional', + }, + { + type: 'line', + id: 're', + fahrtNr: null, + name: 'RE', + public: true, + mode: 'train', + product: 'regional', + }, + { + type: 'line', + id: '4-08-2', + fahrtNr: null, + name: 'S 2', + public: true, + mode: 'train', + product: 'suburban', + }, + { + type: 'line', + id: '4-08-25', + fahrtNr: null, + name: 'S 25', + public: true, + mode: 'train', + product: 'suburban', + }, + { + type: 'line', + id: '4-08-41', + fahrtNr: null, + name: 'S 41', + public: true, + mode: 'train', + product: 'suburban', + }, + { + type: 'line', + id: '4-08-42', + fahrtNr: null, + name: 'S 42', + public: true, + mode: 'train', + product: 'suburban', + }, + { + type: 'line', + id: '4-08-46', + fahrtNr: null, + name: 'S 46', + public: true, + mode: 'train', + product: 'suburban', + }, + { + type: 'line', + id: '5-vbbbvb-n7', + fahrtNr: null, + name: 'Bus N7', + public: true, + mode: 'bus', + product: 'bus', + }, + { + type: 'line', + id: '5-vbbbvb-x9', + fahrtNr: null, + name: 'Bus X9', + public: true, + mode: 'bus', + product: 'bus', + }, + { + type: 'line', + id: '5-vbbbvb-109', + fahrtNr: null, + name: 'Bus 109', + public: true, + mode: 'bus', + product: 'bus', + }, + { + type: 'line', + id: '5-vbbbvb-m21', + fahrtNr: null, + name: 'Bus M21', + public: true, + mode: 'bus', + product: 'bus', + }, + { + type: 'line', + id: '5-vbbbvb-m27', + fahrtNr: null, + name: 'Bus M27', + public: true, + mode: 'bus', + product: 'bus', + }, + { + type: 'line', + id: '7-vbbbvu-7', + fahrtNr: null, + name: 'U 7', + public: true, + mode: 'train', + product: 'subway', + }, + ], + }, + lines: [ + { + type: 'line', + id: '5-vbbbvb-n7', + fahrtNr: null, + name: 'Bus N7', + public: true, + mode: 'bus', + product: 'bus', + }, + { + type: 'line', + id: '5-vbbbvb-x9', + fahrtNr: null, + name: 'Bus X9', + public: true, + mode: 'bus', + product: 'bus', + }, + { + type: 'line', + id: '5-vbbbvb-m21', + fahrtNr: null, + name: 'Bus M21', + public: true, + mode: 'bus', + product: 'bus', + }, + { + type: 'line', + id: '5-vbbbvb-m27', + fahrtNr: null, + name: 'Bus M27', + public: true, + mode: 'bus', + product: 'bus', + }, + { + type: 'line', + id: '7-vbbbvu-7', + fahrtNr: null, + name: 'U 7', + public: true, + mode: 'train', + product: 'subway', + }, + ], + }, + when: '2020-06-09T17:21:00+02:00', + plannedWhen: '2020-06-09T17:04:00+02:00', + delay: 1020, + platform: null, + plannedPlatform: null, + prognosisType: 'prognosed', + direction: null, + provenance: 'Rathaus Spandau (S+U), Berlin', + origin: null, + destination: null, + line: { + type: 'line', + id: '7-vbbbvu-7', + fahrtNr: '19245', + name: 'U 7', + public: true, + adminCode: 'vbbBVU', + productName: 'U', + mode: 'train', + product: 'subway', + operator: {type: 'operator', id: 'nahreisezug', name: 'Nahreisezug'}, + }, + remarks: [], + }, +]; + +export { + dbArrivals, +}; +const bvgRadar: Alternative[] = [ + { + direction: 'Hohenschönhausen, Zingster Str.', + tripId: '1|57637|1|86|19082019', + line: { + type: 'line', + id: 'm4', + fahrtNr: null, + name: 'M4', + public: true, + mode: 'train', + product: 'tram', + }, + location: { + type: 'location', + latitude: 52.52211, + longitude: 13.414728, + }, + nextStopovers: [ + { + stop: { + type: 'stop', + id: '900100002', + name: 'S Hackescher Markt (Berlin)', + location: { + type: 'location', + id: '900100002', + latitude: 52.522605, + longitude: 13.402359, + }, + products: { + suburban: true, + subway: false, + tram: true, + bus: true, + ferry: false, + express: false, + regional: false, + }, + }, + arrival: null, + plannedArrival: null, + arrivalDelay: null, + arrivalPlatform: null, + plannedArrivalPlatform: null, + arrivalPrognosisType: null, + departure: '2019-08-19T20:26:00+02:00', + plannedDeparture: '2019-08-19T20:26:00+02:00', + departureDelay: null, + departurePlatform: null, + plannedDeparturePlatform: null, + departurePrognosisType: null, + }, + { + stop: { + type: 'stop', + id: '900100026', + name: 'S+U Alexanderplatz Bhf/Gontardstr. (Berlin)', + location: { + type: 'location', + id: '900100026', + latitude: 52.521059, + longitude: 13.41125, + }, + products: { + suburban: false, + subway: false, + tram: true, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + arrival: '2019-08-19T20:30:00+02:00', + plannedArrival: '2019-08-19T20:29:00+02:00', + arrivalDelay: 60, + arrivalPlatform: null, + plannedArrivalPlatform: null, + arrivalPrognosisType: null, + departure: '2019-08-19T20:30:00+02:00', + plannedDeparture: '2019-08-19T20:29:00+02:00', + departureDelay: 60, + departurePlatform: null, + plannedDeparturePlatform: null, + departurePrognosisType: null, + }, + { + stop: { + type: 'stop', + id: '900100005', + name: 'U Alexanderplatz (Berlin) [Tram]', + location: { + type: 'location', + id: '900100005', + latitude: 52.522389, + longitude: 13.414495, + }, + products: { + suburban: false, + subway: false, + tram: true, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + arrival: '2019-08-19T20:34:00+02:00', + plannedArrival: '2019-08-19T20:31:00+02:00', + arrivalDelay: 180, + arrivalPlatform: null, + plannedArrivalPlatform: null, + arrivalPrognosisType: null, + departure: '2019-08-19T20:34:00+02:00', + plannedDeparture: '2019-08-19T20:31:00+02:00', + departureDelay: 180, + departurePlatform: null, + plannedDeparturePlatform: null, + departurePrognosisType: null, + }, + { + stop: { + type: 'stop', + id: '900151003', + name: 'Zingster Str. (Berlin)', + location: { + type: 'location', + id: '900151003', + latitude: 52.57236, + longitude: 13.495164, + }, + products: { + suburban: false, + subway: false, + tram: true, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + arrival: '2019-08-19T21:01:00+02:00', + plannedArrival: '2019-08-19T20:58:00+02:00', + arrivalDelay: 180, + arrivalPlatform: null, + plannedArrivalPlatform: null, + arrivalPrognosisType: null, + departure: null, + plannedDeparture: null, + departureDelay: null, + departurePlatform: null, + plannedDeparturePlatform: null, + departurePrognosisType: null, + }, + ], + frames: [ + { + origin: { + type: 'stop', + id: '900100026', + name: 'S+U Alexanderplatz Bhf/Gontardstr. (Berlin)', + location: { + type: 'location', + id: '900100026', + latitude: 52.521059, + longitude: 13.41125, + }, + products: { + suburban: false, + subway: false, + tram: true, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + destination: { + type: 'stop', + id: '900100005', + name: 'U Alexanderplatz (Berlin) [Tram]', + location: { + type: 'location', + id: '900100005', + latitude: 52.522389, + longitude: 13.414495, + }, + products: { + suburban: false, + subway: false, + tram: true, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + t: 0, + }, + { + origin: { + type: 'stop', + id: '900100026', + name: 'S+U Alexanderplatz Bhf/Gontardstr. (Berlin)', + location: { + type: 'location', + id: '900100026', + latitude: 52.521059, + longitude: 13.41125, + }, + products: { + suburban: false, + subway: false, + tram: true, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + destination: { + type: 'stop', + id: '900100005', + name: 'U Alexanderplatz (Berlin) [Tram]', + location: { + type: 'location', + id: '900100005', + latitude: 52.522389, + longitude: 13.414495, + }, + products: { + suburban: false, + subway: false, + tram: true, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + t: 10000, + }, + { + origin: { + type: 'stop', + id: '900100026', + name: 'S+U Alexanderplatz Bhf/Gontardstr. (Berlin)', + location: { + type: 'location', + id: '900100026', + latitude: 52.521059, + longitude: 13.41125, + }, + products: { + suburban: false, + subway: false, + tram: true, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + destination: { + type: 'stop', + id: '900100005', + name: 'U Alexanderplatz (Berlin) [Tram]', + location: { + type: 'location', + id: '900100005', + latitude: 52.522389, + longitude: 13.414495, + }, + products: { + suburban: false, + subway: false, + tram: true, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + t: 20000, + }, + { + origin: { + type: 'stop', + id: '900100026', + name: 'S+U Alexanderplatz Bhf/Gontardstr. (Berlin)', + location: { + type: 'location', + id: '900100026', + latitude: 52.521059, + longitude: 13.41125, + }, + products: { + suburban: false, + subway: false, + tram: true, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + destination: { + type: 'stop', + id: '900100005', + name: 'U Alexanderplatz (Berlin) [Tram]', + location: { + type: 'location', + id: '900100005', + latitude: 52.522389, + longitude: 13.414495, + }, + products: { + suburban: false, + subway: false, + tram: true, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + t: 30000, + }, + ], + polyline: { + type: 'FeatureCollection', + features: [ + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [ + 13.41473, + 52.52211, + ], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [ + 13.4149, + 52.52222, + ], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [ + 13.41507, + 52.52234, + ], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [ + 13.4151, + 52.52236, + ], + }, + }, + ], + }, + }, + { + direction: 'S Spandau Bhf (Berlin)', + tripId: '1|35835|39|86|19082019', + line: { + type: 'line', + id: 's9', + fahrtNr: null, + name: 'S9', + public: true, + mode: 'train', + product: 'suburban', + }, + location: { + type: 'location', + latitude: 52.521877, + longitude: 13.410899, + }, + nextStopovers: [ + { + stop: { + type: 'stop', + id: '900260005', + name: 'S Flughafen Berlin-Schönefeld Bhf', + location: { + type: 'location', + id: '900260005', + latitude: 52.390796, + longitude: 13.51352, + }, + products: { + suburban: true, + subway: false, + tram: false, + bus: true, + ferry: false, + express: false, + regional: true, + }, + }, + arrival: null, + plannedArrival: null, + arrivalDelay: null, + arrivalPlatform: null, + plannedArrivalPlatform: null, + arrivalPrognosisType: null, + departure: '2019-08-19T19:57:00+02:00', + plannedDeparture: '2019-08-19T19:57:00+02:00', + departureDelay: 0, + departurePlatform: '13', + plannedDeparturePlatform: '13', + departurePrognosisType: null, + }, + { + stop: { + type: 'stop', + id: '900100003', + name: 'S+U Alexanderplatz Bhf (Berlin)', + location: { + type: 'location', + id: '900100003', + latitude: 52.521508, + longitude: 13.411267, + }, + products: { + suburban: true, + subway: false, + tram: false, + bus: true, + ferry: false, + express: false, + regional: true, + }, + }, + arrival: '2019-08-19T20:32:00+02:00', + plannedArrival: '2019-08-19T20:32:00+02:00', + arrivalDelay: 0, + arrivalPlatform: '4', + plannedArrivalPlatform: '4', + arrivalPrognosisType: null, + departure: '2019-08-19T20:33:00+02:00', + plannedDeparture: '2019-08-19T20:33:00+02:00', + departureDelay: 0, + departurePlatform: '4', + plannedDeparturePlatform: '4', + departurePrognosisType: null, + }, + { + stop: { + type: 'stop', + id: '900100002', + name: 'S Hackescher Markt (Berlin)', + location: { + type: 'location', + id: '900100002', + latitude: 52.522605, + longitude: 13.402359, + }, + products: { + suburban: true, + subway: false, + tram: true, + bus: true, + ferry: false, + express: false, + regional: false, + }, + }, + arrival: '2019-08-19T20:34:00+02:00', + plannedArrival: '2019-08-19T20:34:00+02:00', + arrivalDelay: 0, + arrivalPlatform: '4', + plannedArrivalPlatform: '4', + arrivalPrognosisType: null, + departure: '2019-08-19T20:35:00+02:00', + plannedDeparture: '2019-08-19T20:35:00+02:00', + departureDelay: 0, + departurePlatform: '4', + plannedDeparturePlatform: '4', + departurePrognosisType: null, + }, + { + stop: { + type: 'stop', + id: '900029101', + name: 'S Spandau Bhf (Berlin)', + location: { + type: 'location', + id: '900029101', + latitude: 52.534794, + longitude: 13.197477, + }, + products: { + suburban: true, + subway: false, + tram: false, + bus: false, + ferry: false, + express: true, + regional: true, + }, + }, + arrival: '2019-08-19T21:07:00+02:00', + plannedArrival: '2019-08-19T21:07:00+02:00', + arrivalDelay: 0, + arrivalPlatform: '2', + plannedArrivalPlatform: '2', + arrivalPrognosisType: null, + departure: null, + plannedDeparture: null, + departureDelay: null, + departurePlatform: null, + plannedDeparturePlatform: null, + departurePrognosisType: null, + }, + ], + frames: [ + { + origin: { + type: 'stop', + id: '900100003', + name: 'S+U Alexanderplatz Bhf (Berlin)', + location: { + type: 'location', + id: '900100003', + latitude: 52.521508, + longitude: 13.411267, + }, + products: { + suburban: true, + subway: false, + tram: false, + bus: true, + ferry: false, + express: false, + regional: true, + }, + }, + destination: { + type: 'stop', + id: '900100002', + name: 'S Hackescher Markt (Berlin)', + location: { + type: 'location', + id: '900100002', + latitude: 52.522605, + longitude: 13.402359, + }, + products: { + suburban: true, + subway: false, + tram: true, + bus: true, + ferry: false, + express: false, + regional: false, + }, + }, + t: 0, + }, + { + origin: { + type: 'stop', + id: '900100003', + name: 'S+U Alexanderplatz Bhf (Berlin)', + location: { + type: 'location', + id: '900100003', + latitude: 52.521508, + longitude: 13.411267, + }, + products: { + suburban: true, + subway: false, + tram: false, + bus: true, + ferry: false, + express: false, + regional: true, + }, + }, + destination: { + type: 'stop', + id: '900100002', + name: 'S Hackescher Markt (Berlin)', + location: { + type: 'location', + id: '900100002', + latitude: 52.522605, + longitude: 13.402359, + }, + products: { + suburban: true, + subway: false, + tram: true, + bus: true, + ferry: false, + express: false, + regional: false, + }, + }, + t: 10000, + }, + { + origin: { + type: 'stop', + id: '900100003', + name: 'S+U Alexanderplatz Bhf (Berlin)', + location: { + type: 'location', + id: '900100003', + latitude: 52.521508, + longitude: 13.411267, + }, + products: { + suburban: true, + subway: false, + tram: false, + bus: true, + ferry: false, + express: false, + regional: true, + }, + }, + destination: { + type: 'stop', + id: '900100002', + name: 'S Hackescher Markt (Berlin)', + location: { + type: 'location', + id: '900100002', + latitude: 52.522605, + longitude: 13.402359, + }, + products: { + suburban: true, + subway: false, + tram: true, + bus: true, + ferry: false, + express: false, + regional: false, + }, + }, + t: 20000, + }, + { + origin: { + type: 'stop', + id: '900100003', + name: 'S+U Alexanderplatz Bhf (Berlin)', + location: { + type: 'location', + id: '900100003', + latitude: 52.521508, + longitude: 13.411267, + }, + products: { + suburban: true, + subway: false, + tram: false, + bus: true, + ferry: false, + express: false, + regional: true, + }, + }, + destination: { + type: 'stop', + id: '900100002', + name: 'S Hackescher Markt (Berlin)', + location: { + type: 'location', + id: '900100002', + latitude: 52.522605, + longitude: 13.402359, + }, + products: { + suburban: true, + subway: false, + tram: true, + bus: true, + ferry: false, + express: false, + regional: false, + }, + }, + t: 30000, + }, + ], + polyline: { + type: 'FeatureCollection', + features: [ + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [ + 13.4109, + 52.52188, + ], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [ + 13.40921, + 52.52268, + ], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [ + 13.40738, + 52.5233, + ], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [ + 13.40532, + 52.52338, + ], + }, + }, + ], + }, + }, + { + direction: 'S+U Hermannstr. (Berlin)', + tripId: '1|31029|0|86|19082019', + line: { + type: 'line', + id: 'u8', + fahrtNr: null, + name: 'U8', + public: true, + mode: 'train', + product: 'subway', + }, + location: { + type: 'location', + latitude: 52.52096, + longitude: 13.412652, + }, + nextStopovers: [ + { + stop: { + type: 'stop', + id: '900085104', + name: 'U Paracelsus-Bad (Berlin)', + location: { + type: 'location', + id: '900085104', + latitude: 52.574536, + longitude: 13.347534, + }, + products: { + suburban: false, + subway: true, + tram: false, + bus: true, + ferry: false, + express: false, + regional: false, + }, + }, + arrival: null, + plannedArrival: null, + arrivalDelay: null, + arrivalPlatform: null, + plannedArrivalPlatform: null, + arrivalPrognosisType: null, + departure: '2019-08-19T20:17:00+02:00', + plannedDeparture: '2019-08-19T20:17:00+02:00', + departureDelay: 0, + departurePlatform: null, + plannedDeparturePlatform: null, + departurePrognosisType: null, + }, + { + stop: { + type: 'stop', + id: '900100705', + name: 'S+U Alexanderplatz (Berlin) [U8]', + location: { + type: 'location', + id: '900100705', + latitude: 52.521616, + longitude: 13.412121, + }, + products: { + suburban: false, + subway: true, + tram: false, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + arrival: '2019-08-19T20:33:00+02:00', + plannedArrival: '2019-08-19T20:33:00+02:00', + arrivalDelay: 0, + arrivalPlatform: null, + plannedArrivalPlatform: null, + arrivalPrognosisType: null, + departure: '2019-08-19T20:33:00+02:00', + plannedDeparture: '2019-08-19T20:33:00+02:00', + departureDelay: 0, + departurePlatform: null, + plannedDeparturePlatform: null, + departurePrognosisType: null, + }, + { + stop: { + type: 'stop', + id: '900100004', + name: 'S+U Jannowitzbrücke (Berlin)', + location: { + type: 'location', + id: '900100004', + latitude: 52.515503, + longitude: 13.418027, + }, + products: { + suburban: true, + subway: true, + tram: false, + bus: true, + ferry: false, + express: false, + regional: false, + }, + }, + arrival: '2019-08-19T20:35:00+02:00', + plannedArrival: '2019-08-19T20:35:00+02:00', + arrivalDelay: 0, + arrivalPlatform: null, + plannedArrivalPlatform: null, + arrivalPrognosisType: null, + departure: '2019-08-19T20:35:00+02:00', + plannedDeparture: '2019-08-19T20:35:00+02:00', + departureDelay: 0, + departurePlatform: null, + plannedDeparturePlatform: null, + departurePrognosisType: null, + }, + { + stop: { + type: 'stop', + id: '900079221', + name: 'S+U Hermannstr. (Berlin)', + location: { + type: 'location', + id: '900079221', + latitude: 52.467177, + longitude: 13.4317, + }, + products: { + suburban: true, + subway: true, + tram: false, + bus: true, + ferry: false, + express: false, + regional: false, + }, + }, + arrival: '2019-08-19T20:47:00+02:00', + plannedArrival: '2019-08-19T20:47:00+02:00', + arrivalDelay: 0, + arrivalPlatform: null, + plannedArrivalPlatform: null, + arrivalPrognosisType: null, + departure: null, + plannedDeparture: null, + departureDelay: null, + departurePlatform: null, + plannedDeparturePlatform: null, + departurePrognosisType: null, + }, + ], + frames: [ + { + origin: { + type: 'stop', + id: '900100705', + name: 'S+U Alexanderplatz (Berlin) [U8]', + location: { + type: 'location', + id: '900100705', + latitude: 52.521616, + longitude: 13.412121, + }, + products: { + suburban: false, + subway: true, + tram: false, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + destination: { + type: 'stop', + id: '900100004', + name: 'S+U Jannowitzbrücke (Berlin)', + location: { + type: 'location', + id: '900100004', + latitude: 52.515503, + longitude: 13.418027, + }, + products: { + suburban: true, + subway: true, + tram: false, + bus: true, + ferry: false, + express: false, + regional: false, + }, + }, + t: 0, + }, + { + origin: { + type: 'stop', + id: '900100705', + name: 'S+U Alexanderplatz (Berlin) [U8]', + location: { + type: 'location', + id: '900100705', + latitude: 52.521616, + longitude: 13.412121, + }, + products: { + suburban: false, + subway: true, + tram: false, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + destination: { + type: 'stop', + id: '900100004', + name: 'S+U Jannowitzbrücke (Berlin)', + location: { + type: 'location', + id: '900100004', + latitude: 52.515503, + longitude: 13.418027, + }, + products: { + suburban: true, + subway: true, + tram: false, + bus: true, + ferry: false, + express: false, + regional: false, + }, + }, + t: 10000, + }, + { + origin: { + type: 'stop', + id: '900100705', + name: 'S+U Alexanderplatz (Berlin) [U8]', + location: { + type: 'location', + id: '900100705', + latitude: 52.521616, + longitude: 13.412121, + }, + products: { + suburban: false, + subway: true, + tram: false, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + destination: { + type: 'stop', + id: '900100004', + name: 'S+U Jannowitzbrücke (Berlin)', + location: { + type: 'location', + id: '900100004', + latitude: 52.515503, + longitude: 13.418027, + }, + products: { + suburban: true, + subway: true, + tram: false, + bus: true, + ferry: false, + express: false, + regional: false, + }, + }, + t: 20000, + }, + { + origin: { + type: 'stop', + id: '900100705', + name: 'S+U Alexanderplatz (Berlin) [U8]', + location: { + type: 'location', + id: '900100705', + latitude: 52.521616, + longitude: 13.412121, + }, + products: { + suburban: false, + subway: true, + tram: false, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + destination: { + type: 'stop', + id: '900100004', + name: 'S+U Jannowitzbrücke (Berlin)', + location: { + type: 'location', + id: '900100004', + latitude: 52.515503, + longitude: 13.418027, + }, + products: { + suburban: true, + subway: true, + tram: false, + bus: true, + ferry: false, + express: false, + regional: false, + }, + }, + t: 30000, + }, + ], + polyline: { + type: 'FeatureCollection', + features: [ + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [ + 13.41265, + 52.52096, + ], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [ + 13.41286, + 52.5208, + ], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [ + 13.41352, + 52.52026, + ], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [ + 13.41423, + 52.51976, + ], + }, + }, + ], + }, + }, + { + direction: 'S+U Alexanderplatz', + tripId: '1|30336|6|86|19082019', + line: { + type: 'line', + id: 'u5', + fahrtNr: null, + name: 'U5', + public: true, + mode: 'train', + product: 'subway', + }, + location: { + type: 'location', + latitude: 52.522182, + longitude: 13.415394, + }, + nextStopovers: [ + { + stop: { + type: 'stop', + id: '900175004', + name: 'U Kaulsdorf-Nord (Berlin)', + location: { + type: 'location', + id: '900175004', + latitude: 52.521436, + longitude: 13.588759, + }, + products: { + suburban: false, + subway: true, + tram: false, + bus: true, + ferry: false, + express: false, + regional: false, + }, + }, + arrival: null, + plannedArrival: null, + arrivalDelay: null, + arrivalPlatform: null, + plannedArrivalPlatform: null, + arrivalPrognosisType: null, + departure: '2019-08-19T20:08:00+02:00', + plannedDeparture: '2019-08-19T20:08:00+02:00', + departureDelay: 0, + departurePlatform: null, + plannedDeparturePlatform: null, + departurePrognosisType: null, + }, + { + stop: { + type: 'stop', + id: '900100017', + name: 'U Schillingstr. (Berlin)', + location: { + type: 'location', + id: '900100017', + latitude: 52.520313, + longitude: 13.421893, + }, + products: { + suburban: false, + subway: true, + tram: false, + bus: true, + ferry: false, + express: false, + regional: false, + }, + }, + arrival: '2019-08-19T20:31:00+02:00', + plannedArrival: '2019-08-19T20:32:00+02:00', + arrivalDelay: -60, + arrivalPlatform: null, + plannedArrivalPlatform: null, + arrivalPrognosisType: null, + departure: '2019-08-19T20:31:00+02:00', + plannedDeparture: '2019-08-19T20:32:00+02:00', + departureDelay: -60, + departurePlatform: null, + plannedDeparturePlatform: null, + departurePrognosisType: null, + }, + { + stop: { + type: 'stop', + id: '900100704', + name: 'S+U Alexanderplatz (Berlin) [U5]', + location: { + type: 'location', + id: '900100704', + latitude: 52.521607, + longitude: 13.41311, + }, + products: { + suburban: false, + subway: true, + tram: false, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + arrival: '2019-08-19T20:34:00+02:00', + plannedArrival: '2019-08-19T20:34:00+02:00', + arrivalDelay: 0, + arrivalPlatform: null, + plannedArrivalPlatform: null, + arrivalPrognosisType: null, + departure: null, + plannedDeparture: null, + departureDelay: null, + departurePlatform: null, + plannedDeparturePlatform: null, + departurePrognosisType: null, + }, + { + stop: { + type: 'stop', + id: '900100704', + name: 'S+U Alexanderplatz (Berlin) [U5]', + location: { + type: 'location', + id: '900100704', + latitude: 52.521607, + longitude: 13.41311, + }, + products: { + suburban: false, + subway: true, + tram: false, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + arrival: '2019-08-19T20:34:00+02:00', + plannedArrival: '2019-08-19T20:34:00+02:00', + arrivalDelay: 0, + arrivalPlatform: null, + plannedArrivalPlatform: null, + arrivalPrognosisType: null, + departure: null, + plannedDeparture: null, + departureDelay: null, + departurePlatform: null, + plannedDeparturePlatform: null, + departurePrognosisType: null, + }, + ], + frames: [ + { + origin: { + type: 'stop', + id: '900100017', + name: 'U Schillingstr. (Berlin)', + location: { + type: 'location', + id: '900100017', + latitude: 52.520313, + longitude: 13.421893, + }, + products: { + suburban: false, + subway: true, + tram: false, + bus: true, + ferry: false, + express: false, + regional: false, + }, + }, + destination: { + type: 'stop', + id: '900100704', + name: 'S+U Alexanderplatz (Berlin) [U5]', + location: { + type: 'location', + id: '900100704', + latitude: 52.521607, + longitude: 13.41311, + }, + products: { + suburban: false, + subway: true, + tram: false, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + t: 0, + }, + { + origin: { + type: 'stop', + id: '900100017', + name: 'U Schillingstr. (Berlin)', + location: { + type: 'location', + id: '900100017', + latitude: 52.520313, + longitude: 13.421893, + }, + products: { + suburban: false, + subway: true, + tram: false, + bus: true, + ferry: false, + express: false, + regional: false, + }, + }, + destination: { + type: 'stop', + id: '900100704', + name: 'S+U Alexanderplatz (Berlin) [U5]', + location: { + type: 'location', + id: '900100704', + latitude: 52.521607, + longitude: 13.41311, + }, + products: { + suburban: false, + subway: true, + tram: false, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + t: 10000, + }, + { + origin: { + type: 'stop', + id: '900100017', + name: 'U Schillingstr. (Berlin)', + location: { + type: 'location', + id: '900100017', + latitude: 52.520313, + longitude: 13.421893, + }, + products: { + suburban: false, + subway: true, + tram: false, + bus: true, + ferry: false, + express: false, + regional: false, + }, + }, + destination: { + type: 'stop', + id: '900100704', + name: 'S+U Alexanderplatz (Berlin) [U5]', + location: { + type: 'location', + id: '900100704', + latitude: 52.521607, + longitude: 13.41311, + }, + products: { + suburban: false, + subway: true, + tram: false, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + t: 20000, + }, + { + origin: { + type: 'stop', + id: '900100017', + name: 'U Schillingstr. (Berlin)', + location: { + type: 'location', + id: '900100017', + latitude: 52.520313, + longitude: 13.421893, + }, + products: { + suburban: false, + subway: true, + tram: false, + bus: true, + ferry: false, + express: false, + regional: false, + }, + }, + destination: { + type: 'stop', + id: '900100704', + name: 'S+U Alexanderplatz (Berlin) [U5]', + location: { + type: 'location', + id: '900100704', + latitude: 52.521607, + longitude: 13.41311, + }, + products: { + suburban: false, + subway: true, + tram: false, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + t: 30000, + }, + ], + polyline: { + type: 'FeatureCollection', + features: [ + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [ + 13.41539, + 52.52218, + ], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [ + 13.41487, + 52.52201, + ], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [ + 13.41439, + 52.5218, + ], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [ + 13.41389, + 52.52159, + ], + }, + }, + ], + }, + }, + { + direction: 'S+U Pankow (Berlin)', + tripId: '1|30095|5|86|19082019', + line: { + type: 'line', + id: 'u2', + fahrtNr: null, + name: 'U2', + public: true, + mode: 'train', + product: 'subway', + }, + location: { + type: 'location', + latitude: 52.520043, + longitude: 13.413506, + }, + nextStopovers: [ + { + stop: { + type: 'stop', + id: '900026201', + name: 'U Theodor-Heuss-Platz (Berlin)', + location: { + type: 'location', + id: '900026201', + latitude: 52.509795, + longitude: 13.272977, + }, + products: { + suburban: false, + subway: true, + tram: false, + bus: true, + ferry: false, + express: false, + regional: false, + }, + }, + arrival: null, + plannedArrival: null, + arrivalDelay: null, + arrivalPlatform: null, + plannedArrivalPlatform: null, + arrivalPrognosisType: null, + departure: '2019-08-19T20:04:00+02:00', + plannedDeparture: '2019-08-19T20:04:00+02:00', + departureDelay: 0, + departurePlatform: null, + plannedDeparturePlatform: null, + departurePrognosisType: null, + }, + { + stop: { + type: 'stop', + id: '900100015', + name: 'U Klosterstr. (Berlin)', + location: { + type: 'location', + id: '900100015', + latitude: 52.517229, + longitude: 13.412454, + }, + products: { + suburban: false, + subway: true, + tram: false, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + arrival: '2019-08-19T20:32:00+02:00', + plannedArrival: '2019-08-19T20:31:00+02:00', + arrivalDelay: 60, + arrivalPlatform: null, + plannedArrivalPlatform: null, + arrivalPrognosisType: null, + departure: '2019-08-19T20:32:00+02:00', + plannedDeparture: '2019-08-19T20:31:00+02:00', + departureDelay: 60, + departurePlatform: null, + plannedDeparturePlatform: null, + departurePrognosisType: null, + }, + { + stop: { + type: 'stop', + id: '900100703', + name: 'S+U Alexanderplatz (Berlin) [U2]', + location: { + type: 'location', + id: '900100703', + latitude: 52.522075, + longitude: 13.413596, + }, + products: { + suburban: false, + subway: true, + tram: false, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + arrival: '2019-08-19T20:34:00+02:00', + plannedArrival: '2019-08-19T20:33:00+02:00', + arrivalDelay: 60, + arrivalPlatform: null, + plannedArrivalPlatform: null, + arrivalPrognosisType: null, + departure: '2019-08-19T20:34:00+02:00', + plannedDeparture: '2019-08-19T20:33:00+02:00', + departureDelay: 60, + departurePlatform: null, + plannedDeparturePlatform: null, + departurePrognosisType: null, + }, + { + stop: { + type: 'stop', + id: '900130002', + name: 'S+U Pankow (Berlin)', + location: { + type: 'location', + id: '900130002', + latitude: 52.567281, + longitude: 13.412283, + }, + products: { + suburban: true, + subway: true, + tram: true, + bus: true, + ferry: false, + express: false, + regional: false, + }, + }, + arrival: '2019-08-19T20:46:00+02:00', + plannedArrival: '2019-08-19T20:45:00+02:00', + arrivalDelay: 60, + arrivalPlatform: null, + plannedArrivalPlatform: null, + arrivalPrognosisType: null, + departure: null, + plannedDeparture: null, + departureDelay: null, + departurePlatform: null, + plannedDeparturePlatform: null, + departurePrognosisType: null, + }, + ], + frames: [ + { + origin: { + type: 'stop', + id: '900100015', + name: 'U Klosterstr. (Berlin)', + location: { + type: 'location', + id: '900100015', + latitude: 52.517229, + longitude: 13.412454, + }, + products: { + suburban: false, + subway: true, + tram: false, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + destination: { + type: 'stop', + id: '900100703', + name: 'S+U Alexanderplatz (Berlin) [U2]', + location: { + type: 'location', + id: '900100703', + latitude: 52.522075, + longitude: 13.413596, + }, + products: { + suburban: false, + subway: true, + tram: false, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + t: 0, + }, + { + origin: { + type: 'stop', + id: '900100015', + name: 'U Klosterstr. (Berlin)', + location: { + type: 'location', + id: '900100015', + latitude: 52.517229, + longitude: 13.412454, + }, + products: { + suburban: false, + subway: true, + tram: false, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + destination: { + type: 'stop', + id: '900100703', + name: 'S+U Alexanderplatz (Berlin) [U2]', + location: { + type: 'location', + id: '900100703', + latitude: 52.522075, + longitude: 13.413596, + }, + products: { + suburban: false, + subway: true, + tram: false, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + t: 10000, + }, + { + origin: { + type: 'stop', + id: '900100015', + name: 'U Klosterstr. (Berlin)', + location: { + type: 'location', + id: '900100015', + latitude: 52.517229, + longitude: 13.412454, + }, + products: { + suburban: false, + subway: true, + tram: false, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + destination: { + type: 'stop', + id: '900100703', + name: 'S+U Alexanderplatz (Berlin) [U2]', + location: { + type: 'location', + id: '900100703', + latitude: 52.522075, + longitude: 13.413596, + }, + products: { + suburban: false, + subway: true, + tram: false, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + t: 20000, + }, + { + origin: { + type: 'stop', + id: '900100015', + name: 'U Klosterstr. (Berlin)', + location: { + type: 'location', + id: '900100015', + latitude: 52.517229, + longitude: 13.412454, + }, + products: { + suburban: false, + subway: true, + tram: false, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + destination: { + type: 'stop', + id: '900100703', + name: 'S+U Alexanderplatz (Berlin) [U2]', + location: { + type: 'location', + id: '900100703', + latitude: 52.522075, + longitude: 13.413596, + }, + products: { + suburban: false, + subway: true, + tram: false, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + t: 30000, + }, + ], + polyline: { + type: 'FeatureCollection', + features: [ + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [ + 13.41351, + 52.52005, + ], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [ + 13.41429, + 52.52035, + ], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [ + 13.41473, + 52.52084, + ], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [ + 13.41453, + 52.52139, + ], + }, + }, + ], + }, + }, + { + direction: 'Hellersdorf, Riesaer Str.', + tripId: '1|29455|8|86|19082019', + line: { + type: 'line', + id: 'm6', + fahrtNr: null, + name: 'M6', + public: true, + mode: 'train', + product: 'tram', + }, + location: { + type: 'location', + latitude: 52.522353, + longitude: 13.415097, + }, + nextStopovers: [ + { + stop: { + type: 'stop', + id: '900100002', + name: 'S Hackescher Markt (Berlin)', + location: { + type: 'location', + id: '900100002', + latitude: 52.522605, + longitude: 13.402359, + }, + products: { + suburban: true, + subway: false, + tram: true, + bus: true, + ferry: false, + express: false, + regional: false, + }, + }, + arrival: null, + plannedArrival: null, + arrivalDelay: null, + arrivalPlatform: null, + plannedArrivalPlatform: null, + arrivalPrognosisType: null, + departure: '2019-08-19T20:25:00+02:00', + plannedDeparture: '2019-08-19T20:25:00+02:00', + departureDelay: null, + departurePlatform: null, + plannedDeparturePlatform: null, + departurePrognosisType: null, + }, + { + stop: { + type: 'stop', + id: '900100005', + name: 'U Alexanderplatz (Berlin) [Tram]', + location: { + type: 'location', + id: '900100005', + latitude: 52.522389, + longitude: 13.414495, + }, + products: { + suburban: false, + subway: false, + tram: true, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + arrival: '2019-08-19T20:33:00+02:00', + plannedArrival: '2019-08-19T20:30:00+02:00', + arrivalDelay: 180, + arrivalPlatform: null, + plannedArrivalPlatform: null, + arrivalPrognosisType: null, + departure: '2019-08-19T20:33:00+02:00', + plannedDeparture: '2019-08-19T20:30:00+02:00', + departureDelay: 180, + departurePlatform: null, + plannedDeparturePlatform: null, + departurePrognosisType: null, + }, + { + stop: { + type: 'stop', + id: '900100040', + name: 'Mollstr./Otto-Braun-Str. (Berlin)', + location: { + type: 'location', + id: '900100040', + latitude: 52.525185, + longitude: 13.419942, + }, + products: { + suburban: false, + subway: false, + tram: true, + bus: true, + ferry: false, + express: false, + regional: false, + }, + }, + arrival: '2019-08-19T20:36:00+02:00', + plannedArrival: '2019-08-19T20:33:00+02:00', + arrivalDelay: 180, + arrivalPlatform: null, + plannedArrivalPlatform: null, + arrivalPrognosisType: null, + departure: '2019-08-19T20:36:00+02:00', + plannedDeparture: '2019-08-19T20:33:00+02:00', + departureDelay: 180, + departurePlatform: null, + plannedDeparturePlatform: null, + departurePrognosisType: null, + }, + { + stop: { + type: 'stop', + id: '900175013', + name: 'Riesaer Str. (Berlin)', + location: { + type: 'location', + id: '900175013', + latitude: 52.529401, + longitude: 13.624186, + }, + products: { + suburban: false, + subway: false, + tram: true, + bus: true, + ferry: false, + express: false, + regional: false, + }, + }, + arrival: '2019-08-19T21:22:00+02:00', + plannedArrival: '2019-08-19T21:19:00+02:00', + arrivalDelay: 180, + arrivalPlatform: null, + plannedArrivalPlatform: null, + arrivalPrognosisType: null, + departure: null, + plannedDeparture: null, + departureDelay: null, + departurePlatform: null, + plannedDeparturePlatform: null, + departurePrognosisType: null, + }, + ], + frames: [ + { + origin: { + type: 'stop', + id: '900100005', + name: 'U Alexanderplatz (Berlin) [Tram]', + location: { + type: 'location', + id: '900100005', + latitude: 52.522389, + longitude: 13.414495, + }, + products: { + suburban: false, + subway: false, + tram: true, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + destination: { + type: 'stop', + id: '900100040', + name: 'Mollstr./Otto-Braun-Str. (Berlin)', + location: { + type: 'location', + id: '900100040', + latitude: 52.525185, + longitude: 13.419942, + }, + products: { + suburban: false, + subway: false, + tram: true, + bus: true, + ferry: false, + express: false, + regional: false, + }, + }, + t: 0, + }, + { + origin: { + type: 'stop', + id: '900100005', + name: 'U Alexanderplatz (Berlin) [Tram]', + location: { + type: 'location', + id: '900100005', + latitude: 52.522389, + longitude: 13.414495, + }, + products: { + suburban: false, + subway: false, + tram: true, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + destination: { + type: 'stop', + id: '900100040', + name: 'Mollstr./Otto-Braun-Str. (Berlin)', + location: { + type: 'location', + id: '900100040', + latitude: 52.525185, + longitude: 13.419942, + }, + products: { + suburban: false, + subway: false, + tram: true, + bus: true, + ferry: false, + express: false, + regional: false, + }, + }, + t: 10000, + }, + { + origin: { + type: 'stop', + id: '900100005', + name: 'U Alexanderplatz (Berlin) [Tram]', + location: { + type: 'location', + id: '900100005', + latitude: 52.522389, + longitude: 13.414495, + }, + products: { + suburban: false, + subway: false, + tram: true, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + destination: { + type: 'stop', + id: '900100040', + name: 'Mollstr./Otto-Braun-Str. (Berlin)', + location: { + type: 'location', + id: '900100040', + latitude: 52.525185, + longitude: 13.419942, + }, + products: { + suburban: false, + subway: false, + tram: true, + bus: true, + ferry: false, + express: false, + regional: false, + }, + }, + t: 20000, + }, + { + origin: { + type: 'stop', + id: '900100005', + name: 'U Alexanderplatz (Berlin) [Tram]', + location: { + type: 'location', + id: '900100005', + latitude: 52.522389, + longitude: 13.414495, + }, + products: { + suburban: false, + subway: false, + tram: true, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + destination: { + type: 'stop', + id: '900100040', + name: 'Mollstr./Otto-Braun-Str. (Berlin)', + location: { + type: 'location', + id: '900100040', + latitude: 52.525185, + longitude: 13.419942, + }, + products: { + suburban: false, + subway: false, + tram: true, + bus: true, + ferry: false, + express: false, + regional: false, + }, + }, + t: 30000, + }, + ], + polyline: { + type: 'FeatureCollection', + features: [ + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [ + 13.4151, + 52.52236, + ], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [ + 13.41513, + 52.52238, + ], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [ + 13.41541, + 52.52263, + ], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [ + 13.41569, + 52.52286, + ], + }, + }, + ], + }, + }, + { + direction: 'S Hackescher Markt', + tripId: '1|29362|4|86|19082019', + line: { + type: 'line', + id: 'm6', + fahrtNr: null, + name: 'M6', + public: true, + mode: 'train', + product: 'tram', + }, + location: { + type: 'location', + latitude: 52.521283, + longitude: 13.411034, + }, + nextStopovers: [ + { + stop: { + type: 'stop', + id: '900175013', + name: 'Riesaer Str. (Berlin)', + location: { + type: 'location', + id: '900175013', + latitude: 52.529401, + longitude: 13.624186, + }, + products: { + suburban: false, + subway: false, + tram: true, + bus: true, + ferry: false, + express: false, + regional: false, + }, + }, + arrival: null, + plannedArrival: null, + arrivalDelay: null, + arrivalPlatform: null, + plannedArrivalPlatform: null, + arrivalPrognosisType: null, + departure: '2019-08-19T19:39:00+02:00', + plannedDeparture: '2019-08-19T19:39:00+02:00', + departureDelay: 0, + departurePlatform: null, + plannedDeparturePlatform: null, + departurePrognosisType: null, + }, + { + stop: { + type: 'stop', + id: '900100026', + name: 'S+U Alexanderplatz Bhf/Gontardstr. (Berlin)', + location: { + type: 'location', + id: '900100026', + latitude: 52.521059, + longitude: 13.41125, + }, + products: { + suburban: false, + subway: false, + tram: true, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + arrival: '2019-08-19T20:33:00+02:00', + plannedArrival: '2019-08-19T20:30:00+02:00', + arrivalDelay: 180, + arrivalPlatform: null, + plannedArrivalPlatform: null, + arrivalPrognosisType: null, + departure: '2019-08-19T20:33:00+02:00', + plannedDeparture: '2019-08-19T20:30:00+02:00', + departureDelay: 180, + departurePlatform: null, + plannedDeparturePlatform: null, + departurePrognosisType: null, + }, + { + stop: { + type: 'stop', + id: '900100515', + name: 'Spandauer Str./Marienkirche (Berlin)', + location: { + type: 'location', + id: '900100515', + latitude: 52.520025, + longitude: 13.404822, + }, + products: { + suburban: false, + subway: false, + tram: true, + bus: true, + ferry: false, + express: false, + regional: false, + }, + }, + arrival: '2019-08-19T20:35:00+02:00', + plannedArrival: '2019-08-19T20:32:00+02:00', + arrivalDelay: 180, + arrivalPlatform: null, + plannedArrivalPlatform: null, + arrivalPrognosisType: null, + departure: '2019-08-19T20:35:00+02:00', + plannedDeparture: '2019-08-19T20:32:00+02:00', + departureDelay: 180, + departurePlatform: null, + plannedDeparturePlatform: null, + departurePrognosisType: null, + }, + { + stop: { + type: 'stop', + id: '900100002', + name: 'S Hackescher Markt (Berlin)', + location: { + type: 'location', + id: '900100002', + latitude: 52.522605, + longitude: 13.402359, + }, + products: { + suburban: true, + subway: false, + tram: true, + bus: true, + ferry: false, + express: false, + regional: false, + }, + }, + arrival: '2019-08-19T20:36:00+02:00', + plannedArrival: '2019-08-19T20:33:00+02:00', + arrivalDelay: 180, + arrivalPlatform: null, + plannedArrivalPlatform: null, + arrivalPrognosisType: null, + departure: null, + plannedDeparture: null, + departureDelay: null, + departurePlatform: null, + plannedDeparturePlatform: null, + departurePrognosisType: null, + }, + ], + frames: [ + { + origin: { + type: 'stop', + id: '900100026', + name: 'S+U Alexanderplatz Bhf/Gontardstr. (Berlin)', + location: { + type: 'location', + id: '900100026', + latitude: 52.521059, + longitude: 13.41125, + }, + products: { + suburban: false, + subway: false, + tram: true, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + destination: { + type: 'stop', + id: '900100515', + name: 'Spandauer Str./Marienkirche (Berlin)', + location: { + type: 'location', + id: '900100515', + latitude: 52.520025, + longitude: 13.404822, + }, + products: { + suburban: false, + subway: false, + tram: true, + bus: true, + ferry: false, + express: false, + regional: false, + }, + }, + t: 0, + }, + { + origin: { + type: 'stop', + id: '900100026', + name: 'S+U Alexanderplatz Bhf/Gontardstr. (Berlin)', + location: { + type: 'location', + id: '900100026', + latitude: 52.521059, + longitude: 13.41125, + }, + products: { + suburban: false, + subway: false, + tram: true, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + destination: { + type: 'stop', + id: '900100515', + name: 'Spandauer Str./Marienkirche (Berlin)', + location: { + type: 'location', + id: '900100515', + latitude: 52.520025, + longitude: 13.404822, + }, + products: { + suburban: false, + subway: false, + tram: true, + bus: true, + ferry: false, + express: false, + regional: false, + }, + }, + t: 10000, + }, + { + origin: { + type: 'stop', + id: '900100026', + name: 'S+U Alexanderplatz Bhf/Gontardstr. (Berlin)', + location: { + type: 'location', + id: '900100026', + latitude: 52.521059, + longitude: 13.41125, + }, + products: { + suburban: false, + subway: false, + tram: true, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + destination: { + type: 'stop', + id: '900100515', + name: 'Spandauer Str./Marienkirche (Berlin)', + location: { + type: 'location', + id: '900100515', + latitude: 52.520025, + longitude: 13.404822, + }, + products: { + suburban: false, + subway: false, + tram: true, + bus: true, + ferry: false, + express: false, + regional: false, + }, + }, + t: 20000, + }, + { + origin: { + type: 'stop', + id: '900100026', + name: 'S+U Alexanderplatz Bhf/Gontardstr. (Berlin)', + location: { + type: 'location', + id: '900100026', + latitude: 52.521059, + longitude: 13.41125, + }, + products: { + suburban: false, + subway: false, + tram: true, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + destination: { + type: 'stop', + id: '900100515', + name: 'Spandauer Str./Marienkirche (Berlin)', + location: { + type: 'location', + id: '900100515', + latitude: 52.520025, + longitude: 13.404822, + }, + products: { + suburban: false, + subway: false, + tram: true, + bus: true, + ferry: false, + express: false, + regional: false, + }, + }, + t: 30000, + }, + ], + polyline: { + type: 'FeatureCollection', + features: [ + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [ + 13.41103, + 52.52129, + ], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [ + 13.41057, + 52.52157, + ], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [ + 13.41001, + 52.52191, + ], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [ + 13.40943, + 52.52221, + ], + }, + }, + ], + }, + }, + { + direction: 'S+U Hauptbahnhof', + tripId: '1|29174|2|86|19082019', + line: { + type: 'line', + id: 'm5', + fahrtNr: null, + name: 'M5', + public: true, + mode: 'train', + product: 'tram', + }, + location: { + type: 'location', + latitude: 52.52389, + longitude: 13.416814, + }, + nextStopovers: [ + { + stop: { + type: 'stop', + id: '900151003', + name: 'Zingster Str. (Berlin)', + location: { + type: 'location', + id: '900151003', + latitude: 52.57236, + longitude: 13.495164, + }, + products: { + suburban: false, + subway: false, + tram: true, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + arrival: null, + plannedArrival: null, + arrivalDelay: null, + arrivalPlatform: null, + plannedArrivalPlatform: null, + arrivalPrognosisType: null, + departure: '2019-08-19T19:59:00+02:00', + plannedDeparture: '2019-08-19T19:59:00+02:00', + departureDelay: 0, + departurePlatform: null, + plannedDeparturePlatform: null, + departurePrognosisType: null, + }, + { + stop: { + type: 'stop', + id: '900100040', + name: 'Mollstr./Otto-Braun-Str. (Berlin)', + location: { + type: 'location', + id: '900100040', + latitude: 52.525185, + longitude: 13.419942, + }, + products: { + suburban: false, + subway: false, + tram: true, + bus: true, + ferry: false, + express: false, + regional: false, + }, + }, + arrival: '2019-08-19T20:32:00+02:00', + plannedArrival: '2019-08-19T20:30:00+02:00', + arrivalDelay: 120, + arrivalPlatform: null, + plannedArrivalPlatform: null, + arrivalPrognosisType: null, + departure: '2019-08-19T20:32:00+02:00', + plannedDeparture: '2019-08-19T20:30:00+02:00', + departureDelay: 120, + departurePlatform: null, + plannedDeparturePlatform: null, + departurePrognosisType: null, + }, + { + stop: { + type: 'stop', + id: '900100005', + name: 'U Alexanderplatz (Berlin) [Tram]', + location: { + type: 'location', + id: '900100005', + latitude: 52.522389, + longitude: 13.414495, + }, + products: { + suburban: false, + subway: false, + tram: true, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + arrival: '2019-08-19T20:34:00+02:00', + plannedArrival: '2019-08-19T20:33:00+02:00', + arrivalDelay: 60, + arrivalPlatform: null, + plannedArrivalPlatform: null, + arrivalPrognosisType: null, + departure: '2019-08-19T20:34:00+02:00', + plannedDeparture: '2019-08-19T20:33:00+02:00', + departureDelay: 60, + departurePlatform: null, + plannedDeparturePlatform: null, + departurePrognosisType: null, + }, + { + stop: { + type: 'stop', + id: '900003259', + name: 'Lüneburger Str. (Berlin)', + location: { + type: 'location', + id: '900003259', + latitude: 52.523315, + longitude: 13.36207, + }, + products: { + suburban: false, + subway: false, + tram: true, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + arrival: '2019-08-19T20:55:00+02:00', + plannedArrival: '2019-08-19T20:54:00+02:00', + arrivalDelay: 60, + arrivalPlatform: null, + plannedArrivalPlatform: null, + arrivalPrognosisType: null, + departure: null, + plannedDeparture: null, + departureDelay: null, + departurePlatform: null, + plannedDeparturePlatform: null, + departurePrognosisType: null, + }, + ], + frames: [ + { + origin: { + type: 'stop', + id: '900100040', + name: 'Mollstr./Otto-Braun-Str. (Berlin)', + location: { + type: 'location', + id: '900100040', + latitude: 52.525185, + longitude: 13.419942, + }, + products: { + suburban: false, + subway: false, + tram: true, + bus: true, + ferry: false, + express: false, + regional: false, + }, + }, + destination: { + type: 'stop', + id: '900100005', + name: 'U Alexanderplatz (Berlin) [Tram]', + location: { + type: 'location', + id: '900100005', + latitude: 52.522389, + longitude: 13.414495, + }, + products: { + suburban: false, + subway: false, + tram: true, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + t: 0, + }, + { + origin: { + type: 'stop', + id: '900100040', + name: 'Mollstr./Otto-Braun-Str. (Berlin)', + location: { + type: 'location', + id: '900100040', + latitude: 52.525185, + longitude: 13.419942, + }, + products: { + suburban: false, + subway: false, + tram: true, + bus: true, + ferry: false, + express: false, + regional: false, + }, + }, + destination: { + type: 'stop', + id: '900100005', + name: 'U Alexanderplatz (Berlin) [Tram]', + location: { + type: 'location', + id: '900100005', + latitude: 52.522389, + longitude: 13.414495, + }, + products: { + suburban: false, + subway: false, + tram: true, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + t: 10000, + }, + { + origin: { + type: 'stop', + id: '900100040', + name: 'Mollstr./Otto-Braun-Str. (Berlin)', + location: { + type: 'location', + id: '900100040', + latitude: 52.525185, + longitude: 13.419942, + }, + products: { + suburban: false, + subway: false, + tram: true, + bus: true, + ferry: false, + express: false, + regional: false, + }, + }, + destination: { + type: 'stop', + id: '900100005', + name: 'U Alexanderplatz (Berlin) [Tram]', + location: { + type: 'location', + id: '900100005', + latitude: 52.522389, + longitude: 13.414495, + }, + products: { + suburban: false, + subway: false, + tram: true, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + t: 20000, + }, + { + origin: { + type: 'stop', + id: '900100040', + name: 'Mollstr./Otto-Braun-Str. (Berlin)', + location: { + type: 'location', + id: '900100040', + latitude: 52.525185, + longitude: 13.419942, + }, + products: { + suburban: false, + subway: false, + tram: true, + bus: true, + ferry: false, + express: false, + regional: false, + }, + }, + destination: { + type: 'stop', + id: '900100005', + name: 'U Alexanderplatz (Berlin) [Tram]', + location: { + type: 'location', + id: '900100005', + latitude: 52.522389, + longitude: 13.414495, + }, + products: { + suburban: false, + subway: false, + tram: true, + bus: false, + ferry: false, + express: false, + regional: false, + }, + }, + t: 30000, + }, + ], + polyline: { + type: 'FeatureCollection', + features: [ + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [ + 13.41681, + 52.52389, + ], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [ + 13.41628, + 52.52345, + ], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [ + 13.41574, + 52.52301, + ], + }, + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Point', + coordinates: [ + 13.41521, + 52.52257, + ], + }, + }, + ], + }, + }, +]; + +export { + bvgRadar, +}; +const journeys : Journeys = +{"earlierRef":null,"laterRef":"3|OF|MT#14#97751#97751#97828#97828#0#0#325#97688#6#0#1050#0#0#-2147483648#1#2|PDH#56652a7d97d230d344e9fe574e96e9bb|RD#13022024|RT#163630|US#0|RS#INIT","journeys":[{"type":"journey","legs":[{"origin":{"type":"stop","id":"8000149","name":"Hamm(Westf)Hbf","location":{"type":"location","id":"8000149","latitude":51.678131,"longitude":7.80777},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":false,"taxi":false}},"destination":{"type":"stop","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},"departure":"2024-02-13T17:19:00+01:00","plannedDeparture":"2024-02-13T17:11:00+01:00","departureDelay":480,"arrival":"2024-02-13T18:34:00+01:00","plannedArrival":"2024-02-13T18:28:00+01:00","arrivalDelay":360,"reachable":true,"tripId":"1|201802|0|80|13022024","line":{"type":"line","id":"ice-943","fahrtNr":"943","name":"ICE 943","public":true,"adminCode":"80____","productName":"ICE","mode":"train","product":"nationalExpress","operator":{"type":"operator","id":"db-fernverkehr-ag","name":"DB Fernverkehr AG"}},"direction":"Berlin Ostbahnhof","currentLocation":{"type":"location","latitude":51.497817,"longitude":7.366462},"arrivalPlatform":"9","plannedArrivalPlatform":"9","arrivalPrognosisType":"prognosed","departurePlatform":"5","plannedDeparturePlatform":"5","departurePrognosisType":"prognosed","stopovers":[{"stop":{"type":"stop","id":"8000149","name":"Hamm(Westf)Hbf","location":{"type":"location","id":"8000149","latitude":51.678131,"longitude":7.80777},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":false,"taxi":false}},"arrival":null,"plannedArrival":null,"arrivalDelay":null,"arrivalPlatform":null,"arrivalPrognosisType":null,"plannedArrivalPlatform":null,"departure":"2024-02-13T17:19:00+01:00","plannedDeparture":"2024-02-13T17:11:00+01:00","departureDelay":480,"departurePlatform":"5","departurePrognosisType":"prognosed","plannedDeparturePlatform":"5","remarks":[{"type":"status","code":null,"text":"Delay of previous train"}]},{"stop":{"type":"stop","id":"8000036","name":"Bielefeld Hbf","location":{"type":"location","id":"8000036","latitude":52.029421,"longitude":8.532777},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},"arrival":"2024-02-13T17:44:00+01:00","plannedArrival":"2024-02-13T17:36:00+01:00","arrivalDelay":480,"arrivalPlatform":"2","arrivalPrognosisType":"prognosed","plannedArrivalPlatform":"2","departure":"2024-02-13T17:46:00+01:00","plannedDeparture":"2024-02-13T17:38:00+01:00","departureDelay":480,"departurePlatform":"2","departurePrognosisType":"prognosed","plannedDeparturePlatform":"2"},{"stop":{"type":"stop","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},"arrival":"2024-02-13T18:34:00+01:00","plannedArrival":"2024-02-13T18:28:00+01:00","arrivalDelay":360,"arrivalPlatform":"9","arrivalPrognosisType":"prognosed","plannedArrivalPlatform":"9","departure":null,"plannedDeparture":null,"departureDelay":null,"departurePlatform":null,"departurePrognosisType":null,"plannedDeparturePlatform":null}],"remarks":[{"text":"Komfort Check-in possible (visit bahn.de/kci for more information)","type":"hint","code":"komfort-checkin","summary":"Komfort-Checkin available"},{"text":"Bicycles conveyed - subject to reservation","type":"hint","code":"bicycle-conveyance-reservation","summary":"bicycles conveyed, subject to reservation"},{"text":"Number of bicycles conveyed limited","type":"hint","code":"bicycle-conveyance","summary":"bicycles conveyed"},{"text":"Bordrestaurant","type":"hint","code":"on-board-restaurant","summary":"Bordrestaurant available"},{"text":"vehicle-mounted access aid","type":"hint","code":"boarding-ramp","summary":"vehicle-mounted boarding ramp available"},{"type":"status","summary":"ICE 943: Hamm(Westf)Hbf->Hannover Hbf: Information.","code":null,"text":"No WC for mobility impaired passengers in coach 27. If a change in booking is required for travellers with reduced mobility, our Mobility Service Centre can be reached at +49 30 65212888."},{"type":"status","summary":"ICE 953: Hamm(Westf)Hbf->Hannover Hbf: Information.","code":null,"text":"Train has no facilities for wheelchair users, train has no WC for disabled passengers. If a change in booking is required for travellers with reduced mobility, our Mobility Service Centre can be reached at +49 30 65212888."},{"type":"status","summary":"ICE 953: Hamm(Westf)Hbf->Hannover Hbf: Information.","code":null,"text":"No WC for mobility impaired passengers in coach 27. If a change in booking is required for travellers with reduced mobility, our Mobility Service Centre can be reached at +49 30 65212888."}],"loadFactor":"high"}],"refreshToken":"T$A=1@O=Hamm(Westf)Hbf@L=8000149@a=128@$A=1@O=Hannover Hbf@L=8000152@a=128@$202402131711$202402131828$ICE 943$$1$$$$$$","remarks":[],"price":{"amount":39.9,"currency":"EUR","hint":null}},{"type":"journey","legs":[{"origin":{"type":"stop","id":"8000149","name":"Hamm(Westf)Hbf","location":{"type":"location","id":"8000149","latitude":51.678131,"longitude":7.80777},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":false,"taxi":false}},"destination":{"type":"stop","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},"departure":"2024-02-13T18:09:00+01:00","plannedDeparture":"2024-02-13T18:07:00+01:00","departureDelay":120,"arrival":"2024-02-13T19:28:00+01:00","plannedArrival":"2024-02-13T19:28:00+01:00","arrivalDelay":0,"reachable":true,"tripId":"1|200529|0|80|13022024","line":{"type":"line","id":"ice-643","fahrtNr":"643","name":"ICE 643","public":true,"adminCode":"80____","productName":"ICE","mode":"train","product":"nationalExpress","operator":{"type":"operator","id":"db-fernverkehr-ag","name":"DB Fernverkehr AG"}},"direction":"Berlin Ostbahnhof","arrivalPlatform":"9","plannedArrivalPlatform":"9","arrivalPrognosisType":"prognosed","departurePlatform":"9","plannedDeparturePlatform":"9","departurePrognosisType":"prognosed","stopovers":[{"stop":{"type":"stop","id":"8000149","name":"Hamm(Westf)Hbf","location":{"type":"location","id":"8000149","latitude":51.678131,"longitude":7.80777},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":false,"taxi":false}},"arrival":null,"plannedArrival":null,"arrivalDelay":null,"arrivalPlatform":null,"arrivalPrognosisType":null,"plannedArrivalPlatform":null,"departure":"2024-02-13T18:09:00+01:00","plannedDeparture":"2024-02-13T18:07:00+01:00","departureDelay":120,"departurePlatform":"9","departurePrognosisType":"prognosed","plannedDeparturePlatform":"9"},{"stop":{"type":"stop","id":"8000036","name":"Bielefeld Hbf","location":{"type":"location","id":"8000036","latitude":52.029421,"longitude":8.532777},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},"arrival":"2024-02-13T18:36:00+01:00","plannedArrival":"2024-02-13T18:34:00+01:00","arrivalDelay":120,"arrivalPlatform":"2","arrivalPrognosisType":"prognosed","plannedArrivalPlatform":"2","departure":"2024-02-13T18:38:00+01:00","plannedDeparture":"2024-02-13T18:36:00+01:00","departureDelay":120,"departurePlatform":"2","departurePrognosisType":"prognosed","plannedDeparturePlatform":"2"},{"stop":{"type":"stop","id":"8000252","name":"Minden(Westf)","location":{"type":"location","id":"8000252","latitude":52.290566,"longitude":8.934442},"products":{"nationalExpress":true,"national":true,"regionalExpress":false,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":false,"taxi":true}},"arrival":"2024-02-13T18:58:00+01:00","plannedArrival":"2024-02-13T18:58:00+01:00","arrivalDelay":0,"arrivalPlatform":"13","arrivalPrognosisType":"prognosed","plannedArrivalPlatform":"13","departure":"2024-02-13T19:00:00+01:00","plannedDeparture":"2024-02-13T19:00:00+01:00","departureDelay":0,"departurePlatform":"13","departurePrognosisType":"prognosed","plannedDeparturePlatform":"13"},{"stop":{"type":"stop","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},"arrival":"2024-02-13T19:28:00+01:00","plannedArrival":"2024-02-13T19:28:00+01:00","arrivalDelay":0,"arrivalPlatform":"9","arrivalPrognosisType":"prognosed","plannedArrivalPlatform":"9","departure":null,"plannedDeparture":null,"departureDelay":null,"departurePlatform":null,"departurePrognosisType":null,"plannedDeparturePlatform":null}],"remarks":[{"text":"Komfort Check-in possible (visit bahn.de/kci for more information)","type":"hint","code":"komfort-checkin","summary":"Komfort-Checkin available"},{"text":"Bordrestaurant","type":"hint","code":"on-board-restaurant","summary":"Bordrestaurant available"}],"loadFactor":"low-to-medium"}],"refreshToken":"T$A=1@O=Hamm(Westf)Hbf@L=8000149@a=128@$A=1@O=Hannover Hbf@L=8000152@a=128@$202402131807$202402131928$ICE 643$$1$$$$$$","price":{"amount":39.9,"currency":"EUR","hint":null}},{"type":"journey","legs":[{"origin":{"type":"stop","id":"8000149","name":"Hamm(Westf)Hbf","location":{"type":"location","id":"8000149","latitude":51.678131,"longitude":7.80777},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":false,"taxi":false}},"destination":{"type":"stop","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},"departure":"2024-02-13T18:45:00+01:00","plannedDeparture":"2024-02-13T18:45:00+01:00","departureDelay":null,"arrival":"2024-02-13T20:18:00+01:00","plannedArrival":"2024-02-13T20:18:00+01:00","arrivalDelay":null,"reachable":true,"tripId":"1|198001|0|80|13022024","line":{"type":"line","id":"ic-2043","fahrtNr":"2043","name":"IC 2043","public":true,"adminCode":"80____","productName":"IC","mode":"train","product":"national","operator":{"type":"operator","id":"db-fernverkehr-ag","name":"DB Fernverkehr AG"}},"direction":"Hannover Hbf","arrivalPlatform":"10","plannedArrivalPlatform":"10","arrivalPrognosisType":"prognosed","departurePlatform":"9","plannedDeparturePlatform":"9","departurePrognosisType":null,"stopovers":[{"stop":{"type":"stop","id":"8000149","name":"Hamm(Westf)Hbf","location":{"type":"location","id":"8000149","latitude":51.678131,"longitude":7.80777},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":false,"taxi":false}},"arrival":null,"plannedArrival":null,"arrivalDelay":null,"arrivalPlatform":null,"arrivalPrognosisType":null,"plannedArrivalPlatform":null,"departure":"2024-02-13T18:45:00+01:00","plannedDeparture":"2024-02-13T18:45:00+01:00","departureDelay":null,"departurePlatform":"9","departurePrognosisType":null,"plannedDeparturePlatform":"9"},{"stop":{"type":"stop","id":"8002461","name":"Gütersloh Hbf","location":{"type":"location","id":"8002461","latitude":51.906862,"longitude":8.385129},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":false,"taxi":true}},"arrival":"2024-02-13T19:06:00+01:00","plannedArrival":"2024-02-13T19:06:00+01:00","arrivalDelay":null,"arrivalPlatform":"3","arrivalPrognosisType":null,"plannedArrivalPlatform":"3","departure":"2024-02-13T19:08:00+01:00","plannedDeparture":"2024-02-13T19:08:00+01:00","departureDelay":null,"departurePlatform":"3","departurePrognosisType":null,"plannedDeparturePlatform":"3"},{"stop":{"type":"stop","id":"8000036","name":"Bielefeld Hbf","location":{"type":"location","id":"8000036","latitude":52.029421,"longitude":8.532777},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},"arrival":"2024-02-13T19:18:00+01:00","plannedArrival":"2024-02-13T19:18:00+01:00","arrivalDelay":null,"arrivalPlatform":"2","arrivalPrognosisType":null,"plannedArrivalPlatform":"2","departure":"2024-02-13T19:19:00+01:00","plannedDeparture":"2024-02-13T19:19:00+01:00","departureDelay":null,"departurePlatform":"2","departurePrognosisType":null,"plannedDeparturePlatform":"2"},{"stop":{"type":"stop","id":"8000162","name":"Herford","location":{"type":"location","id":"8000162","latitude":52.119654,"longitude":8.663741},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":false,"taxi":true}},"arrival":"2024-02-13T19:27:00+01:00","plannedArrival":"2024-02-13T19:27:00+01:00","arrivalDelay":null,"arrivalPlatform":"4","arrivalPrognosisType":null,"plannedArrivalPlatform":"4","departure":"2024-02-13T19:28:00+01:00","plannedDeparture":"2024-02-13T19:28:00+01:00","departureDelay":null,"departurePlatform":"4","departurePrognosisType":null,"plannedDeparturePlatform":"4"},{"stop":{"type":"stop","id":"8000732","name":"Bad Oeynhausen","location":{"type":"location","id":"8000732","latitude":52.205447,"longitude":8.796439},"products":{"nationalExpress":true,"national":true,"regionalExpress":false,"regional":true,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":false,"taxi":true}},"arrival":"2024-02-13T19:37:00+01:00","plannedArrival":"2024-02-13T19:37:00+01:00","arrivalDelay":null,"arrivalPlatform":"1","arrivalPrognosisType":null,"plannedArrivalPlatform":"1","departure":"2024-02-13T19:38:00+01:00","plannedDeparture":"2024-02-13T19:38:00+01:00","departureDelay":null,"departurePlatform":"1","departurePrognosisType":null,"plannedDeparturePlatform":"1"},{"stop":{"type":"stop","id":"8000252","name":"Minden(Westf)","location":{"type":"location","id":"8000252","latitude":52.290566,"longitude":8.934442},"products":{"nationalExpress":true,"national":true,"regionalExpress":false,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":false,"taxi":true}},"arrival":"2024-02-13T19:47:00+01:00","plannedArrival":"2024-02-13T19:47:00+01:00","arrivalDelay":null,"arrivalPlatform":"13","arrivalPrognosisType":null,"plannedArrivalPlatform":"13","departure":"2024-02-13T19:48:00+01:00","plannedDeparture":"2024-02-13T19:48:00+01:00","departureDelay":null,"departurePlatform":"13","departurePrognosisType":null,"plannedDeparturePlatform":"13"},{"stop":{"type":"stop","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},"arrival":"2024-02-13T20:18:00+01:00","plannedArrival":"2024-02-13T20:18:00+01:00","arrivalDelay":null,"arrivalPlatform":"10","arrivalPrognosisType":"prognosed","plannedArrivalPlatform":"10","departure":null,"plannedDeparture":null,"departureDelay":null,"departurePlatform":null,"departurePrognosisType":null,"plannedDeparturePlatform":null}],"remarks":[{"text":"Komfort Check-in possible (visit bahn.de/kci for more information)","type":"hint","code":"komfort-checkin","summary":"Komfort-Checkin available"},{"text":"Bicycles conveyed - subject to reservation","type":"hint","code":"bicycle-conveyance-reservation","summary":"bicycles conveyed, subject to reservation"},{"text":"Number of bicycles conveyed limited","type":"hint","code":"bicycle-conveyance","summary":"bicycles conveyed"},{"text":"Food and beverages served at seat","type":"hint","code":"snacks","summary":"snacks available for purchase at the seat"},{"text":"vehicle-mounted access aid","type":"hint","code":"boarding-ramp","summary":"vehicle-mounted boarding ramp available"}],"loadFactor":"low-to-medium"}],"refreshToken":"T$A=1@O=Hamm(Westf)Hbf@L=8000149@a=128@$A=1@O=Hannover Hbf@L=8000152@a=128@$202402131845$202402132018$IC 2043$$1$$$$$$","price":{"amount":33.9,"currency":"EUR","hint":null}},{"type":"journey","legs":[{"origin":{"type":"stop","id":"8000149","name":"Hamm(Westf)Hbf","location":{"type":"location","id":"8000149","latitude":51.678131,"longitude":7.80777},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":false,"taxi":false}},"destination":{"type":"stop","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},"departure":"2024-02-13T19:11:00+01:00","plannedDeparture":"2024-02-13T19:11:00+01:00","departureDelay":null,"arrival":"2024-02-13T20:28:00+01:00","plannedArrival":"2024-02-13T20:28:00+01:00","arrivalDelay":null,"reachable":true,"tripId":"1|201901|0|80|13022024","line":{"type":"line","id":"ice-955","fahrtNr":"955","name":"ICE 955","public":true,"adminCode":"80____","productName":"ICE","mode":"train","product":"nationalExpress","operator":{"type":"operator","id":"db-fernverkehr-ag","name":"DB Fernverkehr AG"}},"direction":"Berlin Ostbahnhof","arrivalPlatform":"9","plannedArrivalPlatform":"9","arrivalPrognosisType":null,"departurePlatform":"5","plannedDeparturePlatform":"5","departurePrognosisType":null,"stopovers":[{"stop":{"type":"stop","id":"8000149","name":"Hamm(Westf)Hbf","location":{"type":"location","id":"8000149","latitude":51.678131,"longitude":7.80777},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":false,"taxi":false}},"arrival":null,"plannedArrival":null,"arrivalDelay":null,"arrivalPlatform":null,"arrivalPrognosisType":null,"plannedArrivalPlatform":null,"departure":"2024-02-13T19:11:00+01:00","plannedDeparture":"2024-02-13T19:11:00+01:00","departureDelay":null,"departurePlatform":"5","departurePrognosisType":null,"plannedDeparturePlatform":"5"},{"stop":{"type":"stop","id":"8000036","name":"Bielefeld Hbf","location":{"type":"location","id":"8000036","latitude":52.029421,"longitude":8.532777},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},"arrival":"2024-02-13T19:36:00+01:00","plannedArrival":"2024-02-13T19:36:00+01:00","arrivalDelay":null,"arrivalPlatform":"2","arrivalPrognosisType":null,"plannedArrivalPlatform":"2","departure":"2024-02-13T19:38:00+01:00","plannedDeparture":"2024-02-13T19:38:00+01:00","departureDelay":null,"departurePlatform":"2","departurePrognosisType":null,"plannedDeparturePlatform":"2"},{"stop":{"type":"stop","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},"arrival":"2024-02-13T20:28:00+01:00","plannedArrival":"2024-02-13T20:28:00+01:00","arrivalDelay":null,"arrivalPlatform":"9","arrivalPrognosisType":null,"plannedArrivalPlatform":"9","departure":null,"plannedDeparture":null,"departureDelay":null,"departurePlatform":null,"departurePrognosisType":null,"plannedDeparturePlatform":null}],"remarks":[{"text":"Komfort Check-in possible (visit bahn.de/kci for more information)","type":"hint","code":"komfort-checkin","summary":"Komfort-Checkin available"},{"text":"Bordrestaurant","type":"hint","code":"on-board-restaurant","summary":"Bordrestaurant available"}],"loadFactor":"exceptionally-high"}],"refreshToken":"T$A=1@O=Hamm(Westf)Hbf@L=8000149@a=128@$A=1@O=Hannover Hbf@L=8000152@a=128@$202402131911$202402132028$ICE 955$$1$$$$$$","price":null},{"type":"journey","legs":[{"origin":{"type":"stop","id":"8000149","name":"Hamm(Westf)Hbf","location":{"type":"location","id":"8000149","latitude":51.678131,"longitude":7.80777},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":false,"taxi":false}},"destination":{"type":"stop","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},"departure":"2024-02-13T20:07:00+01:00","plannedDeparture":"2024-02-13T20:07:00+01:00","departureDelay":null,"arrival":"2024-02-13T21:28:00+01:00","plannedArrival":"2024-02-13T21:28:00+01:00","arrivalDelay":null,"reachable":true,"tripId":"1|200540|0|80|13022024","line":{"type":"line","id":"ice-645","fahrtNr":"645","name":"ICE 645","public":true,"adminCode":"80____","productName":"ICE","mode":"train","product":"nationalExpress","operator":{"type":"operator","id":"db-fernverkehr-ag","name":"DB Fernverkehr AG"}},"direction":"Berlin Ostbahnhof","arrivalPlatform":"9","plannedArrivalPlatform":"9","arrivalPrognosisType":null,"departurePlatform":"9","plannedDeparturePlatform":"9","departurePrognosisType":null,"stopovers":[{"stop":{"type":"stop","id":"8000149","name":"Hamm(Westf)Hbf","location":{"type":"location","id":"8000149","latitude":51.678131,"longitude":7.80777},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":false,"taxi":false}},"arrival":null,"plannedArrival":null,"arrivalDelay":null,"arrivalPlatform":null,"arrivalPrognosisType":null,"plannedArrivalPlatform":null,"departure":"2024-02-13T20:07:00+01:00","plannedDeparture":"2024-02-13T20:07:00+01:00","departureDelay":null,"departurePlatform":"9","departurePrognosisType":null,"plannedDeparturePlatform":"9"},{"stop":{"type":"stop","id":"8000036","name":"Bielefeld Hbf","location":{"type":"location","id":"8000036","latitude":52.029421,"longitude":8.532777},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},"arrival":"2024-02-13T20:34:00+01:00","plannedArrival":"2024-02-13T20:34:00+01:00","arrivalDelay":null,"arrivalPlatform":"2","arrivalPrognosisType":null,"plannedArrivalPlatform":"2","departure":"2024-02-13T20:36:00+01:00","plannedDeparture":"2024-02-13T20:36:00+01:00","departureDelay":null,"departurePlatform":"2","departurePrognosisType":null,"plannedDeparturePlatform":"2"},{"stop":{"type":"stop","id":"8000252","name":"Minden(Westf)","location":{"type":"location","id":"8000252","latitude":52.290566,"longitude":8.934442},"products":{"nationalExpress":true,"national":true,"regionalExpress":false,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":false,"taxi":true}},"arrival":"2024-02-13T20:58:00+01:00","plannedArrival":"2024-02-13T20:58:00+01:00","arrivalDelay":null,"arrivalPlatform":"13","arrivalPrognosisType":null,"plannedArrivalPlatform":"13","departure":"2024-02-13T21:00:00+01:00","plannedDeparture":"2024-02-13T21:00:00+01:00","departureDelay":null,"departurePlatform":"13","departurePrognosisType":null,"plannedDeparturePlatform":"13"},{"stop":{"type":"stop","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},"arrival":"2024-02-13T21:28:00+01:00","plannedArrival":"2024-02-13T21:28:00+01:00","arrivalDelay":null,"arrivalPlatform":"9","arrivalPrognosisType":null,"plannedArrivalPlatform":"9","departure":null,"plannedDeparture":null,"departureDelay":null,"departurePlatform":null,"departurePrognosisType":null,"plannedDeparturePlatform":null}],"remarks":[{"text":"Komfort Check-in possible (visit bahn.de/kci for more information)","type":"hint","code":"komfort-checkin","summary":"Komfort-Checkin available"},{"text":"Bicycles conveyed - subject to reservation","type":"hint","code":"bicycle-conveyance-reservation","summary":"bicycles conveyed, subject to reservation"},{"text":"Number of bicycles conveyed limited","type":"hint","code":"bicycle-conveyance","summary":"bicycles conveyed"},{"text":"Bordrestaurant","type":"hint","code":"on-board-restaurant","summary":"Bordrestaurant available"},{"text":"vehicle-mounted access aid","type":"hint","code":"boarding-ramp","summary":"vehicle-mounted boarding ramp available"},{"type":"status","summary":"ICE 645: Hamm(Westf)Hbf->Hannover Hbf: Information.","code":null,"text":"Train has no wheelchair accessible entrance door. If a change in booking is required for travellers with reduced mobility, our Mobility Service Centre can be reached at +49 30 65212888."},{"type":"status","summary":"ICE 645: Hamm(Westf)Hbf->Hannover Hbf: Information.","code":null,"text":"Train has no facilities for wheelchair users, train has no WC for disabled passengers. If a change in booking is required for travellers with reduced mobility, our Mobility Service Centre can be reached at +49 30 65212888."}],"loadFactor":"low-to-medium"}],"refreshToken":"T$A=1@O=Hamm(Westf)Hbf@L=8000149@a=128@$A=1@O=Hannover Hbf@L=8000152@a=128@$202402132007$202402132128$ICE 645$$1$$$$$$","remarks":[],"price":{"amount":33.9,"currency":"EUR","hint":null}},{"type":"journey","legs":[{"origin":{"type":"stop","id":"8000149","name":"Hamm(Westf)Hbf","location":{"type":"location","id":"8000149","latitude":51.678131,"longitude":7.80777},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":false,"taxi":false}},"destination":{"type":"stop","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},"departure":"2024-02-13T21:11:00+01:00","plannedDeparture":"2024-02-13T21:11:00+01:00","departureDelay":null,"arrival":"2024-02-13T22:28:00+01:00","plannedArrival":"2024-02-13T22:28:00+01:00","arrivalDelay":null,"reachable":true,"tripId":"1|201842|0|80|13022024","line":{"type":"line","id":"ice-947","fahrtNr":"947","name":"ICE 947","public":true,"adminCode":"80____","productName":"ICE","mode":"train","product":"nationalExpress","operator":{"type":"operator","id":"db-fernverkehr-ag","name":"DB Fernverkehr AG"}},"direction":"Berlin Ostbahnhof","arrivalPlatform":"9","plannedArrivalPlatform":"9","arrivalPrognosisType":null,"departurePlatform":"5","plannedDeparturePlatform":"5","departurePrognosisType":null,"stopovers":[{"stop":{"type":"stop","id":"8000149","name":"Hamm(Westf)Hbf","location":{"type":"location","id":"8000149","latitude":51.678131,"longitude":7.80777},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":false,"taxi":false}},"arrival":null,"plannedArrival":null,"arrivalDelay":null,"arrivalPlatform":null,"arrivalPrognosisType":null,"plannedArrivalPlatform":null,"departure":"2024-02-13T21:11:00+01:00","plannedDeparture":"2024-02-13T21:11:00+01:00","departureDelay":null,"departurePlatform":"5","departurePrognosisType":null,"plannedDeparturePlatform":"5"},{"stop":{"type":"stop","id":"8000036","name":"Bielefeld Hbf","location":{"type":"location","id":"8000036","latitude":52.029421,"longitude":8.532777},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},"arrival":"2024-02-13T21:36:00+01:00","plannedArrival":"2024-02-13T21:36:00+01:00","arrivalDelay":null,"arrivalPlatform":"2","arrivalPrognosisType":null,"plannedArrivalPlatform":"2","departure":"2024-02-13T21:38:00+01:00","plannedDeparture":"2024-02-13T21:38:00+01:00","departureDelay":null,"departurePlatform":"2","departurePrognosisType":null,"plannedDeparturePlatform":"2"},{"stop":{"type":"stop","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},"arrival":"2024-02-13T22:28:00+01:00","plannedArrival":"2024-02-13T22:28:00+01:00","arrivalDelay":null,"arrivalPlatform":"9","arrivalPrognosisType":null,"plannedArrivalPlatform":"9","departure":null,"plannedDeparture":null,"departureDelay":null,"departurePlatform":null,"departurePrognosisType":null,"plannedDeparturePlatform":null}],"remarks":[{"text":"Komfort Check-in possible (visit bahn.de/kci for more information)","type":"hint","code":"komfort-checkin","summary":"Komfort-Checkin available"},{"text":"Bordrestaurant","type":"hint","code":"on-board-restaurant","summary":"Bordrestaurant available"}],"loadFactor":"high"}],"refreshToken":"T$A=1@O=Hamm(Westf)Hbf@L=8000149@a=128@$A=1@O=Hannover Hbf@L=8000152@a=128@$202402132111$202402132228$ICE 947$$1$$$$$$","price":{"amount":35.9,"currency":"EUR","hint":null}}],"realtimeDataUpdatedAt":1707838756} +const rawResponse : RawResponse = +{"ver":"1.34","ext":"DB.R21.12.a","lang":"eng","id":"376eznii4wu7g2wg","err":"OK","cInfo":{"code":"OK"},"graph":{"id":"standard","index":0},"subGraph":{"id":"global","index":0},"view":{"id":"standard","index":0,"type":"WGS84"},"svcResL":[{"meth":"TripSearch","err":"OK","res":{"common":{"locL":[{"lid":"A=1@O=Hamm(Westf)Hbf@X=7807824@Y=51678077@U=80@L=8000149@","type":"S","name":"Hamm(Westf)Hbf","icoX":0,"extId":"8000149","state":"F","crd":{"x":7807770,"y":51678131,"z":0,"floor":0},"pCls":47,"gidL":["U×008010002"]},{"lid":"A=1@O=Hannover Hbf@X=9741017@Y=52376764@U=80@L=8000152@","type":"S","name":"Hannover Hbf","icoX":0,"extId":"8000152","state":"F","crd":{"x":9741763,"y":52377079,"z":0,"floor":0},"pCls":319,"gidL":["U×008013552"]},{"lid":"A=1@O=Bielefeld Hbf@X=8532723@Y=52029259@U=80@L=8000036@","type":"S","name":"Bielefeld Hbf","icoX":0,"extId":"8000036","state":"F","crd":{"x":8532777,"y":52029421,"z":0,"floor":0},"pCls":303,"gidL":["U×008013597"]},{"lid":"A=1@O=Minden(Westf)@X=8934729@Y=52290135@U=80@L=8000252@","type":"S","name":"Minden(Westf)","icoX":0,"extId":"8000252","state":"F","crd":{"x":8934442,"y":52290566,"z":0,"floor":0},"pCls":571,"gidL":["U×008013578"]},{"lid":"A=1@O=Gütersloh Hbf@X=8385075@Y=51906943@U=80@L=8002461@","type":"S","name":"Gütersloh Hbf","icoX":0,"extId":"8002461","state":"F","crd":{"x":8385129,"y":51906862,"z":0,"floor":0},"pCls":559,"gidL":["U×008013606"]},{"lid":"A=1@O=Herford@X=8663642@Y=52119609@U=80@L=8000162@","type":"S","name":"Herford","icoX":0,"extId":"8000162","state":"F","crd":{"x":8663741,"y":52119654,"z":0,"floor":0},"pCls":559,"gidL":["U×008013593"]},{"lid":"A=1@O=Bad Oeynhausen@X=8796520@Y=52205394@U=80@L=8000732@","type":"S","name":"Bad Oeynhausen","icoX":0,"extId":"8000732","state":"F","crd":{"x":8796439,"y":52205447,"z":0,"floor":0},"pCls":555,"gidL":["U×008013585"]}],"prodL":[{"name":"ICE 943","number":"943","icoX":0,"cls":1,"oprX":0,"prodCtx":{"name":"ICE 943","num":"943","matchId":"10","catOut":"ICE","catOutS":"ICE","catOutL":"Intercity-Express","catIn":"ICE","catCode":"0","admin":"80____"}},{"name":"ICE 953","number":"953","icoX":0,"cls":1,"oprX":0,"prodCtx":{"name":"ICE 953","num":"953","matchId":"10","catOut":"ICE","catOutS":"ICE","catOutL":"Intercity-Express","catIn":"ICE","catCode":"0","admin":"80____"}},{"name":"ICE 643","number":"643","icoX":0,"cls":1,"oprX":0,"prodCtx":{"name":"ICE 643","num":"643","matchId":"10","catOut":"ICE","catOutS":"ICE","catOutL":"Intercity-Express","catIn":"ICE","catCode":"0","admin":"80____"}},{"name":"IC 2043","number":"2043","icoX":8,"cls":2,"oprX":0,"prodCtx":{"name":"IC 2043","num":"2043","matchId":"55","catOut":"IC","catOutS":"IC","catOutL":"Intercity","catIn":"IC","catCode":"1","admin":"80____"}},{"name":"ICE 955","number":"955","icoX":0,"cls":1,"oprX":0,"prodCtx":{"name":"ICE 955","num":"955","matchId":"10","catOut":"ICE","catOutS":"ICE","catOutL":"Intercity-Express","catIn":"ICE","catCode":"0","admin":"80____"}},{"name":"ICE 645","number":"645","icoX":0,"cls":1,"oprX":0,"prodCtx":{"name":"ICE 645","num":"645","matchId":"10","catOut":"ICE","catOutS":"ICE","catOutL":"Intercity-Express","catIn":"ICE","catCode":"0","admin":"80____"}},{"name":"ICE 947","number":"947","icoX":0,"cls":1,"oprX":0,"prodCtx":{"name":"ICE 947","num":"947","matchId":"10","catOut":"ICE","catOutS":"ICE","catOutL":"Intercity-Express","catIn":"ICE","catCode":"0","admin":"80____"}}],"opL":[{"name":"DB Fernverkehr AG","icoX":1}],"remL":[{"type":"D","code":"","icoX":2,"txtN":"Delay of previous train","sIdx":0},{"type":"A","code":"CK","prio":200,"icoX":3,"txtN":"Komfort Check-in possible (visit bahn.de/kci for more information)"},{"type":"A","code":"FR","prio":260,"icoX":4,"txtN":"Bicycles conveyed - subject to reservation"},{"type":"A","code":"FB","prio":260,"icoX":5,"txtN":"Number of bicycles conveyed limited"},{"type":"A","code":"BR","prio":450,"icoX":6,"txtN":"Bordrestaurant"},{"type":"A","code":"EH","prio":560,"icoX":3,"txtN":"vehicle-mounted access aid"},{"type":"M","code":"","icoX":7,"txtS":"ICE 943: Hamm(Westf)Hbf->Hannover Hbf: Information.","txtN":"No WC for mobility impaired passengers in coach 27. If a change in booking is required for travellers with reduced mobility, our Mobility Service Centre can be reached at +49 30 65212888.","sIdx":0},{"type":"M","code":"","icoX":7,"txtS":"ICE 953: Hamm(Westf)Hbf->Hannover Hbf: Information.","txtN":"Train has no facilities for wheelchair users, train has no WC for disabled passengers. If a change in booking is required for travellers with reduced mobility, our Mobility Service Centre can be reached at +49 30 65212888.","sIdx":0},{"type":"M","code":"","icoX":7,"txtS":"ICE 953: Hamm(Westf)Hbf->Hannover Hbf: Information.","txtN":"No WC for mobility impaired passengers in coach 27. If a change in booking is required for travellers with reduced mobility, our Mobility Service Centre can be reached at +49 30 65212888.","sIdx":0},{"type":"C","code":"","icoX":7,"txtN":"Current information available."},{"type":"A","code":"MP","prio":460,"icoX":3,"txtN":"Food and beverages served at seat"},{"type":"M","code":"","icoX":7,"txtS":"ICE 645: Hamm(Westf)Hbf->Hannover Hbf: Information.","txtN":"Train has no wheelchair accessible entrance door. If a change in booking is required for travellers with reduced mobility, our Mobility Service Centre can be reached at +49 30 65212888.","sIdx":0},{"type":"M","code":"","icoX":7,"txtS":"ICE 645: Hamm(Westf)Hbf->Hannover Hbf: Information.","txtN":"Train has no facilities for wheelchair users, train has no WC for disabled passengers. If a change in booking is required for travellers with reduced mobility, our Mobility Service Centre can be reached at +49 30 65212888.","sIdx":0}],"icoL":[{"res":"ICE"},{"res":"D","txt":"DB Fernverkehr AG"},{"res":"Empty"},{"res":"attr_info"},{"res":"attr_bike_r"},{"res":"attr_bike"},{"res":"attr_resto"},{"res":"HimInfo"},{"res":"IC"},{"res":"cl_all"}],"tcocL":[{"c":"FIRST","r":2},{"c":"SECOND","r":2},{"c":"FIRST","r":1},{"c":"SECOND","r":1},{"c":"FIRST","r":4},{"c":"SECOND","r":4}],"dirL":[{"txt":"Berlin Ostbahnhof","flg":"1"},{"txt":"Hannover Hbf","flg":"1"}],"lDrawStyleL":[{"sIcoX":0,"type":"SOLID"},{"type":"SOLID"},{"sIcoX":8,"type":"SOLID"}]},"outConL":[{"cid":"C-0","date":"20240213","dur":"011500","durS":"011700","durR":"011500","chg":0,"sDays":{"sDaysR":"runs daily ","sDaysB":"00000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0"},"dep":{"locX":0,"idx":5,"dProdX":0,"dPltfS":{"type":"PL","txt":"5"},"dTimeS":"171100","dTimeR":"171900","dProgType":"PROGNOSED","dTrnCmpSX":{"tcocX":[0,1]},"dTZOffset":60,"msgL":[{"type":"REM","remX":0,"sty":"I","txtC":{"r":204,"g":0,"b":0},"prio":478,"fIdx":-1,"tIdx":-1,"tagL":["RES_LOC_H3"],"sort":818413568}],"type":"N"},"arr":{"locX":1,"idx":7,"aProdX":0,"aPltfS":{"type":"PL","txt":"9"},"aTimeS":"182800","aTimeR":"183400","aProgType":"PROGNOSED","aTZOffset":60,"type":"N"},"secL":[{"type":"JNY","dep":{"locX":0,"idx":5,"dProdX":0,"dPltfS":{"type":"PL","txt":"5"},"dTimeS":"171100","dTimeR":"171900","dProgType":"PROGNOSED","dTrnCmpSX":{"tcocX":[0,1],"tcM":1},"dTZOffset":60,"msgL":[{"type":"REM","remX":0,"sty":"I","txtC":{"r":204,"g":0,"b":0},"prio":478,"fIdx":-1,"tIdx":-1,"tagL":["RES_LOC_H3"],"sort":818413568}],"type":"N"},"arr":{"locX":1,"idx":7,"aProdX":0,"aPltfS":{"type":"PL","txt":"9"},"aTimeS":"182800","aTimeR":"183400","aProgType":"PROGNOSED","aTrnCmpSX":{"tcM":1},"aTZOffset":60,"type":"N"},"jny":{"jid":"1|201802|0|80|13022024","prodX":0,"dirTxt":"Berlin Ostbahnhof","dirFlg":"1","status":"P","isRchbl":true,"stopL":[{"locX":0,"idx":5,"dProdX":0,"dPltfS":{"type":"PL","txt":"5"},"dTimeS":"171100","dTimeR":"171900","dProgType":"PROGNOSED","dDirTxt":"Berlin Ostbahnhof","dDirFlg":"1","dTrnCmpSX":{"tcocX":[0,1]},"dTZOffset":60,"msgL":[{"type":"REM","remX":0,"sty":"I","txtC":{"r":204,"g":0,"b":0},"prio":478,"fIdx":-1,"tIdx":-1,"tagL":["RES_LOC_H3"],"sort":818413568}],"type":"N"},{"locX":2,"idx":6,"aProdX":0,"aPltfS":{"type":"PL","txt":"2"},"aTimeS":"173600","aTimeR":"174400","aProgType":"PROGNOSED","aTZOffset":60,"dProdX":0,"dPltfS":{"type":"PL","txt":"2"},"dTimeS":"173800","dTimeR":"174600","dProgType":"PROGNOSED","dTrnCmpSX":{"tcocX":[0,1]},"dTZOffset":60,"type":"N"},{"locX":1,"idx":7,"aProdX":0,"aPltfS":{"type":"PL","txt":"9"},"aTimeS":"182800","aTimeR":"183400","aProgType":"PROGNOSED","aTZOffset":60,"type":"N"}],"pos":{"x":7366462,"y":51497817},"ctxRecon":"T$A=1@O=Hamm(Westf)Hbf@L=8000149@a=128@$A=1@O=Hannover Hbf@L=8000152@a=128@$202402131711$202402131828$ICE 943$$1$$$$$$","msgL":[{"type":"REM","remX":1,"sty":"I","fLocX":0,"tLocX":1,"fIdx":5,"tIdx":7,"tagL":["RES_JNY_DTL"],"sort":831520768},{"type":"REM","remX":2,"sty":"I","fLocX":0,"tLocX":1,"fIdx":5,"tIdx":7,"tagL":["RES_JNY_DTL_L"],"sort":839385088},{"type":"REM","remX":3,"sty":"I","fLocX":0,"tLocX":1,"fIdx":5,"tIdx":7,"tagL":["RES_JNY_DTL_L"],"sort":839385088},{"type":"REM","remX":4,"sty":"I","fLocX":0,"tLocX":1,"fIdx":5,"tIdx":7,"tagL":["RES_JNY_DTL_L"],"sort":864288768},{"type":"REM","remX":5,"sty":"I","fLocX":0,"tLocX":1,"fIdx":5,"tIdx":7,"tagL":["RES_JNY_DTL"],"sort":878706688},{"type":"REM","remX":6,"sty":"I","prio":240,"fIdx":-1,"tIdx":-1,"tagL":["RES_CON_FTR_H3"],"sort":818413568},{"type":"REM","remX":7,"sty":"I","prio":240,"fIdx":-1,"tIdx":-1,"tagL":["RES_CON_FTR_H3"],"sort":818413568},{"type":"REM","remX":8,"sty":"I","prio":240,"fIdx":-1,"tIdx":-1,"tagL":["RES_CON_FTR_H3"],"sort":818413568}],"subscr":"F","prodL":[{"prodX":0,"fLocX":0,"tLocX":1,"fIdx":5,"tIdx":7}],"dirL":[{"dirX":0,"fLocX":0,"tLocX":1,"fIdx":5,"tIdx":7}],"dTrnCmpSX":{"tcocX":[0,1]},"sumLDrawStyleX":0,"resLDrawStyleX":1,"trainStartDate":"20240213","durS":"011700","tcocXL":[0,1]},"parJnyL":[{"jid":"1|201884|0|80|13022024","prodX":1,"dirTxt":"Berlin Ostbahnhof","dirFlg":"1","status":"P","isRchbl":true,"stopL":[{"locX":0,"idx":3,"dProdX":1,"dPltfS":{"type":"PL","txt":"5"},"dTimeS":"171100","dTimeR":"171900","dProgType":"PROGNOSED","dDirTxt":"Berlin Ostbahnhof","dDirFlg":"1","dTrnCmpSX":{"tcocX":[0,1]},"dTZOffset":60,"type":"N"},{"locX":2,"idx":4,"aProdX":1,"aPltfS":{"type":"PL","txt":"2"},"aTimeS":"173600","aTimeR":"174400","aProgType":"PROGNOSED","aTZOffset":60,"dTrnCmpSX":{"tcocX":[0,1]},"type":"N"},{"locX":1,"idx":5,"aProdX":1,"aPltfS":{"type":"PL","txt":"9"},"aTimeS":"182800","aTimeR":"183400","aProgType":"PROGNOSED","aTZOffset":60,"type":"N"}],"pos":{"x":7460606,"y":51362709},"ctxRecon":"T$A=1@O=Hamm(Westf)Hbf@L=8000149@a=128@$A=1@O=Hannover Hbf@L=8000152@a=128@$202402131711$202402131828$ICE 953$$1$$$$$$","subscr":"F","prodL":[{"prodX":1,"fLocX":0,"tLocX":1,"fIdx":3,"tIdx":5}],"dirL":[{"dirX":0,"fLocX":0,"tLocX":1,"fIdx":3,"tIdx":5}],"dTrnCmpSX":{"tcocX":[0,1]},"sumLDrawStyleX":0,"resLDrawStyleX":1,"trainStartDate":"20240213","durS":"011700"}],"resState":"N","resRecommendation":"N"}],"ctxRecon":"T$A=1@O=Hamm(Westf)Hbf@L=8000149@a=128@$A=1@O=Hannover Hbf@L=8000152@a=128@$202402131711$202402131828$ICE 943$$1$$$$$$","trfRes":{"statusCode":"OK","fareSetL":[{"fareL":[{"isFromPrice":true,"isPartPrice":false,"isBookable":true,"isUpsell":false,"targetCtx":"D","buttonText":"To offer selection","price":{"amount":3990},"retPriceIsCompletePrice":false,"retPrice":-1}]}]},"msgL":[{"type":"REM","remX":9,"sty":"I","prio":200,"fIdx":-1,"tIdx":-1,"tagL":["SUM_CON_FTR_H3"],"sort":818413568}],"conSubscr":"F","resState":"N","resRecommendation":"N","recState":"U","sotRating":0,"isSotCon":false,"showARSLink":false,"sotCtxt":{"cnLocX":0,"calcDate":"20240213","jid":"1|201802|0|80|-1","locMode":"FROM_START","pLocX":0,"reqMode":"UNKNOWN","sectX":0,"calcTime":"164030"},"cksum":"6e7d7a30_3","cksumDti":"546d300f_3","dTrnCmpSX":{"tcocX":[0,1]},"intvlSubscr":"F","tcocXL":[0,1],"originType":"INITIAL"},{"cid":"C-1","date":"20240213","dur":"011900","durS":"012100","durR":"011900","chg":0,"sDays":{"sDaysR":"runs daily ","sDaysB":"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0"},"dep":{"locX":0,"idx":5,"dProdX":2,"dPltfS":{"type":"PL","txt":"9"},"dTimeS":"180700","dTimeR":"180900","dProgType":"PROGNOSED","dTrnCmpSX":{"tcocX":[2,3]},"dTZOffset":60,"type":"N"},"arr":{"locX":1,"idx":8,"aProdX":2,"aPltfS":{"type":"PL","txt":"9"},"aTimeS":"192800","aTimeR":"192800","aProgType":"PROGNOSED","aTZOffset":60,"type":"N"},"secL":[{"type":"JNY","dep":{"locX":0,"idx":5,"dProdX":2,"dPltfS":{"type":"PL","txt":"9"},"dTimeS":"180700","dTimeR":"180900","dProgType":"PROGNOSED","dTrnCmpSX":{"tcocX":[2,3],"tcM":1},"dTZOffset":60,"type":"N"},"arr":{"locX":1,"idx":8,"aProdX":2,"aPltfS":{"type":"PL","txt":"9"},"aTimeS":"192800","aTimeR":"192800","aProgType":"PROGNOSED","aTrnCmpSX":{"tcM":1},"aTZOffset":60,"type":"N"},"jny":{"jid":"1|200529|0|80|13022024","prodX":2,"dirTxt":"Berlin Ostbahnhof","dirFlg":"1","status":"P","isRchbl":true,"stopL":[{"locX":0,"idx":5,"dProdX":2,"dPltfS":{"type":"PL","txt":"9"},"dTimeS":"180700","dTimeR":"180900","dProgType":"PROGNOSED","dDirTxt":"Berlin Ostbahnhof","dDirFlg":"1","dTrnCmpSX":{"tcocX":[2,3]},"dTZOffset":60,"type":"N"},{"locX":2,"idx":6,"aProdX":2,"aPltfS":{"type":"PL","txt":"2"},"aTimeS":"183400","aTimeR":"183600","aProgType":"PROGNOSED","aTZOffset":60,"dProdX":2,"dPltfS":{"type":"PL","txt":"2"},"dTimeS":"183600","dTimeR":"183800","dProgType":"PROGNOSED","dTrnCmpSX":{"tcocX":[2,3]},"dTZOffset":60,"type":"N"},{"locX":3,"idx":7,"aProdX":2,"aPltfS":{"type":"PL","txt":"13"},"aTimeS":"185800","aTimeR":"185800","aProgType":"PROGNOSED","aTZOffset":60,"dProdX":2,"dPltfS":{"type":"PL","txt":"13"},"dTimeS":"190000","dTimeR":"190000","dProgType":"PROGNOSED","dTrnCmpSX":{"tcocX":[2,3]},"dTZOffset":60,"type":"N"},{"locX":1,"idx":8,"aProdX":2,"aPltfS":{"type":"PL","txt":"9"},"aTimeS":"192800","aTimeR":"192800","aProgType":"PROGNOSED","aTZOffset":60,"type":"N"}],"ctxRecon":"T$A=1@O=Hamm(Westf)Hbf@L=8000149@a=128@$A=1@O=Hannover Hbf@L=8000152@a=128@$202402131807$202402131928$ICE 643$$1$$$$$$","msgL":[{"type":"REM","remX":1,"sty":"I","fLocX":0,"tLocX":1,"fIdx":5,"tIdx":8,"tagL":["RES_JNY_DTL"],"sort":831520768},{"type":"REM","remX":4,"sty":"I","fLocX":0,"tLocX":1,"fIdx":5,"tIdx":8,"tagL":["RES_JNY_DTL_L"],"sort":864288768}],"subscr":"F","prodL":[{"prodX":2,"fLocX":0,"tLocX":1,"fIdx":5,"tIdx":8}],"dirL":[{"dirX":0,"fLocX":0,"tLocX":1,"fIdx":5,"tIdx":8}],"dTrnCmpSX":{"tcocX":[2,3]},"sumLDrawStyleX":0,"resLDrawStyleX":1,"trainStartDate":"20240213","durS":"012100","tcocXL":[2,3]},"resState":"N","resRecommendation":"N"}],"ctxRecon":"T$A=1@O=Hamm(Westf)Hbf@L=8000149@a=128@$A=1@O=Hannover Hbf@L=8000152@a=128@$202402131807$202402131928$ICE 643$$1$$$$$$","trfRes":{"statusCode":"OK","fareSetL":[{"fareL":[{"isFromPrice":true,"isPartPrice":false,"isBookable":true,"isUpsell":false,"targetCtx":"D","buttonText":"To offer selection","price":{"amount":3990},"retPriceIsCompletePrice":false,"retPrice":-1}]}]},"conSubscr":"F","resState":"N","resRecommendation":"N","recState":"U","sotRating":0,"isSotCon":false,"showARSLink":false,"sotCtxt":{"cnLocX":0,"calcDate":"20240213","jid":"1|200529|0|80|-1","locMode":"FROM_START","pLocX":0,"reqMode":"UNKNOWN","sectX":0,"calcTime":"164030"},"cksum":"62979bfa_3","cksumDti":"da13b836_3","dTrnCmpSX":{"tcocX":[2,3]},"intvlSubscr":"F","tcocXL":[2,3],"originType":"INITIAL"},{"cid":"C-2","date":"20240213","dur":"013300","durS":"013300","durR":"013300","chg":0,"sDays":{"sDaysR":"runs daily ","sDaysB":"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0"},"dep":{"locX":0,"idx":5,"dProdX":3,"dPltfS":{"type":"PL","txt":"9"},"dTimeS":"184500","dTrnCmpSX":{"tcocX":[2,3]},"dTZOffset":60,"type":"N"},"arr":{"locX":1,"idx":11,"aProdX":3,"aPltfS":{"type":"PL","txt":"10"},"aTimeS":"201800","aProgType":"PROGNOSED","aTZOffset":60,"type":"N"},"secL":[{"type":"JNY","dep":{"locX":0,"idx":5,"dProdX":3,"dPltfS":{"type":"PL","txt":"9"},"dTimeS":"184500","dTrnCmpSX":{"tcocX":[2,3],"tcM":1},"dTZOffset":60,"type":"N"},"arr":{"locX":1,"idx":11,"aProdX":3,"aPltfS":{"type":"PL","txt":"10"},"aTimeS":"201800","aProgType":"PROGNOSED","aTrnCmpSX":{"tcM":1},"aTZOffset":60,"type":"N"},"jny":{"jid":"1|198001|0|80|13022024","prodX":3,"dirTxt":"Hannover Hbf","dirFlg":"1","status":"P","isRchbl":true,"stopL":[{"locX":0,"idx":5,"dProdX":3,"dPltfS":{"type":"PL","txt":"9"},"dTimeS":"184500","dDirTxt":"Hannover Hbf","dDirFlg":"1","dTrnCmpSX":{"tcocX":[2,3]},"dTZOffset":60,"type":"N"},{"locX":4,"idx":6,"aProdX":3,"aPltfS":{"type":"PL","txt":"3"},"aTimeS":"190600","aTZOffset":60,"dProdX":3,"dPltfS":{"type":"PL","txt":"3"},"dTimeS":"190800","dTrnCmpSX":{"tcocX":[2,3]},"dTZOffset":60,"type":"N"},{"locX":2,"idx":7,"aProdX":3,"aPltfS":{"type":"PL","txt":"2"},"aTimeS":"191800","aTZOffset":60,"dProdX":3,"dPltfS":{"type":"PL","txt":"2"},"dTimeS":"191900","dTrnCmpSX":{"tcocX":[2,3]},"dTZOffset":60,"type":"N"},{"locX":5,"idx":8,"aProdX":3,"aPltfS":{"type":"PL","txt":"4"},"aTimeS":"192700","aTZOffset":60,"dProdX":3,"dPltfS":{"type":"PL","txt":"4"},"dTimeS":"192800","dTrnCmpSX":{"tcocX":[2,3]},"dTZOffset":60,"type":"N"},{"locX":6,"idx":9,"aProdX":3,"aPltfS":{"type":"PL","txt":"1"},"aTimeS":"193700","aTZOffset":60,"dProdX":3,"dPltfS":{"type":"PL","txt":"1"},"dTimeS":"193800","dTrnCmpSX":{"tcocX":[2,3]},"dTZOffset":60,"type":"N"},{"locX":3,"idx":10,"aProdX":3,"aPltfS":{"type":"PL","txt":"13"},"aTimeS":"194700","aTZOffset":60,"dProdX":3,"dPltfS":{"type":"PL","txt":"13"},"dTimeS":"194800","dTrnCmpSX":{"tcocX":[2,3]},"dTZOffset":60,"type":"N"},{"locX":1,"idx":11,"aProdX":3,"aPltfS":{"type":"PL","txt":"10"},"aTimeS":"201800","aProgType":"PROGNOSED","aTZOffset":60,"type":"N"}],"ctxRecon":"T$A=1@O=Hamm(Westf)Hbf@L=8000149@a=128@$A=1@O=Hannover Hbf@L=8000152@a=128@$202402131845$202402132018$IC 2043$$1$$$$$$","msgL":[{"type":"REM","remX":1,"sty":"I","fLocX":0,"tLocX":1,"fIdx":5,"tIdx":11,"tagL":["RES_JNY_DTL"],"sort":831520768},{"type":"REM","remX":2,"sty":"I","fLocX":0,"tLocX":1,"fIdx":5,"tIdx":11,"tagL":["RES_JNY_DTL_L"],"sort":839385088},{"type":"REM","remX":3,"sty":"I","fLocX":0,"tLocX":1,"fIdx":5,"tIdx":11,"tagL":["RES_JNY_DTL_L"],"sort":839385088},{"type":"REM","remX":10,"sty":"I","fLocX":0,"tLocX":1,"fIdx":5,"tIdx":11,"tagL":["RES_JNY_DTL"],"sort":865599488},{"type":"REM","remX":5,"sty":"I","fLocX":0,"tLocX":1,"fIdx":5,"tIdx":11,"tagL":["RES_JNY_DTL"],"sort":878706688}],"subscr":"F","prodL":[{"prodX":3,"fLocX":0,"tLocX":1,"fIdx":5,"tIdx":11}],"dirL":[{"dirX":1,"fLocX":0,"tLocX":1,"fIdx":5,"tIdx":11}],"dTrnCmpSX":{"tcocX":[2,3]},"sumLDrawStyleX":2,"resLDrawStyleX":1,"trainStartDate":"20240213","durS":"013300","tcocXL":[2,3]},"resState":"N","resRecommendation":"N"}],"ctxRecon":"T$A=1@O=Hamm(Westf)Hbf@L=8000149@a=128@$A=1@O=Hannover Hbf@L=8000152@a=128@$202402131845$202402132018$IC 2043$$1$$$$$$","trfRes":{"statusCode":"OK","fareSetL":[{"fareL":[{"isFromPrice":true,"isPartPrice":false,"isBookable":true,"isUpsell":false,"targetCtx":"D","buttonText":"To offer selection","price":{"amount":3390},"retPriceIsCompletePrice":false,"retPrice":-1}]}]},"conSubscr":"F","resState":"N","resRecommendation":"N","recState":"U","sotRating":0,"isSotCon":false,"showARSLink":false,"sotCtxt":{"cnLocX":0,"calcDate":"20240213","jid":"1|198001|0|80|-1","locMode":"FROM_START","pLocX":0,"reqMode":"UNKNOWN","sectX":0,"calcTime":"164030"},"cksum":"541d010f_3","cksumDti":"7f1c203a_3","dTrnCmpSX":{"tcocX":[2,3]},"intvlSubscr":"F","tcocXL":[2,3],"originType":"INITIAL"},{"cid":"C-3","date":"20240213","dur":"011700","durS":"011700","durR":"011700","chg":0,"sDays":{"sDaysR":"runs 13. Feb until 18. Oct 2024 ","sDaysB":"FC07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC000000000000000"},"dep":{"locX":0,"idx":3,"dProdX":4,"dPltfS":{"type":"PL","txt":"5"},"dTimeS":"191100","dTrnCmpSX":{"tcocX":[4,5]},"dTZOffset":60,"type":"N"},"arr":{"locX":1,"idx":5,"aProdX":4,"aPltfS":{"type":"PL","txt":"9"},"aTimeS":"202800","aTZOffset":60,"type":"N"},"secL":[{"type":"JNY","dep":{"locX":0,"idx":3,"dProdX":4,"dPltfS":{"type":"PL","txt":"5"},"dTimeS":"191100","dTrnCmpSX":{"tcocX":[4,5],"tcM":1},"dTZOffset":60,"type":"N"},"arr":{"locX":1,"idx":5,"aProdX":4,"aPltfS":{"type":"PL","txt":"9"},"aTimeS":"202800","aTrnCmpSX":{"tcM":1},"aTZOffset":60,"type":"N"},"jny":{"jid":"1|201901|0|80|13022024","prodX":4,"dirTxt":"Berlin Ostbahnhof","dirFlg":"1","status":"P","isRchbl":true,"stopL":[{"locX":0,"idx":3,"dProdX":4,"dPltfS":{"type":"PL","txt":"5"},"dTimeS":"191100","dDirTxt":"Berlin Ostbahnhof","dDirFlg":"1","dTrnCmpSX":{"tcocX":[4,5]},"dTZOffset":60,"type":"N"},{"locX":2,"idx":4,"aProdX":4,"aPltfS":{"type":"PL","txt":"2"},"aTimeS":"193600","aTZOffset":60,"dProdX":4,"dPltfS":{"type":"PL","txt":"2"},"dTimeS":"193800","dTrnCmpSX":{"tcocX":[4,5]},"dTZOffset":60,"type":"N"},{"locX":1,"idx":5,"aProdX":4,"aPltfS":{"type":"PL","txt":"9"},"aTimeS":"202800","aTZOffset":60,"type":"N"}],"ctxRecon":"T$A=1@O=Hamm(Westf)Hbf@L=8000149@a=128@$A=1@O=Hannover Hbf@L=8000152@a=128@$202402131911$202402132028$ICE 955$$1$$$$$$","msgL":[{"type":"REM","remX":1,"sty":"I","fLocX":0,"tLocX":1,"fIdx":3,"tIdx":5,"tagL":["RES_JNY_DTL"],"sort":831520768},{"type":"REM","remX":4,"sty":"I","fLocX":0,"tLocX":1,"fIdx":3,"tIdx":5,"tagL":["RES_JNY_DTL_L"],"sort":864288768}],"subscr":"F","prodL":[{"prodX":4,"fLocX":0,"tLocX":1,"fIdx":3,"tIdx":5}],"dirL":[{"dirX":0,"fLocX":0,"tLocX":1,"fIdx":3,"tIdx":5}],"dTrnCmpSX":{"tcocX":[4,5]},"sumLDrawStyleX":0,"resLDrawStyleX":1,"trainStartDate":"20240213","durS":"011700","tcocXL":[4,5]},"resState":"N","resRecommendation":"N"}],"ctxRecon":"T$A=1@O=Hamm(Westf)Hbf@L=8000149@a=128@$A=1@O=Hannover Hbf@L=8000152@a=128@$202402131911$202402132028$ICE 955$$1$$$$$$","trfRes":{"statusCode":"NA","fareSetL":[{"fareL":[{"desc":"Fares not available","isFromPrice":false,"isPartPrice":false,"isBookable":false,"isUpsell":false,"price":{"amount":-1},"retPriceIsCompletePrice":false,"retPrice":-1}]}]},"conSubscr":"F","resState":"N","resRecommendation":"N","recState":"U","sotRating":0,"isSotCon":false,"showARSLink":false,"sotCtxt":{"cnLocX":0,"calcDate":"20240213","jid":"1|201901|0|80|-1","locMode":"FROM_START","pLocX":0,"reqMode":"UNKNOWN","sectX":0,"calcTime":"164030"},"cksum":"5dcc85cc_3","cksumDti":"1b0d977c_3","dTrnCmpSX":{"tcocX":[4,5]},"intvlSubscr":"F","tcocXL":[4,5],"originType":"INITIAL"},{"cid":"C-4","date":"20240213","dur":"012100","durS":"012100","durR":"012100","chg":0,"sDays":{"sDaysR":"runs daily, not 23. Mar until 7. Apr 2024 ","sDaysB":"FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0"},"dep":{"locX":0,"idx":5,"dProdX":5,"dPltfS":{"type":"PL","txt":"9"},"dTimeS":"200700","dTrnCmpSX":{"tcocX":[2,3]},"dTZOffset":60,"type":"N"},"arr":{"locX":1,"idx":8,"aProdX":5,"aPltfS":{"type":"PL","txt":"9"},"aTimeS":"212800","aTZOffset":60,"type":"N"},"secL":[{"type":"JNY","dep":{"locX":0,"idx":5,"dProdX":5,"dPltfS":{"type":"PL","txt":"9"},"dTimeS":"200700","dTrnCmpSX":{"tcocX":[2,3],"tcM":1},"dTZOffset":60,"type":"N"},"arr":{"locX":1,"idx":8,"aProdX":5,"aPltfS":{"type":"PL","txt":"9"},"aTimeS":"212800","aTrnCmpSX":{"tcM":1},"aTZOffset":60,"type":"N"},"jny":{"jid":"1|200540|0|80|13022024","prodX":5,"dirTxt":"Berlin Ostbahnhof","dirFlg":"1","status":"P","isRchbl":true,"stopL":[{"locX":0,"idx":5,"dProdX":5,"dPltfS":{"type":"PL","txt":"9"},"dTimeS":"200700","dDirTxt":"Berlin Ostbahnhof","dDirFlg":"1","dTrnCmpSX":{"tcocX":[2,3]},"dTZOffset":60,"type":"N"},{"locX":2,"idx":6,"aProdX":5,"aPltfS":{"type":"PL","txt":"2"},"aTimeS":"203400","aTZOffset":60,"dProdX":5,"dPltfS":{"type":"PL","txt":"2"},"dTimeS":"203600","dTrnCmpSX":{"tcocX":[2,3]},"dTZOffset":60,"type":"N"},{"locX":3,"idx":7,"aProdX":5,"aPltfS":{"type":"PL","txt":"13"},"aTimeS":"205800","aTZOffset":60,"dProdX":5,"dPltfS":{"type":"PL","txt":"13"},"dTimeS":"210000","dTrnCmpSX":{"tcocX":[2,3]},"dTZOffset":60,"type":"N"},{"locX":1,"idx":8,"aProdX":5,"aPltfS":{"type":"PL","txt":"9"},"aTimeS":"212800","aTZOffset":60,"type":"N"}],"ctxRecon":"T$A=1@O=Hamm(Westf)Hbf@L=8000149@a=128@$A=1@O=Hannover Hbf@L=8000152@a=128@$202402132007$202402132128$ICE 645$$1$$$$$$","msgL":[{"type":"REM","remX":1,"sty":"I","fLocX":0,"tLocX":1,"fIdx":5,"tIdx":8,"tagL":["RES_JNY_DTL"],"sort":831520768},{"type":"REM","remX":2,"sty":"I","fLocX":0,"tLocX":1,"fIdx":5,"tIdx":8,"tagL":["RES_JNY_DTL_L"],"sort":839385088},{"type":"REM","remX":3,"sty":"I","fLocX":0,"tLocX":1,"fIdx":5,"tIdx":8,"tagL":["RES_JNY_DTL_L"],"sort":839385088},{"type":"REM","remX":4,"sty":"I","fLocX":0,"tLocX":1,"fIdx":5,"tIdx":8,"tagL":["RES_JNY_DTL_L"],"sort":864288768},{"type":"REM","remX":5,"sty":"I","fLocX":0,"tLocX":1,"fIdx":5,"tIdx":8,"tagL":["RES_JNY_DTL"],"sort":878706688},{"type":"REM","remX":11,"sty":"I","prio":240,"fIdx":-1,"tIdx":-1,"tagL":["RES_CON_FTR_H3"],"sort":818413568},{"type":"REM","remX":12,"sty":"I","prio":240,"fIdx":-1,"tIdx":-1,"tagL":["RES_CON_FTR_H3"],"sort":818413568}],"subscr":"F","prodL":[{"prodX":5,"fLocX":0,"tLocX":1,"fIdx":5,"tIdx":8}],"dirL":[{"dirX":0,"fLocX":0,"tLocX":1,"fIdx":5,"tIdx":8}],"dTrnCmpSX":{"tcocX":[2,3]},"sumLDrawStyleX":0,"resLDrawStyleX":1,"trainStartDate":"20240213","durS":"012100","tcocXL":[2,3]},"resState":"N","resRecommendation":"N"}],"ctxRecon":"T$A=1@O=Hamm(Westf)Hbf@L=8000149@a=128@$A=1@O=Hannover Hbf@L=8000152@a=128@$202402132007$202402132128$ICE 645$$1$$$$$$","trfRes":{"statusCode":"OK","fareSetL":[{"fareL":[{"isFromPrice":true,"isPartPrice":false,"isBookable":true,"isUpsell":false,"targetCtx":"D","buttonText":"To offer selection","price":{"amount":3390},"retPriceIsCompletePrice":false,"retPrice":-1}]}]},"msgL":[{"type":"REM","remX":9,"sty":"I","prio":200,"fIdx":-1,"tIdx":-1,"tagL":["SUM_CON_FTR_H3"],"sort":818413568}],"conSubscr":"F","resState":"N","resRecommendation":"N","recState":"U","sotRating":0,"isSotCon":false,"showARSLink":false,"sotCtxt":{"cnLocX":0,"calcDate":"20240213","jid":"1|200540|0|80|-1","locMode":"FROM_START","pLocX":0,"reqMode":"UNKNOWN","sectX":0,"calcTime":"164030"},"cksum":"7779a23c_3","cksumDti":"a288a90b_3","dTrnCmpSX":{"tcocX":[2,3]},"intvlSubscr":"F","tcocXL":[2,3],"originType":"INITIAL"},{"cid":"C-5","date":"20240213","dur":"011700","durS":"011700","durR":"011700","chg":0,"sDays":{"sDaysR":"runs daily ","sDaysB":"FCF7FFFFFFE1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0"},"dep":{"locX":0,"idx":6,"dProdX":6,"dPltfS":{"type":"PL","txt":"5"},"dTimeS":"211100","dTrnCmpSX":{"tcocX":[2,1]},"dTZOffset":60,"type":"N"},"arr":{"locX":1,"idx":8,"aProdX":6,"aPltfS":{"type":"PL","txt":"9"},"aTimeS":"222800","aTZOffset":60,"type":"N"},"secL":[{"type":"JNY","dep":{"locX":0,"idx":6,"dProdX":6,"dPltfS":{"type":"PL","txt":"5"},"dTimeS":"211100","dTrnCmpSX":{"tcocX":[2,1],"tcM":1},"dTZOffset":60,"type":"N"},"arr":{"locX":1,"idx":8,"aProdX":6,"aPltfS":{"type":"PL","txt":"9"},"aTimeS":"222800","aTrnCmpSX":{"tcM":1},"aTZOffset":60,"type":"N"},"jny":{"jid":"1|201842|0|80|13022024","prodX":6,"dirTxt":"Berlin Ostbahnhof","dirFlg":"1","status":"P","isRchbl":true,"stopL":[{"locX":0,"idx":6,"dProdX":6,"dPltfS":{"type":"PL","txt":"5"},"dTimeS":"211100","dDirTxt":"Berlin Ostbahnhof","dDirFlg":"1","dTrnCmpSX":{"tcocX":[2,1]},"dTZOffset":60,"type":"N"},{"locX":2,"idx":7,"aProdX":6,"aPltfS":{"type":"PL","txt":"2"},"aTimeS":"213600","aTZOffset":60,"dProdX":6,"dPltfS":{"type":"PL","txt":"2"},"dTimeS":"213800","dTrnCmpSX":{"tcocX":[2,3]},"dTZOffset":60,"type":"N"},{"locX":1,"idx":8,"aProdX":6,"aPltfS":{"type":"PL","txt":"9"},"aTimeS":"222800","aTZOffset":60,"type":"N"}],"ctxRecon":"T$A=1@O=Hamm(Westf)Hbf@L=8000149@a=128@$A=1@O=Hannover Hbf@L=8000152@a=128@$202402132111$202402132228$ICE 947$$1$$$$$$","msgL":[{"type":"REM","remX":1,"sty":"I","fLocX":0,"tLocX":1,"fIdx":6,"tIdx":8,"tagL":["RES_JNY_DTL"],"sort":831520768},{"type":"REM","remX":4,"sty":"I","fLocX":0,"tLocX":1,"fIdx":6,"tIdx":8,"tagL":["RES_JNY_DTL_L"],"sort":864288768}],"subscr":"F","prodL":[{"prodX":6,"fLocX":0,"tLocX":1,"fIdx":6,"tIdx":8}],"dirL":[{"dirX":0,"fLocX":0,"tLocX":1,"fIdx":6,"tIdx":8}],"dTrnCmpSX":{"tcocX":[2,1]},"sumLDrawStyleX":0,"resLDrawStyleX":1,"trainStartDate":"20240213","durS":"011700","tcocXL":[2,1]},"resState":"N","resRecommendation":"N"}],"ctxRecon":"T$A=1@O=Hamm(Westf)Hbf@L=8000149@a=128@$A=1@O=Hannover Hbf@L=8000152@a=128@$202402132111$202402132228$ICE 947$$1$$$$$$","trfRes":{"statusCode":"OK","fareSetL":[{"fareL":[{"isFromPrice":true,"isPartPrice":false,"isBookable":true,"isUpsell":false,"targetCtx":"D","buttonText":"To offer selection","price":{"amount":3590},"retPriceIsCompletePrice":false,"retPrice":-1}]}]},"conSubscr":"F","resState":"N","resRecommendation":"N","recState":"U","sotRating":0,"isSotCon":false,"showARSLink":false,"sotCtxt":{"cnLocX":0,"calcDate":"20240213","jid":"1|201842|0|80|-1","locMode":"FROM_START","pLocX":0,"reqMode":"UNKNOWN","sectX":0,"calcTime":"164030"},"cksum":"2906ccbf_3","cksumDti":"30de92cd_3","dTrnCmpSX":{"tcocX":[2,1]},"intvlSubscr":"F","tcocXL":[2,1],"originType":"INITIAL"}],"outCtxScrF":"3|OF|MT#14#97751#97751#97828#97828#0#0#325#97688#6#0#1050#0#0#-2147483648#1#2|PDH#56652a7d97d230d344e9fe574e96e9bb|RD#13022024|RT#163630|US#0|RS#INIT","fpB":"20231210","fpE":"20241214","bfATS":-1,"bfIOSTS":-1,"planrtTS":"1707838756","outConGrpSettings":{"conGrpL":[{"name":"All connections","icoX":9,"grpid":"cl_all","conScoringL":[{"type":"DT","conScoreL":[{"score":8807142014516199423,"scoreS":"08807142014516199423","conRefL":[0]},{"score":8806922112188547071,"scoreS":"08806922112188547071","conRefL":[1]},{"score":8806763782506807295,"scoreS":"08806763782506807295","conRefL":[2]},{"score":8806649433305907199,"scoreS":"08806649433305907199","conRefL":[3]},{"score":8806403142699188223,"scoreS":"08806403142699188223","conRefL":[4]},{"score":8806121667724574719,"scoreS":"08806121667724574719","conRefL":[5]}],"name":"Departure"},{"type":"AT","conScoreL":[{"score":8806812161027866623,"scoreS":"08806812161027866623","conRefL":[0]},{"score":8806574666514169855,"scoreS":"08806574666514169855","conRefL":[1]},{"score":8806354764181274623,"scoreS":"08806354764181274623","conRefL":[2]},{"score":8806310783724552191,"scoreS":"08806310783724552191","conRefL":[3]},{"score":8806046900931788799,"scoreS":"08806046900931788799","conRefL":[4]},{"score":8805783018143219711,"scoreS":"08805783018143219711","conRefL":[5]}],"name":"Arrival"},{"type":"TI","conScoreL":[{"score":9223038835213467647,"scoreS":"09223038835213467647","conRefL":[0]},{"score":9223021243001208831,"scoreS":"09223021243001208831","conRefL":[1]},{"score":9222959670331179007,"scoreS":"09222959670331179007","conRefL":[2]},{"score":9223030039061725183,"scoreS":"09223030039061725183","conRefL":[3]},{"score":9223012446846320639,"scoreS":"09223012446846320639","conRefL":[4]},{"score":9223030038998810623,"scoreS":"09223030038998810623","conRefL":[5]}],"name":"Duration"}],"initScoringType":"DT","requests":[{"id":"RQ_CLIENT","autosend":true}],"scrollable":true,"bitmask":1}],"selectL":[{"icoX":9,"name":"All connections","bitIdx":0}],"variant":"RADIO"}}}]} +const locations : (Station | Stop | Location)[] = +[{"type":"stop","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},{"type":"stop","id":"8002586","name":"Hannover-Linden/Fischerhof","location":{"type":"location","id":"8002586","latitude":52.352574,"longitude":9.723488},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},{"type":"stop","id":"8079095","name":"Hannover-Nordstadt","location":{"type":"location","id":"8079095","latitude":52.393969,"longitude":9.717267},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},{"type":"stop","id":"8002580","name":"Hannover Bismarckstr.","location":{"type":"location","id":"8002580","latitude":52.356233,"longitude":9.769809},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":false,"taxi":false}},{"type":"stop","id":"8079097","name":"Hannover-Ledeburg","location":{"type":"location","id":"8079097","latitude":52.408442,"longitude":9.690731},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":false,"taxi":false}}] +const departures : Departures = +{"departures":[{"tripId":"1|201789|0|80|13022024","stop":{"type":"stop","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},"when":"2024-02-13T16:47:00+01:00","plannedWhen":"2024-02-13T16:31:00+01:00","delay":960,"platform":"10","plannedPlatform":"9","prognosisType":"prognosed","direction":"Berlin Ostbahnhof","provenance":null,"line":{"type":"line","id":"ice-941","fahrtNr":"941","name":"ICE 941","public":true,"adminCode":"80____","productName":"ICE","mode":"train","product":"nationalExpress","operator":{"type":"operator","id":"db-fernverkehr-ag","name":"DB Fernverkehr AG"}},"remarks":[],"origin":null,"destination":{"type":"stop","id":"8010255","name":"Berlin Ostbahnhof","location":{"type":"location","id":"8010255","latitude":52.510424,"longitude":13.4349},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":false,"taxi":false}},"currentTripPosition":{"type":"location","latitude":52.395057,"longitude":9.652248},"loadFactor":"high"},{"tripId":"1|201867|0|80|13022024","stop":{"type":"stop","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},"when":"2024-02-13T16:47:00+01:00","plannedWhen":"2024-02-13T16:31:00+01:00","delay":960,"platform":"10","plannedPlatform":"9","prognosisType":"prognosed","direction":"Berlin Ostbahnhof","provenance":null,"line":{"type":"line","id":"ice-951","fahrtNr":"951","name":"ICE 951","public":true,"adminCode":"80____","productName":"ICE","mode":"train","product":"nationalExpress","operator":{"type":"operator","id":"db-fernverkehr-ag","name":"DB Fernverkehr AG"}},"remarks":[],"origin":null,"destination":{"type":"stop","id":"8010255","name":"Berlin Ostbahnhof","location":{"type":"location","id":"8010255","latitude":52.510424,"longitude":13.4349},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":false,"taxi":false}},"currentTripPosition":{"type":"location","latitude":52.395057,"longitude":9.652248},"loadFactor":"high"},{"tripId":"1|1214134|30|80|13022024","stop":{"type":"stop","id":"612467","name":"Hauptbahnhof/Ernst-August-Platz, Hannover","location":{"type":"location","id":"612467","latitude":52.375739,"longitude":9.741215},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:42:00+01:00","plannedWhen":"2024-02-13T16:31:00+01:00","delay":660,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":"Nordring, Hannover","provenance":null,"line":{"type":"line","id":"5-webueb-134","fahrtNr":"0","name":"Bus 134","public":true,"adminCode":"webUEB","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":null,"destination":{"type":"stop","id":"616113","name":"Nordring, Hannover","location":{"type":"location","id":"616113","latitude":52.403345,"longitude":9.748064},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":false,"taxi":false},"station":{"type":"station","id":"636228","name":"Nordring, Hannover","location":{"type":"location","id":"636228","latitude":52.403237,"longitude":9.748091},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":false,"taxi":false}}},"currentTripPosition":{"type":"location","latitude":52.374948,"longitude":9.743606}},{"tripId":"1|1214134|30|80|13022024","stop":{"type":"stop","id":"360021","name":"Hauptbahnhof/Rosenstraße, Hannover","location":{"type":"location","id":"360021","latitude":52.376944,"longitude":9.737853},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:44:00+01:00","plannedWhen":"2024-02-13T16:33:00+01:00","delay":660,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":"Nordring, Hannover","provenance":null,"line":{"type":"line","id":"5-webueb-134","fahrtNr":"0","name":"Bus 134","public":true,"adminCode":"webUEB","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":null,"destination":{"type":"stop","id":"616113","name":"Nordring, Hannover","location":{"type":"location","id":"616113","latitude":52.403345,"longitude":9.748064},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":false,"taxi":false},"station":{"type":"station","id":"636228","name":"Nordring, Hannover","location":{"type":"location","id":"636228","latitude":52.403237,"longitude":9.748091},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":false,"taxi":false}}},"currentTripPosition":{"type":"location","latitude":52.374948,"longitude":9.743606}},{"tripId":"1|1213968|29|80|13022024","stop":{"type":"stop","id":"628410","name":"Hauptbahnhof/ZOB, Hannover","location":{"type":"location","id":"628410","latitude":52.379811,"longitude":9.742779},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:41:00+01:00","plannedWhen":"2024-02-13T16:36:00+01:00","delay":300,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":"Altenbekener Damm","provenance":null,"line":{"type":"line","id":"5-webueb-121","fahrtNr":"0","name":"Bus 121","public":true,"adminCode":"webUEB","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":null,"destination":{"type":"stop","id":"614048","name":"Altenbekener Damm, Hannover","location":{"type":"location","id":"614048","latitude":52.355684,"longitude":9.754582},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"638364","name":"Altenbekener Damm, Hannover","location":{"type":"location","id":"638364","latitude":52.354174,"longitude":9.754932},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"currentTripPosition":{"type":"location","latitude":52.379811,"longitude":9.742779}},{"tripId":"1|197189|0|80|13022024","stop":{"type":"stop","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},"when":"2024-02-13T16:54:00+01:00","plannedWhen":"2024-02-13T16:37:00+01:00","delay":1020,"platform":"8","plannedPlatform":"4","prognosisType":"prognosed","direction":"Hamburg Hbf","provenance":null,"line":{"type":"line","id":"ice-1578","fahrtNr":"1578","name":"ICE 1578","public":true,"adminCode":"80____","productName":"ICE","mode":"train","product":"nationalExpress","operator":{"type":"operator","id":"db-fernverkehr-ag","name":"DB Fernverkehr AG"}},"remarks":[],"origin":null,"destination":{"type":"stop","id":"8002549","name":"Hamburg Hbf","location":{"type":"location","id":"8002549","latitude":53.553533,"longitude":10.00636},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":true,"tram":false,"taxi":false}},"currentTripPosition":{"type":"location","latitude":52.111564,"longitude":9.877311},"loadFactor":"high"},{"tripId":"1|1213968|29|80|13022024","stop":{"type":"stop","id":"626517","name":"Hauptbahnhof/Ernst-August-Platz, Hannover","location":{"type":"location","id":"626517","latitude":52.375694,"longitude":9.741358},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:43:00+01:00","plannedWhen":"2024-02-13T16:38:00+01:00","delay":300,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":"Altenbekener Damm","provenance":null,"line":{"type":"line","id":"5-webueb-121","fahrtNr":"0","name":"Bus 121","public":true,"adminCode":"webUEB","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":null,"destination":{"type":"stop","id":"614048","name":"Altenbekener Damm, Hannover","location":{"type":"location","id":"614048","latitude":52.355684,"longitude":9.754582},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"638364","name":"Altenbekener Damm, Hannover","location":{"type":"location","id":"638364","latitude":52.354174,"longitude":9.754932},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"currentTripPosition":{"type":"location","latitude":52.379811,"longitude":9.742779}},{"tripId":"1|1213193|59|80|13022024","stop":{"type":"stop","id":"612467","name":"Hauptbahnhof/Ernst-August-Platz, Hannover","location":{"type":"location","id":"612467","latitude":52.375739,"longitude":9.741215},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:45:00+01:00","plannedWhen":"2024-02-13T16:39:00+01:00","delay":360,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":"Haltenhoffstraße","provenance":null,"line":{"type":"line","id":"5-webueb-121","fahrtNr":"0","name":"Bus 121","public":true,"adminCode":"webUEB","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":null,"destination":{"type":"station","id":"614127","name":"Haltenhoffstraße, Hannover","location":{"type":"location","id":"614127","latitude":52.392774,"longitude":9.713375},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},"currentTripPosition":{"type":"location","latitude":52.370678,"longitude":9.752442}},{"tripId":"1|1268870|62|80|13022024","stop":{"type":"stop","id":"638429","name":"Hauptbahnhof (U), Hannover","location":{"type":"location","id":"638429","latitude":52.378274,"longitude":9.742743},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:40:00+01:00","plannedWhen":"2024-02-13T16:39:00+01:00","delay":60,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":"Wettbergen","provenance":null,"line":{"type":"line","id":"8-webuet-3","fahrtNr":"427","name":"STR 3","public":true,"adminCode":"webUET","productName":"STR","mode":"train","product":"tram","operator":{"type":"operator","id":"ustra-hannoversche-verkehrsbetriebe-ag","name":"üstra Hannoversche Verkehrsbetriebe AG"}},"remarks":[],"origin":null,"destination":{"type":"station","id":"638601","name":"Wettbergen, Hannover","location":{"type":"location","id":"638601","latitude":52.332861,"longitude":9.690659},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},"currentTripPosition":{"type":"location","latitude":52.375721,"longitude":9.740082}},{"tripId":"1|1274071|61|80|13022024","stop":{"type":"stop","id":"638430","name":"Hauptbahnhof (U), Hannover","location":{"type":"location","id":"638430","latitude":52.378436,"longitude":9.74303},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:40:00+01:00","plannedWhen":"2024-02-13T16:39:00+01:00","delay":60,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":"Misburg","provenance":null,"line":{"type":"line","id":"8-webuet-7","fahrtNr":"603","name":"STR 7","public":true,"adminCode":"webUET","productName":"STR","mode":"train","product":"tram","operator":{"type":"operator","id":"ustra-hannoversche-verkehrsbetriebe-ag","name":"üstra Hannoversche Verkehrsbetriebe AG"}},"remarks":[],"origin":null,"destination":{"type":"stop","id":"372501","name":"Misburg, Hannover","location":{"type":"location","id":"372501","latitude":52.391542,"longitude":9.853211},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"627416","name":"Misburg, Hannover","location":{"type":"location","id":"627416","latitude":52.391614,"longitude":9.853283},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"currentTripPosition":{"type":"location","latitude":52.381834,"longitude":9.74517}},{"tripId":"1|199867|0|80|13022024","stop":{"type":"stop","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},"when":"2024-02-13T16:59:00+01:00","plannedWhen":"2024-02-13T16:40:00+01:00","delay":1140,"platform":"10","plannedPlatform":"12","prognosisType":"prognosed","direction":"Köln Hbf","provenance":null,"line":{"type":"line","id":"ice-556","fahrtNr":"556","name":"ICE 556","public":true,"adminCode":"80____","productName":"ICE","mode":"train","product":"nationalExpress","operator":{"type":"operator","id":"db-fernverkehr-ag","name":"DB Fernverkehr AG"}},"remarks":[],"origin":null,"destination":{"type":"stop","id":"8000206","name":"Koblenz Hbf","location":{"type":"location","id":"8000206","latitude":50.350775,"longitude":7.588343},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":false,"taxi":true}},"currentTripPosition":{"type":"location","latitude":52.456624,"longitude":10.50136},"loadFactor":"very-high"},{"tripId":"1|237282|1|80|13022024","stop":{"type":"stop","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},"when":"2024-02-13T16:40:00+01:00","plannedWhen":"2024-02-13T16:40:00+01:00","delay":0,"platform":"8 D-G","plannedPlatform":"8 D-G","prognosisType":"prognosed","direction":"Uelzen","provenance":null,"line":{"type":"line","id":"me-re2","fahrtNr":"82832","name":"ME RE2","public":true,"adminCode":"R1____","productName":"ME","mode":"train","product":"regional","operator":{"type":"operator","id":"metronom","name":"metronom"},"additionalName":"ME RE2"},"remarks":[],"origin":null,"destination":{"type":"stop","id":"8000168","name":"Uelzen","location":{"type":"location","id":"8000168","latitude":52.96998,"longitude":10.553246},"products":{"nationalExpress":true,"national":true,"regionalExpress":false,"regional":true,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":false,"taxi":true}},"currentTripPosition":{"type":"location","latitude":52.380216,"longitude":9.736315}},{"tripId":"1|853524|5|80|13022024","stop":{"type":"stop","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},"when":"2024-02-13T16:42:00+01:00","plannedWhen":"2024-02-13T16:40:00+01:00","delay":120,"platform":"2","plannedPlatform":"2","prognosisType":"prognosed","direction":"Bennemühlen","provenance":null,"line":{"type":"line","id":"4-tdhs-4","fahrtNr":"34450","name":"S 4","public":true,"adminCode":"TDHS__","productName":"S","mode":"train","product":"suburban","operator":{"type":"operator","id":"s-bahn-hannover-transdev","name":"S-Bahn Hannover (Transdev)"}},"remarks":[],"origin":null,"destination":{"type":"stop","id":"8000871","name":"Bennemühlen","location":{"type":"location","id":"8000871","latitude":52.580343,"longitude":9.727245},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":false,"taxi":false}},"currentTripPosition":{"type":"location","latitude":52.377474,"longitude":9.742275}},{"tripId":"1|1214184|31|80|13022024","stop":{"type":"stop","id":"360021","name":"Hauptbahnhof/Rosenstraße, Hannover","location":{"type":"location","id":"360021","latitude":52.376944,"longitude":9.737853},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:43:00+01:00","plannedWhen":"2024-02-13T16:40:00+01:00","delay":180,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":"Peiner Straße","provenance":null,"line":{"type":"line","id":"5-webueb-134","fahrtNr":"0","name":"Bus 134","public":true,"adminCode":"webUEB","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":null,"destination":{"type":"stop","id":"615757","name":"Peiner Straße, Hannover","location":{"type":"location","id":"615757","latitude":52.337778,"longitude":9.769252},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"638538","name":"Peiner Straße, Hannover","location":{"type":"location","id":"638538","latitude":52.337769,"longitude":9.769018},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"currentTripPosition":{"type":"location","latitude":52.378795,"longitude":9.733259}},{"tripId":"1|1228790|3|80|13022024","stop":{"type":"stop","id":"628410","name":"Hauptbahnhof/ZOB, Hannover","location":{"type":"location","id":"628410","latitude":52.379811,"longitude":9.742779},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:40:00+01:00","plannedWhen":"2024-02-13T16:40:00+01:00","delay":null,"platform":null,"plannedPlatform":null,"prognosisType":null,"direction":"Gehrden","provenance":null,"line":{"type":"line","id":"5-webrbg-500","fahrtNr":"0","name":"Bus 500","public":true,"adminCode":"webRBG","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":null,"destination":{"type":"stop","id":"635831","name":"Schwesternhaus, Gehrden (Hannover)","location":{"type":"location","id":"635831","latitude":52.303394,"longitude":9.601288},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":false,"taxi":false}},"currentTripPosition":{"type":"location","latitude":52.379011,"longitude":9.741403}},{"tripId":"1|201507|0|80|13022024","stop":{"type":"stop","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},"when":"2024-02-13T16:42:00+01:00","plannedWhen":"2024-02-13T16:41:00+01:00","delay":60,"platform":"3","plannedPlatform":"3","prognosisType":"prognosed","direction":"München Hbf","provenance":null,"line":{"type":"line","id":"ice-883","fahrtNr":"883","name":"ICE 883","public":true,"adminCode":"80____","productName":"ICE","mode":"train","product":"nationalExpress","operator":{"type":"operator","id":"db-fernverkehr-ag","name":"DB Fernverkehr AG"}},"remarks":[],"origin":null,"destination":{"type":"stop","id":"8000261","name":"München Hbf","location":{"type":"location","id":"8000261","latitude":48.140364,"longitude":11.558744},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":true,"tram":true,"taxi":false}},"currentTripPosition":{"type":"location","latitude":52.377105,"longitude":9.74179},"loadFactor":"high"},{"tripId":"1|853658|10|80|13022024","stop":{"type":"stop","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},"when":"2024-02-13T16:41:00+01:00","plannedWhen":"2024-02-13T16:41:00+01:00","delay":0,"platform":"14 A-C","plannedPlatform":"14 A-C","prognosisType":"prognosed","direction":"Celle","provenance":null,"line":{"type":"line","id":"4-tdhs-6","fahrtNr":"34622","name":"S 6","public":true,"adminCode":"TDHS__","productName":"S","mode":"train","product":"suburban","operator":{"type":"operator","id":"s-bahn-hannover-transdev","name":"S-Bahn Hannover (Transdev)"}},"remarks":[],"origin":null,"destination":{"type":"stop","id":"8000064","name":"Celle","location":{"type":"location","id":"8000064","latitude":52.621019,"longitude":10.062651},"products":{"nationalExpress":true,"national":true,"regionalExpress":false,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":false,"taxi":true}}},{"tripId":"1|1213193|59|80|13022024","stop":{"type":"stop","id":"628410","name":"Hauptbahnhof/ZOB, Hannover","location":{"type":"location","id":"628410","latitude":52.379811,"longitude":9.742779},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:47:00+01:00","plannedWhen":"2024-02-13T16:41:00+01:00","delay":360,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":"Haltenhoffstraße","provenance":null,"line":{"type":"line","id":"5-webueb-121","fahrtNr":"0","name":"Bus 121","public":true,"adminCode":"webUEB","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":null,"destination":{"type":"station","id":"614127","name":"Haltenhoffstraße, Hannover","location":{"type":"location","id":"614127","latitude":52.392774,"longitude":9.713375},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},"currentTripPosition":{"type":"location","latitude":52.370678,"longitude":9.752442}},{"tripId":"1|1214156|30|80|13022024","stop":{"type":"stop","id":"612467","name":"Hauptbahnhof/Ernst-August-Platz, Hannover","location":{"type":"location","id":"612467","latitude":52.375739,"longitude":9.741215},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:46:00+01:00","plannedWhen":"2024-02-13T16:41:00+01:00","delay":300,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":"Nordring, Hannover","provenance":null,"line":{"type":"line","id":"5-webueb-128","fahrtNr":"0","name":"Bus 128","public":true,"adminCode":"webUEB","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":null,"destination":{"type":"stop","id":"616113","name":"Nordring, Hannover","location":{"type":"location","id":"616113","latitude":52.403345,"longitude":9.748064},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":false,"taxi":false},"station":{"type":"station","id":"636228","name":"Nordring, Hannover","location":{"type":"location","id":"636228","latitude":52.403237,"longitude":9.748091},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":false,"taxi":false}}},"currentTripPosition":{"type":"location","latitude":52.377222,"longitude":9.75548}},{"tripId":"1|1228165|8|80|13022024","stop":{"type":"stop","id":"360021","name":"Hauptbahnhof/Rosenstraße, Hannover","location":{"type":"location","id":"360021","latitude":52.376944,"longitude":9.737853},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:41:00+01:00","plannedWhen":"2024-02-13T16:41:00+01:00","delay":null,"platform":null,"plannedPlatform":null,"prognosisType":null,"direction":"Wasserstadt Limmer, Hannover","provenance":null,"line":{"type":"line","id":"5-webrbg-170","fahrtNr":"0","name":"Bus 170","public":true,"adminCode":"webRBG","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":null,"destination":{"type":"stop","id":"200525","name":"Wasserstadt Limmer, Hannover","location":{"type":"location","id":"200525","latitude":52.381187,"longitude":9.679872},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":false,"taxi":false}},"currentTripPosition":{"type":"location","latitude":52.377447,"longitude":9.738716}},{"tripId":"1|1229021|4|80|13022024","stop":{"type":"stop","id":"360021","name":"Hauptbahnhof/Rosenstraße, Hannover","location":{"type":"location","id":"360021","latitude":52.376944,"longitude":9.737853},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:41:00+01:00","plannedWhen":"2024-02-13T16:41:00+01:00","delay":null,"platform":null,"plannedPlatform":null,"prognosisType":null,"direction":"Pattensen ZOB","provenance":null,"line":{"type":"line","id":"5-webrbg-300","fahrtNr":"0","name":"Bus 300","public":true,"adminCode":"webRBG","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":null,"destination":{"type":"stop","id":"638743","name":"ZOB, Pattensen","location":{"type":"location","id":"638743","latitude":52.263068,"longitude":9.764811},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":false,"taxi":false}},"currentTripPosition":{"type":"location","latitude":52.377447,"longitude":9.738716}},{"tripId":"1|1211616|9|80|13022024","stop":{"type":"stop","id":"638427","name":"Hauptbahnhof (U), Hannover","location":{"type":"location","id":"638427","latitude":52.378328,"longitude":9.742563},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:47:00+01:00","plannedWhen":"2024-02-13T16:42:00+01:00","delay":300,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":"Messe/Nord","provenance":null,"line":{"type":"line","id":"8-webuet-8","fahrtNr":"0","name":"STR 8","public":true,"adminCode":"webUET","productName":"STR","mode":"train","product":"tram","operator":{"type":"operator","id":"ustra-hannoversche-verkehrsbetriebe-ag","name":"üstra Hannoversche Verkehrsbetriebe AG"}},"remarks":[],"origin":null,"destination":{"type":"station","id":"636229","name":"Messe/Nord, Hannover","location":{"type":"location","id":"636229","latitude":52.327719,"longitude":9.804472},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":false,"ferry":false,"subway":false,"tram":true,"taxi":false}}},{"tripId":"1|1214184|31|80|13022024","stop":{"type":"stop","id":"626517","name":"Hauptbahnhof/Ernst-August-Platz, Hannover","location":{"type":"location","id":"626517","latitude":52.375694,"longitude":9.741358},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:45:00+01:00","plannedWhen":"2024-02-13T16:42:00+01:00","delay":180,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":"Peiner Straße","provenance":null,"line":{"type":"line","id":"5-webueb-134","fahrtNr":"0","name":"Bus 134","public":true,"adminCode":"webUEB","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":null,"destination":{"type":"stop","id":"615757","name":"Peiner Straße, Hannover","location":{"type":"location","id":"615757","latitude":52.337778,"longitude":9.769252},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"638538","name":"Peiner Straße, Hannover","location":{"type":"location","id":"638538","latitude":52.337769,"longitude":9.769018},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"currentTripPosition":{"type":"location","latitude":52.378795,"longitude":9.733259}},{"tripId":"1|1228790|3|80|13022024","stop":{"type":"stop","id":"360021","name":"Hauptbahnhof/Rosenstraße, Hannover","location":{"type":"location","id":"360021","latitude":52.376944,"longitude":9.737853},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:42:00+01:00","plannedWhen":"2024-02-13T16:42:00+01:00","delay":null,"platform":null,"plannedPlatform":null,"prognosisType":null,"direction":"Gehrden","provenance":null,"line":{"type":"line","id":"5-webrbg-500","fahrtNr":"0","name":"Bus 500","public":true,"adminCode":"webRBG","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":null,"destination":{"type":"stop","id":"635831","name":"Schwesternhaus, Gehrden (Hannover)","location":{"type":"location","id":"635831","latitude":52.303394,"longitude":9.601288},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":false,"taxi":false}},"currentTripPosition":{"type":"location","latitude":52.379011,"longitude":9.741403}},{"tripId":"1|1414841|0|80|13022024","stop":{"type":"stop","id":"638429","name":"Hauptbahnhof (U), Hannover","location":{"type":"location","id":"638429","latitude":52.378274,"longitude":9.742743},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:46:00+01:00","plannedWhen":"2024-02-13T16:42:00+01:00","delay":240,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":"Hemmingen (Hannover)","provenance":null,"line":{"type":"line","id":"8-webuet-13","fahrtNr":"1394","name":"STR 13","public":true,"adminCode":"webUET","productName":"STR","mode":"train","product":"tram","operator":{"type":"operator","id":"ustra-hannoversche-verkehrsbetriebe-ag","name":"üstra Hannoversche Verkehrsbetriebe AG"}},"remarks":[],"origin":null,"destination":{"type":"stop","id":"105323","name":"Hemmingen (Hannover)","location":{"type":"location","id":"105323","latitude":52.316635,"longitude":9.729672},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},"currentTripPosition":{"type":"location","latitude":52.394742,"longitude":9.76215}},{"tripId":"1|1211856|23|80|13022024","stop":{"type":"stop","id":"638428","name":"Hauptbahnhof (U), Hannover","location":{"type":"location","id":"638428","latitude":52.378382,"longitude":9.743201},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:43:00+01:00","plannedWhen":"2024-02-13T16:43:00+01:00","delay":0,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":"Alte Heide","provenance":null,"line":{"type":"line","id":"8-webuet-2","fahrtNr":"0","name":"STR 2","public":true,"adminCode":"webUET","productName":"STR","mode":"train","product":"tram","operator":{"type":"operator","id":"ustra-hannoversche-verkehrsbetriebe-ag","name":"üstra Hannoversche Verkehrsbetriebe AG"}},"remarks":[],"origin":null,"destination":{"type":"stop","id":"617053","name":"Alte Heide, Hannover","location":{"type":"location","id":"617053","latitude":52.415426,"longitude":9.781001},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"638358","name":"Alte Heide, Hannover","location":{"type":"location","id":"638358","latitude":52.415768,"longitude":9.780857},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"currentTripPosition":{"type":"location","latitude":52.371973,"longitude":9.740774}},{"tripId":"1|1211963|43|80|13022024","stop":{"type":"stop","id":"360021","name":"Hauptbahnhof/Rosenstraße, Hannover","location":{"type":"location","id":"360021","latitude":52.376944,"longitude":9.737853},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:44:00+01:00","plannedWhen":"2024-02-13T16:43:00+01:00","delay":60,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":"Hauptbahnhof/ZOB, Hannover","provenance":null,"line":{"type":"line","id":"8-webuet-10","fahrtNr":"0","name":"STR 10","public":true,"adminCode":"webUET","productName":"STR","mode":"train","product":"tram","operator":{"type":"operator","id":"ustra-hannoversche-verkehrsbetriebe-ag","name":"üstra Hannoversche Verkehrsbetriebe AG"}},"remarks":[],"origin":null,"destination":{"type":"stop","id":"628410","name":"Hauptbahnhof/ZOB, Hannover","location":{"type":"location","id":"628410","latitude":52.379811,"longitude":9.742779},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"currentTripPosition":{"type":"location","latitude":52.374067,"longitude":9.726994}},{"tripId":"1|1214156|30|80|13022024","stop":{"type":"stop","id":"360021","name":"Hauptbahnhof/Rosenstraße, Hannover","location":{"type":"location","id":"360021","latitude":52.376944,"longitude":9.737853},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:48:00+01:00","plannedWhen":"2024-02-13T16:43:00+01:00","delay":300,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":"Nordring, Hannover","provenance":null,"line":{"type":"line","id":"5-webueb-128","fahrtNr":"0","name":"Bus 128","public":true,"adminCode":"webUEB","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":null,"destination":{"type":"stop","id":"616113","name":"Nordring, Hannover","location":{"type":"location","id":"616113","latitude":52.403345,"longitude":9.748064},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":false,"taxi":false},"station":{"type":"station","id":"636228","name":"Nordring, Hannover","location":{"type":"location","id":"636228","latitude":52.403237,"longitude":9.748091},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":false,"taxi":false}}},"currentTripPosition":{"type":"location","latitude":52.377222,"longitude":9.75548}},{"tripId":"1|1227891|0|80|13022024","stop":{"type":"stop","id":"628410","name":"Hauptbahnhof/ZOB, Hannover","location":{"type":"location","id":"628410","latitude":52.379811,"longitude":9.742779},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:43:00+01:00","plannedWhen":"2024-02-13T16:43:00+01:00","delay":null,"platform":null,"plannedPlatform":null,"prognosisType":null,"direction":"Lohnde","provenance":null,"line":{"type":"line","id":"5-webrbg-700","fahrtNr":"0","name":"Bus 700","public":true,"adminCode":"webRBG","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":null,"destination":{"type":"stop","id":"637006","name":"Lohnde Lohnder Straße, Seelze","location":{"type":"location","id":"637006","latitude":52.402392,"longitude":9.55903},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":false,"taxi":false}}},{"tripId":"1|1245163|62|80|13022024","stop":{"type":"stop","id":"638430","name":"Hauptbahnhof (U), Hannover","location":{"type":"location","id":"638430","latitude":52.378436,"longitude":9.74303},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:44:00+01:00","plannedWhen":"2024-02-13T16:43:00+01:00","delay":60,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":"Altwarmbüchen, Isernhagen","provenance":null,"line":{"type":"line","id":"8-webuet-3","fahrtNr":"63","name":"STR 3","public":true,"adminCode":"webUET","productName":"STR","mode":"train","product":"tram","operator":{"type":"operator","id":"ustra-hannoversche-verkehrsbetriebe-ag","name":"üstra Hannoversche Verkehrsbetriebe AG"}},"remarks":[],"origin":null,"destination":{"type":"stop","id":"617153","name":"Altwarmbüchen, Isernhagen","location":{"type":"location","id":"617153","latitude":52.43763,"longitude":9.847422},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":true},"station":{"type":"station","id":"636293","name":"Altwarmbüchen, Isernhagen","location":{"type":"location","id":"636293","latitude":52.43763,"longitude":9.847395},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":true}}},"currentTripPosition":{"type":"location","latitude":52.369752,"longitude":9.733709}},{"tripId":"1|1211695|31|80|13022024","stop":{"type":"stop","id":"360021","name":"Hauptbahnhof/Rosenstraße, Hannover","location":{"type":"location","id":"360021","latitude":52.376944,"longitude":9.737853},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:47:00+01:00","plannedWhen":"2024-02-13T16:44:00+01:00","delay":180,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":"Hauptbahnhof/ZOB, Hannover","provenance":null,"line":{"type":"line","id":"8-webuet-17","fahrtNr":"0","name":"STR 17","public":true,"adminCode":"webUET","productName":"STR","mode":"train","product":"tram","operator":{"type":"operator","id":"ustra-hannoversche-verkehrsbetriebe-ag","name":"üstra Hannoversche Verkehrsbetriebe AG"}},"remarks":[],"origin":null,"destination":{"type":"stop","id":"628410","name":"Hauptbahnhof/ZOB, Hannover","location":{"type":"location","id":"628410","latitude":52.379811,"longitude":9.742779},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"currentTripPosition":{"type":"location","latitude":52.369456,"longitude":9.722697}},{"tripId":"1|1211967|43|80|13022024","stop":{"type":"stop","id":"628410","name":"Hauptbahnhof/ZOB, Hannover","location":{"type":"location","id":"628410","latitude":52.379811,"longitude":9.742779},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:44:00+01:00","plannedWhen":"2024-02-13T16:44:00+01:00","delay":0,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":"Ahlem","provenance":null,"line":{"type":"line","id":"8-webuet-10","fahrtNr":"0","name":"STR 10","public":true,"adminCode":"webUET","productName":"STR","mode":"train","product":"tram","operator":{"type":"operator","id":"ustra-hannoversche-verkehrsbetriebe-ag","name":"üstra Hannoversche Verkehrsbetriebe AG"}},"remarks":[],"origin":null,"destination":{"type":"stop","id":"638198","name":"Ahlem, Hannover","location":{"type":"location","id":"638198","latitude":52.377141,"longitude":9.664573},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"614111","name":"Ahlem, Hannover","location":{"type":"location","id":"614111","latitude":52.377285,"longitude":9.663817},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}}},{"tripId":"1|1228079|4|80|13022024","stop":{"type":"stop","id":"360021","name":"Hauptbahnhof/Rosenstraße, Hannover","location":{"type":"location","id":"360021","latitude":52.376944,"longitude":9.737853},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:44:00+01:00","plannedWhen":"2024-02-13T16:44:00+01:00","delay":null,"platform":null,"plannedPlatform":null,"prognosisType":null,"direction":"Hauptbahnhof/ZOB, Hannover","provenance":null,"line":{"type":"line","id":"5-webrbg-700","fahrtNr":"0","name":"Bus 700","public":true,"adminCode":"webRBG","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":null,"destination":{"type":"stop","id":"628410","name":"Hauptbahnhof/ZOB, Hannover","location":{"type":"location","id":"628410","latitude":52.379811,"longitude":9.742779},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"currentTripPosition":{"type":"location","latitude":52.373096,"longitude":9.725825}},{"tripId":"1|1228969|0|80|13022024","stop":{"type":"stop","id":"360021","name":"Hauptbahnhof/Rosenstraße, Hannover","location":{"type":"location","id":"360021","latitude":52.376944,"longitude":9.737853},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:44:00+01:00","plannedWhen":"2024-02-13T16:44:00+01:00","delay":null,"platform":null,"plannedPlatform":null,"prognosisType":null,"direction":"Dragonerstraße, Hannover","provenance":null,"line":{"type":"line","id":"5-webrbg-300","fahrtNr":"0","name":"Bus 300","public":true,"adminCode":"webRBG","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":null,"destination":{"type":"stop","id":"970361","name":"Dragonerstraße, Hannover","location":{"type":"location","id":"970361","latitude":52.394509,"longitude":9.737115},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"638399","name":"Dragonerstraße, Hannover","location":{"type":"location","id":"638399","latitude":52.394176,"longitude":9.735309},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"currentTripPosition":{"type":"location","latitude":52.373096,"longitude":9.725825}},{"tripId":"1|1211967|43|80|13022024","stop":{"type":"stop","id":"360021","name":"Hauptbahnhof/Rosenstraße, Hannover","location":{"type":"location","id":"360021","latitude":52.376944,"longitude":9.737853},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:46:00+01:00","plannedWhen":"2024-02-13T16:45:00+01:00","delay":60,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":"Ahlem","provenance":null,"line":{"type":"line","id":"8-webuet-10","fahrtNr":"0","name":"STR 10","public":true,"adminCode":"webUET","productName":"STR","mode":"train","product":"tram","operator":{"type":"operator","id":"ustra-hannoversche-verkehrsbetriebe-ag","name":"üstra Hannoversche Verkehrsbetriebe AG"}},"remarks":[],"origin":null,"destination":{"type":"stop","id":"638198","name":"Ahlem, Hannover","location":{"type":"location","id":"638198","latitude":52.377141,"longitude":9.664573},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"614111","name":"Ahlem, Hannover","location":{"type":"location","id":"614111","latitude":52.377285,"longitude":9.663817},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}}},{"tripId":"1|1212030|31|80|13022024","stop":{"type":"stop","id":"638427","name":"Hauptbahnhof (U), Hannover","location":{"type":"location","id":"638427","latitude":52.378328,"longitude":9.742563},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:45:00+01:00","plannedWhen":"2024-02-13T16:45:00+01:00","delay":null,"platform":null,"plannedPlatform":null,"prognosisType":null,"direction":"Sarstedt","provenance":null,"line":{"type":"line","id":"8-webuet-1","fahrtNr":"0","name":"STR 1","public":true,"adminCode":"webUET","productName":"STR","mode":"train","product":"tram","operator":{"type":"operator","id":"ustra-hannoversche-verkehrsbetriebe-ag","name":"üstra Hannoversche Verkehrsbetriebe AG"}},"remarks":[],"origin":null,"destination":{"type":"stop","id":"638767","name":"Sarstedt (Endpunkt GVH)","location":{"type":"location","id":"638767","latitude":52.23593,"longitude":9.858101},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":true},"station":{"type":"station","id":"638766","name":"Sarstedt (Endpunkt GVH)","location":{"type":"location","id":"638766","latitude":52.236092,"longitude":9.858353},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":true}}},"currentTripPosition":{"type":"location","latitude":52.39227,"longitude":9.734922}},{"tripId":"1|1227891|0|80|13022024","stop":{"type":"stop","id":"360021","name":"Hauptbahnhof/Rosenstraße, Hannover","location":{"type":"location","id":"360021","latitude":52.376944,"longitude":9.737853},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:45:00+01:00","plannedWhen":"2024-02-13T16:45:00+01:00","delay":null,"platform":null,"plannedPlatform":null,"prognosisType":null,"direction":"Lohnde","provenance":null,"line":{"type":"line","id":"5-webrbg-700","fahrtNr":"0","name":"Bus 700","public":true,"adminCode":"webRBG","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":null,"destination":{"type":"stop","id":"637006","name":"Lohnde Lohnder Straße, Seelze","location":{"type":"location","id":"637006","latitude":52.402392,"longitude":9.55903},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":false,"taxi":false}}},{"tripId":"1|1280448|62|80|13022024","stop":{"type":"stop","id":"638429","name":"Hauptbahnhof (U), Hannover","location":{"type":"location","id":"638429","latitude":52.378274,"longitude":9.742743},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:47:00+01:00","plannedWhen":"2024-02-13T16:45:00+01:00","delay":120,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":"Wettbergen","provenance":null,"line":{"type":"line","id":"8-webuet-7","fahrtNr":"871","name":"STR 7","public":true,"adminCode":"webUET","productName":"STR","mode":"train","product":"tram","operator":{"type":"operator","id":"ustra-hannoversche-verkehrsbetriebe-ag","name":"üstra Hannoversche Verkehrsbetriebe AG"}},"remarks":[],"origin":null,"destination":{"type":"station","id":"638601","name":"Wettbergen, Hannover","location":{"type":"location","id":"638601","latitude":52.332861,"longitude":9.690659},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},"currentTripPosition":{"type":"location","latitude":52.396315,"longitude":9.766852}},{"tripId":"1|1416899|0|80|13022024","stop":{"type":"stop","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},"when":"2024-02-13T16:47:00+01:00","plannedWhen":"2024-02-13T16:45:00+01:00","delay":120,"platform":"12","plannedPlatform":"11","prognosisType":"prognosed","direction":"Norddeich Mole","provenance":null,"line":{"type":"line","id":"ic-2036","fahrtNr":"2036","name":"IC 2036","public":true,"adminCode":"80____","productName":"IC","mode":"train","product":"national","operator":{"type":"operator","id":"db-fernverkehr-ag","name":"DB Fernverkehr AG"}},"remarks":[],"origin":null,"destination":{"type":"stop","id":"8007768","name":"Norddeich Mole","location":{"type":"location","id":"8007768","latitude":53.62426,"longitude":7.15874},"products":{"nationalExpress":true,"national":true,"regionalExpress":false,"regional":true,"suburban":false,"bus":true,"ferry":true,"subway":false,"tram":false,"taxi":false}},"currentTripPosition":{"type":"location","latitude":52.370489,"longitude":9.878552},"loadFactor":"high"},{"tripId":"1|1211962|10|80|13022024","stop":{"type":"stop","id":"638428","name":"Hauptbahnhof (U), Hannover","location":{"type":"location","id":"638428","latitude":52.378382,"longitude":9.743201},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:47:00+01:00","plannedWhen":"2024-02-13T16:46:00+01:00","delay":60,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":"Dragonerstraße, Hannover","provenance":null,"line":{"type":"line","id":"8-webuet-8","fahrtNr":"0","name":"STR 8","public":true,"adminCode":"webUET","productName":"STR","mode":"train","product":"tram","operator":{"type":"operator","id":"ustra-hannoversche-verkehrsbetriebe-ag","name":"üstra Hannoversche Verkehrsbetriebe AG"}},"remarks":[],"origin":null,"destination":{"type":"stop","id":"615744","name":"Dragonerstraße, Hannover","location":{"type":"location","id":"615744","latitude":52.39423,"longitude":9.735372},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"638399","name":"Dragonerstraße, Hannover","location":{"type":"location","id":"638399","latitude":52.394176,"longitude":9.735309},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"currentTripPosition":{"type":"location","latitude":52.358093,"longitude":9.752109}},{"tripId":"1|1213774|3|80|13022024","stop":{"type":"stop","id":"628410","name":"Hauptbahnhof/ZOB, Hannover","location":{"type":"location","id":"628410","latitude":52.379811,"longitude":9.742779},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:49:00+01:00","plannedWhen":"2024-02-13T16:46:00+01:00","delay":180,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":"Altenbekener Damm","provenance":null,"line":{"type":"line","id":"5-webueb-121","fahrtNr":"0","name":"Bus 121","public":true,"adminCode":"webUEB","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":null,"destination":{"type":"stop","id":"614048","name":"Altenbekener Damm, Hannover","location":{"type":"location","id":"614048","latitude":52.355684,"longitude":9.754582},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"638364","name":"Altenbekener Damm, Hannover","location":{"type":"location","id":"638364","latitude":52.354174,"longitude":9.754932},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"currentTripPosition":{"type":"location","latitude":52.39183,"longitude":9.747435}},{"tripId":"1|1415605|0|80|13022024","stop":{"type":"stop","id":"638430","name":"Hauptbahnhof (U), Hannover","location":{"type":"location","id":"638430","latitude":52.378436,"longitude":9.74303},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:46:00+01:00","plannedWhen":"2024-02-13T16:46:00+01:00","delay":0,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":"Fasanenkrug","provenance":null,"line":{"type":"line","id":"8-webuet-13","fahrtNr":"1238","name":"STR 13","public":true,"adminCode":"webUET","productName":"STR","mode":"train","product":"tram","operator":{"type":"operator","id":"ustra-hannoversche-verkehrsbetriebe-ag","name":"üstra Hannoversche Verkehrsbetriebe AG"}},"remarks":[],"origin":null,"destination":{"type":"stop","id":"638403","name":"Fasanenkrug, Hannover","location":{"type":"location","id":"638403","latitude":52.431598,"longitude":9.801074},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"614136","name":"Fasanenkrug, Hannover","location":{"type":"location","id":"614136","latitude":52.43149,"longitude":9.801074},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"currentTripPosition":{"type":"location","latitude":52.361383,"longitude":9.722077}},{"tripId":"1|237622|0|80|13022024","stop":{"type":"stop","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},"when":"2024-02-13T16:47:00+01:00","plannedWhen":"2024-02-13T16:47:00+01:00","delay":0,"platform":"14 D-F","plannedPlatform":"14 D-F","prognosisType":"prognosed","direction":"Wolfsburg Hbf","provenance":null,"line":{"type":"line","id":"eno-re30","fahrtNr":"83525","name":"ENO RE30","public":true,"adminCode":"R0____","productName":"ENO","mode":"train","product":"regional","operator":{"type":"operator","id":"enno","name":"enno"},"additionalName":"ENO RE30"},"remarks":[],"origin":null,"destination":{"type":"stop","id":"8006552","name":"Wolfsburg Hbf","location":{"type":"location","id":"8006552","latitude":52.429495,"longitude":10.787757},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":false,"taxi":true}}},{"tripId":"1|1211647|62|80|13022024","stop":{"type":"stop","id":"638429","name":"Hauptbahnhof (U), Hannover","location":{"type":"location","id":"638429","latitude":52.378274,"longitude":9.742743},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:47:00+01:00","plannedWhen":"2024-02-13T16:47:00+01:00","delay":0,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":"Empelde","provenance":null,"line":{"type":"line","id":"8-webuet-9","fahrtNr":"0","name":"STR 9","public":true,"adminCode":"webUET","productName":"STR","mode":"train","product":"tram","operator":{"type":"operator","id":"ustra-hannoversche-verkehrsbetriebe-ag","name":"üstra Hannoversche Verkehrsbetriebe AG"}},"remarks":[],"origin":null,"destination":{"type":"stop","id":"638321","name":"Empelde (Bus/Tram), Ronnenberg","location":{"type":"location","id":"638321","latitude":52.344313,"longitude":9.667242},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"614114","name":"Empelde (Stadtbahn), Ronnenberg","location":{"type":"location","id":"614114","latitude":52.344313,"longitude":9.667242},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}}},{"tripId":"1|1228599|5|80|13022024","stop":{"type":"stop","id":"612467","name":"Hauptbahnhof/Ernst-August-Platz, Hannover","location":{"type":"location","id":"612467","latitude":52.375739,"longitude":9.741215},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:47:00+01:00","plannedWhen":"2024-02-13T16:47:00+01:00","delay":null,"platform":null,"plannedPlatform":null,"prognosisType":null,"direction":"Hauptbahnhof/ZOB, Hannover","provenance":null,"line":{"type":"line","id":"5-webrbg-900","fahrtNr":"0","name":"Bus 900","public":true,"adminCode":"webRBG","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":null,"destination":{"type":"stop","id":"628410","name":"Hauptbahnhof/ZOB, Hannover","location":{"type":"location","id":"628410","latitude":52.379811,"longitude":9.742779},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"currentTripPosition":{"type":"location","latitude":52.379775,"longitude":9.760856}},{"tripId":"1|329824|8|80|13022024","stop":{"type":"stop","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},"when":"2024-02-13T16:48:00+01:00","plannedWhen":"2024-02-13T16:48:00+01:00","delay":null,"platform":"3","plannedPlatform":"8 A-C","prognosisType":"prognosed","direction":"Bad Harzburg","provenance":null,"line":{"type":"line","id":"erx-re10","fahrtNr":"83475","name":"erx RE10","public":true,"adminCode":"X2____","productName":"erx","mode":"train","product":"regional","operator":{"type":"operator","id":"erixx","name":"erixx"},"additionalName":"erx RE10"},"remarks":[],"origin":null,"destination":{"type":"stop","id":"8000019","name":"Bad Harzburg","location":{"type":"location","id":"8000019","latitude":51.888101,"longitude":10.55463},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":true,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":false,"taxi":true}}},{"tripId":"1|1213774|3|80|13022024","stop":{"type":"stop","id":"626517","name":"Hauptbahnhof/Ernst-August-Platz, Hannover","location":{"type":"location","id":"626517","latitude":52.375694,"longitude":9.741358},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:51:00+01:00","plannedWhen":"2024-02-13T16:48:00+01:00","delay":180,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":"Altenbekener Damm","provenance":null,"line":{"type":"line","id":"5-webueb-121","fahrtNr":"0","name":"Bus 121","public":true,"adminCode":"webUEB","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":null,"destination":{"type":"stop","id":"614048","name":"Altenbekener Damm, Hannover","location":{"type":"location","id":"614048","latitude":52.355684,"longitude":9.754582},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"638364","name":"Altenbekener Damm, Hannover","location":{"type":"location","id":"638364","latitude":52.354174,"longitude":9.754932},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"currentTripPosition":{"type":"location","latitude":52.39183,"longitude":9.747435}},{"tripId":"1|1227480|3|80|13022024","stop":{"type":"stop","id":"628410","name":"Hauptbahnhof/ZOB, Hannover","location":{"type":"location","id":"628410","latitude":52.379811,"longitude":9.742779},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:48:00+01:00","plannedWhen":"2024-02-13T16:48:00+01:00","delay":null,"platform":null,"plannedPlatform":null,"prognosisType":null,"direction":"Burgdorf Bf","provenance":null,"line":{"type":"line","id":"5-webrbg-900","fahrtNr":"0","name":"Bus 900","public":true,"adminCode":"webRBG","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":null,"destination":{"type":"stop","id":"638288","name":"Bahnhof, Burgdorf (Hannover)","location":{"type":"location","id":"638288","latitude":52.449496,"longitude":10.003709},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":false,"taxi":false},"station":{"type":"station","id":"8001279","name":"Burgdorf","location":{"type":"location","id":"8001279","latitude":52.449046,"longitude":10.00307},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":false,"taxi":false}}}},{"tripId":"1|1228969|0|80|13022024","stop":{"type":"stop","id":"628410","name":"Hauptbahnhof/ZOB, Hannover","location":{"type":"location","id":"628410","latitude":52.379811,"longitude":9.742779},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:48:00+01:00","plannedWhen":"2024-02-13T16:48:00+01:00","delay":null,"platform":null,"plannedPlatform":null,"prognosisType":null,"direction":"Dragonerstraße, Hannover","provenance":null,"line":{"type":"line","id":"5-webrbg-300","fahrtNr":"0","name":"Bus 300","public":true,"adminCode":"webRBG","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":null,"destination":{"type":"stop","id":"970361","name":"Dragonerstraße, Hannover","location":{"type":"location","id":"970361","latitude":52.394509,"longitude":9.737115},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"638399","name":"Dragonerstraße, Hannover","location":{"type":"location","id":"638399","latitude":52.394176,"longitude":9.735309},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"currentTripPosition":{"type":"location","latitude":52.373096,"longitude":9.725825}},{"tripId":"1|1211687|31|80|13022024","stop":{"type":"stop","id":"638428","name":"Hauptbahnhof (U), Hannover","location":{"type":"location","id":"638428","latitude":52.378382,"longitude":9.743201},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:50:00+01:00","plannedWhen":"2024-02-13T16:49:00+01:00","delay":60,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":"Langenhagen","provenance":null,"line":{"type":"line","id":"8-webuet-1","fahrtNr":"0","name":"STR 1","public":true,"adminCode":"webUET","productName":"STR","mode":"train","product":"tram","operator":{"type":"operator","id":"ustra-hannoversche-verkehrsbetriebe-ag","name":"üstra Hannoversche Verkehrsbetriebe AG"}},"remarks":[],"origin":null,"destination":{"type":"stop","id":"616282","name":"Langenhagen (Hannover) (GVH)","location":{"type":"location","id":"616282","latitude":52.436884,"longitude":9.753997},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"614052","name":"Langenhagen (Hannover) (GVH)","location":{"type":"location","id":"614052","latitude":52.436569,"longitude":9.753898},"products":{"nationalExpress":false,"national":false,"regionalExpress":false,"regional":false,"suburban":false,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"currentTripPosition":{"type":"location","latitude":52.343764,"longitude":9.763616}}],"realtimeDataUpdatedAt":1707838756} +const arrivals : Arrivals = +{"arrivals":[{"tripId":"1|198057|0|80|13022024","stop":{"type":"stop","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},"when":"2024-02-13T17:03:00+01:00","plannedWhen":"2024-02-13T16:20:00+01:00","delay":2580,"platform":"4","plannedPlatform":"10","prognosisType":"prognosed","direction":null,"provenance":"Tübingen Hbf","line":{"type":"line","id":"ic-2047","fahrtNr":"2047","name":"IC 2047","public":true,"adminCode":"80____","productName":"IC","mode":"train","product":"national","operator":{"type":"operator","id":"db-fernverkehr-ag","name":"DB Fernverkehr AG"}},"remarks":[],"origin":null,"destination":null,"currentTripPosition":{"type":"location","latitude":52.27693,"longitude":9.06608}},{"tripId":"1|1416899|0|80|13022024","stop":{"type":"stop","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},"when":"2024-02-13T16:45:00+01:00","plannedWhen":"2024-02-13T16:23:00+01:00","delay":1320,"platform":"12","plannedPlatform":"11","prognosisType":"prognosed","direction":null,"provenance":"Leipzig Hbf","line":{"type":"line","id":"ic-2036","fahrtNr":"2036","name":"IC 2036","public":true,"adminCode":"80____","productName":"IC","mode":"train","product":"national","operator":{"type":"operator","id":"db-fernverkehr-ag","name":"DB Fernverkehr AG"}},"remarks":[],"origin":null,"destination":null,"currentTripPosition":{"type":"location","latitude":52.370489,"longitude":9.878552}},{"tripId":"1|201789|0|80|13022024","stop":{"type":"stop","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},"when":"2024-02-13T16:44:00+01:00","plannedWhen":"2024-02-13T16:28:00+01:00","delay":960,"platform":"10","plannedPlatform":"9","prognosisType":"prognosed","direction":null,"provenance":"Düsseldorf Hbf","line":{"type":"line","id":"ice-941","fahrtNr":"941","name":"ICE 941","public":true,"adminCode":"80____","productName":"ICE","mode":"train","product":"nationalExpress","operator":{"type":"operator","id":"db-fernverkehr-ag","name":"DB Fernverkehr AG"}},"remarks":[],"origin":null,"destination":null,"currentTripPosition":{"type":"location","latitude":52.395057,"longitude":9.652248}},{"tripId":"1|201867|0|80|13022024","stop":{"type":"stop","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},"when":"2024-02-13T16:44:00+01:00","plannedWhen":"2024-02-13T16:28:00+01:00","delay":960,"platform":"10","plannedPlatform":"9","prognosisType":"prognosed","direction":null,"provenance":"Köln Hbf","line":{"type":"line","id":"ice-951","fahrtNr":"951","name":"ICE 951","public":true,"adminCode":"80____","productName":"ICE","mode":"train","product":"nationalExpress","operator":{"type":"operator","id":"db-fernverkehr-ag","name":"DB Fernverkehr AG"}},"remarks":[],"origin":null,"destination":null,"currentTripPosition":{"type":"location","latitude":52.395057,"longitude":9.652248}},{"tripId":"1|1214134|30|80|13022024","stop":{"type":"stop","id":"612467","name":"Hauptbahnhof/Ernst-August-Platz, Hannover","location":{"type":"location","id":"612467","latitude":52.375739,"longitude":9.741215},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:42:00+01:00","plannedWhen":"2024-02-13T16:31:00+01:00","delay":660,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":null,"provenance":"Peiner Straße, Hannover","line":{"type":"line","id":"5-webueb-134","fahrtNr":"0","name":"Bus 134","public":true,"adminCode":"webUEB","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":null,"destination":null,"currentTripPosition":{"type":"location","latitude":52.374948,"longitude":9.743606}},{"tripId":"1|1214134|30|80|13022024","stop":{"type":"stop","id":"360021","name":"Hauptbahnhof/Rosenstraße, Hannover","location":{"type":"location","id":"360021","latitude":52.376944,"longitude":9.737853},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:44:00+01:00","plannedWhen":"2024-02-13T16:33:00+01:00","delay":660,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":null,"provenance":"Peiner Straße, Hannover","line":{"type":"line","id":"5-webueb-134","fahrtNr":"0","name":"Bus 134","public":true,"adminCode":"webUEB","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":null,"destination":null,"currentTripPosition":{"type":"location","latitude":52.374948,"longitude":9.743606}},{"tripId":"1|197189|0|80|13022024","stop":{"type":"stop","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},"when":"2024-02-13T16:52:00+01:00","plannedWhen":"2024-02-13T16:34:00+01:00","delay":1080,"platform":"8","plannedPlatform":"4","prognosisType":"prognosed","direction":null,"provenance":"Frankfurt(Main)Hbf","line":{"type":"line","id":"ice-1578","fahrtNr":"1578","name":"ICE 1578","public":true,"adminCode":"80____","productName":"ICE","mode":"train","product":"nationalExpress","operator":{"type":"operator","id":"db-fernverkehr-ag","name":"DB Fernverkehr AG"}},"remarks":[],"origin":null,"destination":null,"currentTripPosition":{"type":"location","latitude":52.111564,"longitude":9.877311}},{"tripId":"1|199867|0|80|13022024","stop":{"type":"stop","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},"when":"2024-02-13T16:57:00+01:00","plannedWhen":"2024-02-13T16:37:00+01:00","delay":1200,"platform":"10","plannedPlatform":"12","prognosisType":"prognosed","direction":null,"provenance":"Berlin Ostbahnhof","line":{"type":"line","id":"ice-556","fahrtNr":"556","name":"ICE 556","public":true,"adminCode":"80____","productName":"ICE","mode":"train","product":"nationalExpress","operator":{"type":"operator","id":"db-fernverkehr-ag","name":"DB Fernverkehr AG"}},"remarks":[],"origin":null,"destination":null,"currentTripPosition":{"type":"location","latitude":52.456624,"longitude":10.50136}},{"tripId":"1|206311|0|80|13022024","stop":{"type":"stop","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},"when":"2024-02-13T16:41:00+01:00","plannedWhen":"2024-02-13T16:38:00+01:00","delay":180,"platform":"4","plannedPlatform":"9","prognosisType":"prognosed","direction":null,"provenance":"Norddeich Mole","line":{"type":"line","id":"re-1","fahrtNr":"4423","name":"RE 1","public":true,"adminCode":"800295","productName":"RE","mode":"train","product":"regional","operator":{"type":"operator","id":"db-regio-ag-nord","name":"DB Regio AG Nord"},"additionalName":"RE 1"},"remarks":[],"origin":null,"destination":null,"currentTripPosition":{"type":"location","latitude":52.378948,"longitude":9.739093}},{"tripId":"1|853524|5|80|13022024","stop":{"type":"stop","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},"when":"2024-02-13T16:40:00+01:00","plannedWhen":"2024-02-13T16:38:00+01:00","delay":120,"platform":"2","plannedPlatform":"2","prognosisType":"prognosed","direction":null,"provenance":"Hildesheim Hbf","line":{"type":"line","id":"4-tdhs-4","fahrtNr":"34450","name":"S 4","public":true,"adminCode":"TDHS__","productName":"S","mode":"train","product":"suburban","operator":{"type":"operator","id":"s-bahn-hannover-transdev","name":"S-Bahn Hannover (Transdev)"}},"remarks":[],"origin":null,"destination":null,"currentTripPosition":{"type":"location","latitude":52.377474,"longitude":9.742275}},{"tripId":"1|1211847|43|80|13022024","stop":{"type":"stop","id":"628410","name":"Hauptbahnhof/ZOB, Hannover","location":{"type":"location","id":"628410","latitude":52.379811,"longitude":9.742779},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:40:00+01:00","plannedWhen":"2024-02-13T16:38:00+01:00","delay":120,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":null,"provenance":"Ahlem, Hannover","line":{"type":"line","id":"8-webuet-10","fahrtNr":"0","name":"STR 10","public":true,"adminCode":"webUET","productName":"STR","mode":"train","product":"tram","operator":{"type":"operator","id":"ustra-hannoversche-verkehrsbetriebe-ag","name":"üstra Hannoversche Verkehrsbetriebe AG"}},"remarks":[],"origin":null,"destination":null},{"tripId":"1|1213968|29|80|13022024","stop":{"type":"stop","id":"626517","name":"Hauptbahnhof/Ernst-August-Platz, Hannover","location":{"type":"location","id":"626517","latitude":52.375694,"longitude":9.741358},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:43:00+01:00","plannedWhen":"2024-02-13T16:38:00+01:00","delay":300,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":null,"provenance":"Haltenhoffstraße, Hannover","line":{"type":"line","id":"5-webueb-121","fahrtNr":"0","name":"Bus 121","public":true,"adminCode":"webUEB","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":null,"destination":null,"currentTripPosition":{"type":"location","latitude":52.379811,"longitude":9.742779}},{"tripId":"1|1213193|59|80|13022024","stop":{"type":"stop","id":"612467","name":"Hauptbahnhof/Ernst-August-Platz, Hannover","location":{"type":"location","id":"612467","latitude":52.375739,"longitude":9.741215},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:45:00+01:00","plannedWhen":"2024-02-13T16:39:00+01:00","delay":360,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":null,"provenance":"Altenbekener Damm, Hannover","line":{"type":"line","id":"5-webueb-121","fahrtNr":"0","name":"Bus 121","public":true,"adminCode":"webUEB","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":null,"destination":null,"currentTripPosition":{"type":"location","latitude":52.370678,"longitude":9.752442}},{"tripId":"1|1214184|31|80|13022024","stop":{"type":"stop","id":"360021","name":"Hauptbahnhof/Rosenstraße, Hannover","location":{"type":"location","id":"360021","latitude":52.376944,"longitude":9.737853},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:43:00+01:00","plannedWhen":"2024-02-13T16:40:00+01:00","delay":180,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":null,"provenance":"Nordring, Hannover","line":{"type":"line","id":"5-webueb-134","fahrtNr":"0","name":"Bus 134","public":true,"adminCode":"webUEB","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":null,"destination":null,"currentTripPosition":{"type":"location","latitude":52.378795,"longitude":9.733259}},{"tripId":"1|1211626|61|80|13022024","stop":{"type":"stop","id":"638430","name":"Hauptbahnhof (U), Hannover","location":{"type":"location","id":"638430","latitude":52.378436,"longitude":9.74303},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:41:00+01:00","plannedWhen":"2024-02-13T16:41:00+01:00","delay":0,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":null,"provenance":"Empelde (Bus/Tram), Ronnenberg","line":{"type":"line","id":"8-webuet-9","fahrtNr":"0","name":"STR 9","public":true,"adminCode":"webUET","productName":"STR","mode":"train","product":"tram","operator":{"type":"operator","id":"ustra-hannoversche-verkehrsbetriebe-ag","name":"üstra Hannoversche Verkehrsbetriebe AG"}},"remarks":[],"origin":null,"destination":null,"currentTripPosition":{"type":"location","latitude":52.377699,"longitude":9.742239}},{"tripId":"1|1213193|59|80|13022024","stop":{"type":"stop","id":"628410","name":"Hauptbahnhof/ZOB, Hannover","location":{"type":"location","id":"628410","latitude":52.379811,"longitude":9.742779},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:47:00+01:00","plannedWhen":"2024-02-13T16:41:00+01:00","delay":360,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":null,"provenance":"Altenbekener Damm, Hannover","line":{"type":"line","id":"5-webueb-121","fahrtNr":"0","name":"Bus 121","public":true,"adminCode":"webUEB","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":null,"destination":null,"currentTripPosition":{"type":"location","latitude":52.370678,"longitude":9.752442}},{"tripId":"1|1214156|30|80|13022024","stop":{"type":"stop","id":"612467","name":"Hauptbahnhof/Ernst-August-Platz, Hannover","location":{"type":"location","id":"612467","latitude":52.375739,"longitude":9.741215},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:46:00+01:00","plannedWhen":"2024-02-13T16:41:00+01:00","delay":300,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":null,"provenance":"Peiner Straße, Hannover","line":{"type":"line","id":"5-webueb-128","fahrtNr":"0","name":"Bus 128","public":true,"adminCode":"webUEB","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":null,"destination":null,"currentTripPosition":{"type":"location","latitude":52.377222,"longitude":9.75548}},{"tripId":"1|1228165|8|80|13022024","stop":{"type":"stop","id":"360021","name":"Hauptbahnhof/Rosenstraße, Hannover","location":{"type":"location","id":"360021","latitude":52.376944,"longitude":9.737853},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:41:00+01:00","plannedWhen":"2024-02-13T16:41:00+01:00","delay":null,"platform":null,"plannedPlatform":null,"prognosisType":null,"direction":null,"provenance":"Hauptbahnhof/ZOB, Hannover","line":{"type":"line","id":"5-webrbg-170","fahrtNr":"0","name":"Bus 170","public":true,"adminCode":"webRBG","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":{"type":"stop","id":"628410","name":"Hauptbahnhof/ZOB, Hannover","location":{"type":"location","id":"628410","latitude":52.379811,"longitude":9.742779},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"destination":null,"currentTripPosition":{"type":"location","latitude":52.377447,"longitude":9.738716}},{"tripId":"1|1229021|4|80|13022024","stop":{"type":"stop","id":"360021","name":"Hauptbahnhof/Rosenstraße, Hannover","location":{"type":"location","id":"360021","latitude":52.376944,"longitude":9.737853},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:41:00+01:00","plannedWhen":"2024-02-13T16:41:00+01:00","delay":null,"platform":null,"plannedPlatform":null,"prognosisType":null,"direction":null,"provenance":"Dragonerstraße, Hannover","line":{"type":"line","id":"5-webrbg-300","fahrtNr":"0","name":"Bus 300","public":true,"adminCode":"webRBG","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":null,"destination":null,"currentTripPosition":{"type":"location","latitude":52.377447,"longitude":9.738716}},{"tripId":"1|1281851|3|80|13022024","stop":{"type":"stop","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},"when":"2024-02-13T16:48:00+01:00","plannedWhen":"2024-02-13T16:41:00+01:00","delay":420,"platform":"13","plannedPlatform":"13","prognosisType":"prognosed","direction":null,"provenance":"Braunschweig Hbf","line":{"type":"line","id":"wfb-re70","fahrtNr":"95798","name":"WFB RE70","public":true,"adminCode":"W3____","productName":"WFB","mode":"train","product":"regional","operator":{"type":"operator","id":"westfalenbahn","name":"WestfalenBahn"},"additionalName":"WFB RE70"},"remarks":[],"origin":null,"destination":null,"currentTripPosition":{"type":"location","latitude":52.379586,"longitude":9.960533}},{"tripId":"1|1211616|9|80|13022024","stop":{"type":"stop","id":"638427","name":"Hauptbahnhof (U), Hannover","location":{"type":"location","id":"638427","latitude":52.378328,"longitude":9.742563},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:47:00+01:00","plannedWhen":"2024-02-13T16:42:00+01:00","delay":300,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":null,"provenance":"Dragonerstraße, Hannover","line":{"type":"line","id":"8-webuet-8","fahrtNr":"0","name":"STR 8","public":true,"adminCode":"webUET","productName":"STR","mode":"train","product":"tram","operator":{"type":"operator","id":"ustra-hannoversche-verkehrsbetriebe-ag","name":"üstra Hannoversche Verkehrsbetriebe AG"}},"remarks":[],"origin":null,"destination":null},{"tripId":"1|1214184|31|80|13022024","stop":{"type":"stop","id":"626517","name":"Hauptbahnhof/Ernst-August-Platz, Hannover","location":{"type":"location","id":"626517","latitude":52.375694,"longitude":9.741358},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:45:00+01:00","plannedWhen":"2024-02-13T16:42:00+01:00","delay":180,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":null,"provenance":"Nordring, Hannover","line":{"type":"line","id":"5-webueb-134","fahrtNr":"0","name":"Bus 134","public":true,"adminCode":"webUEB","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":null,"destination":null,"currentTripPosition":{"type":"location","latitude":52.378795,"longitude":9.733259}},{"tripId":"1|1228790|3|80|13022024","stop":{"type":"stop","id":"360021","name":"Hauptbahnhof/Rosenstraße, Hannover","location":{"type":"location","id":"360021","latitude":52.376944,"longitude":9.737853},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:42:00+01:00","plannedWhen":"2024-02-13T16:42:00+01:00","delay":null,"platform":null,"plannedPlatform":null,"prognosisType":null,"direction":null,"provenance":"Hauptbahnhof/ZOB, Hannover","line":{"type":"line","id":"5-webrbg-500","fahrtNr":"0","name":"Bus 500","public":true,"adminCode":"webRBG","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":{"type":"stop","id":"628410","name":"Hauptbahnhof/ZOB, Hannover","location":{"type":"location","id":"628410","latitude":52.379811,"longitude":9.742779},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"destination":null,"currentTripPosition":{"type":"location","latitude":52.379011,"longitude":9.741403}},{"tripId":"1|1414841|0|80|13022024","stop":{"type":"stop","id":"638429","name":"Hauptbahnhof (U), Hannover","location":{"type":"location","id":"638429","latitude":52.378274,"longitude":9.742743},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:46:00+01:00","plannedWhen":"2024-02-13T16:42:00+01:00","delay":240,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":null,"provenance":"Fasanenkrug, Hannover","line":{"type":"line","id":"8-webuet-13","fahrtNr":"1394","name":"STR 13","public":true,"adminCode":"webUET","productName":"STR","mode":"train","product":"tram","operator":{"type":"operator","id":"ustra-hannoversche-verkehrsbetriebe-ag","name":"üstra Hannoversche Verkehrsbetriebe AG"}},"remarks":[],"origin":null,"destination":null,"currentTripPosition":{"type":"location","latitude":52.394742,"longitude":9.76215}},{"tripId":"1|1211856|23|80|13022024","stop":{"type":"stop","id":"638428","name":"Hauptbahnhof (U), Hannover","location":{"type":"location","id":"638428","latitude":52.378382,"longitude":9.743201},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:43:00+01:00","plannedWhen":"2024-02-13T16:43:00+01:00","delay":0,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":null,"provenance":"Peiner Straße, Hannover","line":{"type":"line","id":"8-webuet-2","fahrtNr":"0","name":"STR 2","public":true,"adminCode":"webUET","productName":"STR","mode":"train","product":"tram","operator":{"type":"operator","id":"ustra-hannoversche-verkehrsbetriebe-ag","name":"üstra Hannoversche Verkehrsbetriebe AG"}},"remarks":[],"origin":null,"destination":null,"currentTripPosition":{"type":"location","latitude":52.371973,"longitude":9.740774}},{"tripId":"1|1211963|43|80|13022024","stop":{"type":"stop","id":"360021","name":"Hauptbahnhof/Rosenstraße, Hannover","location":{"type":"location","id":"360021","latitude":52.376944,"longitude":9.737853},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:44:00+01:00","plannedWhen":"2024-02-13T16:43:00+01:00","delay":60,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":null,"provenance":"Ahlem, Hannover","line":{"type":"line","id":"8-webuet-10","fahrtNr":"0","name":"STR 10","public":true,"adminCode":"webUET","productName":"STR","mode":"train","product":"tram","operator":{"type":"operator","id":"ustra-hannoversche-verkehrsbetriebe-ag","name":"üstra Hannoversche Verkehrsbetriebe AG"}},"remarks":[],"origin":null,"destination":null,"currentTripPosition":{"type":"location","latitude":52.374067,"longitude":9.726994}},{"tripId":"1|1214156|30|80|13022024","stop":{"type":"stop","id":"360021","name":"Hauptbahnhof/Rosenstraße, Hannover","location":{"type":"location","id":"360021","latitude":52.376944,"longitude":9.737853},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:48:00+01:00","plannedWhen":"2024-02-13T16:43:00+01:00","delay":300,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":null,"provenance":"Peiner Straße, Hannover","line":{"type":"line","id":"5-webueb-128","fahrtNr":"0","name":"Bus 128","public":true,"adminCode":"webUEB","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":null,"destination":null,"currentTripPosition":{"type":"location","latitude":52.377222,"longitude":9.75548}},{"tripId":"1|1227393|4|80|13022024","stop":{"type":"stop","id":"628410","name":"Hauptbahnhof/ZOB, Hannover","location":{"type":"location","id":"628410","latitude":52.379811,"longitude":9.742779},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:43:00+01:00","plannedWhen":"2024-02-13T16:43:00+01:00","delay":null,"platform":null,"plannedPlatform":null,"prognosisType":null,"direction":null,"provenance":"Schwesternhaus, Gehrden (Hannover)","line":{"type":"line","id":"5-webrbg-500","fahrtNr":"0","name":"Bus 500","public":true,"adminCode":"webRBG","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":null,"destination":null,"currentTripPosition":{"type":"location","latitude":52.378076,"longitude":9.739803}},{"tripId":"1|1245163|62|80|13022024","stop":{"type":"stop","id":"638430","name":"Hauptbahnhof (U), Hannover","location":{"type":"location","id":"638430","latitude":52.378436,"longitude":9.74303},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:44:00+01:00","plannedWhen":"2024-02-13T16:43:00+01:00","delay":60,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":null,"provenance":"Wettbergen, Hannover","line":{"type":"line","id":"8-webuet-3","fahrtNr":"63","name":"STR 3","public":true,"adminCode":"webUET","productName":"STR","mode":"train","product":"tram","operator":{"type":"operator","id":"ustra-hannoversche-verkehrsbetriebe-ag","name":"üstra Hannoversche Verkehrsbetriebe AG"}},"remarks":[],"origin":null,"destination":null,"currentTripPosition":{"type":"location","latitude":52.369752,"longitude":9.733709}},{"tripId":"1|1211695|31|80|13022024","stop":{"type":"stop","id":"360021","name":"Hauptbahnhof/Rosenstraße, Hannover","location":{"type":"location","id":"360021","latitude":52.376944,"longitude":9.737853},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:47:00+01:00","plannedWhen":"2024-02-13T16:44:00+01:00","delay":180,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":null,"provenance":"Wallensteinstraße, Hannover","line":{"type":"line","id":"8-webuet-17","fahrtNr":"0","name":"STR 17","public":true,"adminCode":"webUET","productName":"STR","mode":"train","product":"tram","operator":{"type":"operator","id":"ustra-hannoversche-verkehrsbetriebe-ag","name":"üstra Hannoversche Verkehrsbetriebe AG"}},"remarks":[],"origin":null,"destination":null,"currentTripPosition":{"type":"location","latitude":52.369456,"longitude":9.722697}},{"tripId":"1|1228079|4|80|13022024","stop":{"type":"stop","id":"360021","name":"Hauptbahnhof/Rosenstraße, Hannover","location":{"type":"location","id":"360021","latitude":52.376944,"longitude":9.737853},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:44:00+01:00","plannedWhen":"2024-02-13T16:44:00+01:00","delay":null,"platform":null,"plannedPlatform":null,"prognosisType":null,"direction":null,"provenance":"Dedensen Uhlenbrauk, Seelze","line":{"type":"line","id":"5-webrbg-700","fahrtNr":"0","name":"Bus 700","public":true,"adminCode":"webRBG","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":null,"destination":null,"currentTripPosition":{"type":"location","latitude":52.373096,"longitude":9.725825}},{"tripId":"1|1228969|0|80|13022024","stop":{"type":"stop","id":"360021","name":"Hauptbahnhof/Rosenstraße, Hannover","location":{"type":"location","id":"360021","latitude":52.376944,"longitude":9.737853},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:44:00+01:00","plannedWhen":"2024-02-13T16:44:00+01:00","delay":null,"platform":null,"plannedPlatform":null,"prognosisType":null,"direction":null,"provenance":"ZOB, Pattensen","line":{"type":"line","id":"5-webrbg-300","fahrtNr":"0","name":"Bus 300","public":true,"adminCode":"webRBG","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":null,"destination":null,"currentTripPosition":{"type":"location","latitude":52.373096,"longitude":9.725825}},{"tripId":"1|1211963|43|80|13022024","stop":{"type":"stop","id":"628410","name":"Hauptbahnhof/ZOB, Hannover","location":{"type":"location","id":"628410","latitude":52.379811,"longitude":9.742779},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:45:00+01:00","plannedWhen":"2024-02-13T16:45:00+01:00","delay":0,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":null,"provenance":"Ahlem, Hannover","line":{"type":"line","id":"8-webuet-10","fahrtNr":"0","name":"STR 10","public":true,"adminCode":"webUET","productName":"STR","mode":"train","product":"tram","operator":{"type":"operator","id":"ustra-hannoversche-verkehrsbetriebe-ag","name":"üstra Hannoversche Verkehrsbetriebe AG"}},"remarks":[],"origin":null,"destination":null,"currentTripPosition":{"type":"location","latitude":52.374067,"longitude":9.726994}},{"tripId":"1|1211967|43|80|13022024","stop":{"type":"stop","id":"360021","name":"Hauptbahnhof/Rosenstraße, Hannover","location":{"type":"location","id":"360021","latitude":52.376944,"longitude":9.737853},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:46:00+01:00","plannedWhen":"2024-02-13T16:45:00+01:00","delay":60,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":null,"provenance":"Hauptbahnhof/ZOB, Hannover","line":{"type":"line","id":"8-webuet-10","fahrtNr":"0","name":"STR 10","public":true,"adminCode":"webUET","productName":"STR","mode":"train","product":"tram","operator":{"type":"operator","id":"ustra-hannoversche-verkehrsbetriebe-ag","name":"üstra Hannoversche Verkehrsbetriebe AG"}},"remarks":[],"origin":{"type":"stop","id":"628410","name":"Hauptbahnhof/ZOB, Hannover","location":{"type":"location","id":"628410","latitude":52.379811,"longitude":9.742779},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"destination":null},{"tripId":"1|1212030|31|80|13022024","stop":{"type":"stop","id":"638427","name":"Hauptbahnhof (U), Hannover","location":{"type":"location","id":"638427","latitude":52.378328,"longitude":9.742563},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:45:00+01:00","plannedWhen":"2024-02-13T16:45:00+01:00","delay":null,"platform":null,"plannedPlatform":null,"prognosisType":null,"direction":null,"provenance":"Langenhagen (Hannover) (GVH)","line":{"type":"line","id":"8-webuet-1","fahrtNr":"0","name":"STR 1","public":true,"adminCode":"webUET","productName":"STR","mode":"train","product":"tram","operator":{"type":"operator","id":"ustra-hannoversche-verkehrsbetriebe-ag","name":"üstra Hannoversche Verkehrsbetriebe AG"}},"remarks":[],"origin":null,"destination":null,"currentTripPosition":{"type":"location","latitude":52.39227,"longitude":9.734922}},{"tripId":"1|1227891|0|80|13022024","stop":{"type":"stop","id":"360021","name":"Hauptbahnhof/Rosenstraße, Hannover","location":{"type":"location","id":"360021","latitude":52.376944,"longitude":9.737853},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:45:00+01:00","plannedWhen":"2024-02-13T16:45:00+01:00","delay":null,"platform":null,"plannedPlatform":null,"prognosisType":null,"direction":null,"provenance":"Hauptbahnhof/ZOB, Hannover","line":{"type":"line","id":"5-webrbg-700","fahrtNr":"0","name":"Bus 700","public":true,"adminCode":"webRBG","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":{"type":"stop","id":"628410","name":"Hauptbahnhof/ZOB, Hannover","location":{"type":"location","id":"628410","latitude":52.379811,"longitude":9.742779},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"destination":null},{"tripId":"1|1280448|62|80|13022024","stop":{"type":"stop","id":"638429","name":"Hauptbahnhof (U), Hannover","location":{"type":"location","id":"638429","latitude":52.378274,"longitude":9.742743},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:47:00+01:00","plannedWhen":"2024-02-13T16:45:00+01:00","delay":120,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":null,"provenance":"Misburg, Hannover","line":{"type":"line","id":"8-webuet-7","fahrtNr":"871","name":"STR 7","public":true,"adminCode":"webUET","productName":"STR","mode":"train","product":"tram","operator":{"type":"operator","id":"ustra-hannoversche-verkehrsbetriebe-ag","name":"üstra Hannoversche Verkehrsbetriebe AG"}},"remarks":[],"origin":null,"destination":null,"currentTripPosition":{"type":"location","latitude":52.396315,"longitude":9.766852}},{"tripId":"1|1211695|31|80|13022024","stop":{"type":"stop","id":"628410","name":"Hauptbahnhof/ZOB, Hannover","location":{"type":"location","id":"628410","latitude":52.379811,"longitude":9.742779},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:48:00+01:00","plannedWhen":"2024-02-13T16:46:00+01:00","delay":120,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":null,"provenance":"Wallensteinstraße, Hannover","line":{"type":"line","id":"8-webuet-17","fahrtNr":"0","name":"STR 17","public":true,"adminCode":"webUET","productName":"STR","mode":"train","product":"tram","operator":{"type":"operator","id":"ustra-hannoversche-verkehrsbetriebe-ag","name":"üstra Hannoversche Verkehrsbetriebe AG"}},"remarks":[],"origin":null,"destination":null,"currentTripPosition":{"type":"location","latitude":52.369456,"longitude":9.722697}},{"tripId":"1|1211962|10|80|13022024","stop":{"type":"stop","id":"638428","name":"Hauptbahnhof (U), Hannover","location":{"type":"location","id":"638428","latitude":52.378382,"longitude":9.743201},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:47:00+01:00","plannedWhen":"2024-02-13T16:46:00+01:00","delay":60,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":null,"provenance":"Messe/Nord, Hannover","line":{"type":"line","id":"8-webuet-8","fahrtNr":"0","name":"STR 8","public":true,"adminCode":"webUET","productName":"STR","mode":"train","product":"tram","operator":{"type":"operator","id":"ustra-hannoversche-verkehrsbetriebe-ag","name":"üstra Hannoversche Verkehrsbetriebe AG"}},"remarks":[],"origin":null,"destination":null,"currentTripPosition":{"type":"location","latitude":52.358093,"longitude":9.752109}},{"tripId":"1|1213774|3|80|13022024","stop":{"type":"stop","id":"628410","name":"Hauptbahnhof/ZOB, Hannover","location":{"type":"location","id":"628410","latitude":52.379811,"longitude":9.742779},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:49:00+01:00","plannedWhen":"2024-02-13T16:46:00+01:00","delay":180,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":null,"provenance":"Haltenhoffstraße, Hannover","line":{"type":"line","id":"5-webueb-121","fahrtNr":"0","name":"Bus 121","public":true,"adminCode":"webUEB","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":null,"destination":null,"currentTripPosition":{"type":"location","latitude":52.39183,"longitude":9.747435}},{"tripId":"1|1415605|0|80|13022024","stop":{"type":"stop","id":"638430","name":"Hauptbahnhof (U), Hannover","location":{"type":"location","id":"638430","latitude":52.378436,"longitude":9.74303},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:46:00+01:00","plannedWhen":"2024-02-13T16:46:00+01:00","delay":0,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":null,"provenance":"Hemmingen (Hannover)","line":{"type":"line","id":"8-webuet-13","fahrtNr":"1238","name":"STR 13","public":true,"adminCode":"webUET","productName":"STR","mode":"train","product":"tram","operator":{"type":"operator","id":"ustra-hannoversche-verkehrsbetriebe-ag","name":"üstra Hannoversche Verkehrsbetriebe AG"}},"remarks":[],"origin":null,"destination":null,"currentTripPosition":{"type":"location","latitude":52.361383,"longitude":9.722077}},{"tripId":"1|853521|11|80|13022024","stop":{"type":"stop","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}},"when":"2024-02-13T16:53:00+01:00","plannedWhen":"2024-02-13T16:47:00+01:00","delay":360,"platform":"1","plannedPlatform":"1","prognosisType":"prognosed","direction":null,"provenance":"Bennemühlen","line":{"type":"line","id":"4-tdhs-4","fahrtNr":"34449","name":"S 4","public":true,"adminCode":"TDHS__","productName":"S","mode":"train","product":"suburban","operator":{"type":"operator","id":"s-bahn-hannover-transdev","name":"S-Bahn Hannover (Transdev)"}},"remarks":[],"origin":null,"destination":null,"currentTripPosition":{"type":"location","latitude":52.451024,"longitude":9.735902}},{"tripId":"1|1228599|5|80|13022024","stop":{"type":"stop","id":"612467","name":"Hauptbahnhof/Ernst-August-Platz, Hannover","location":{"type":"location","id":"612467","latitude":52.375739,"longitude":9.741215},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:47:00+01:00","plannedWhen":"2024-02-13T16:47:00+01:00","delay":null,"platform":null,"plannedPlatform":null,"prognosisType":null,"direction":null,"provenance":"Bahnhof, Burgdorf (Hannover)","line":{"type":"line","id":"5-webrbg-900","fahrtNr":"0","name":"Bus 900","public":true,"adminCode":"webRBG","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":null,"destination":null,"currentTripPosition":{"type":"location","latitude":52.379775,"longitude":9.760856}},{"tripId":"1|1213774|3|80|13022024","stop":{"type":"stop","id":"626517","name":"Hauptbahnhof/Ernst-August-Platz, Hannover","location":{"type":"location","id":"626517","latitude":52.375694,"longitude":9.741358},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:51:00+01:00","plannedWhen":"2024-02-13T16:48:00+01:00","delay":180,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":null,"provenance":"Haltenhoffstraße, Hannover","line":{"type":"line","id":"5-webueb-121","fahrtNr":"0","name":"Bus 121","public":true,"adminCode":"webUEB","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":null,"destination":null,"currentTripPosition":{"type":"location","latitude":52.39183,"longitude":9.747435}},{"tripId":"1|1228079|4|80|13022024","stop":{"type":"stop","id":"628410","name":"Hauptbahnhof/ZOB, Hannover","location":{"type":"location","id":"628410","latitude":52.379811,"longitude":9.742779},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:48:00+01:00","plannedWhen":"2024-02-13T16:48:00+01:00","delay":null,"platform":null,"plannedPlatform":null,"prognosisType":null,"direction":null,"provenance":"Dedensen Uhlenbrauk, Seelze","line":{"type":"line","id":"5-webrbg-700","fahrtNr":"0","name":"Bus 700","public":true,"adminCode":"webRBG","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":null,"destination":null,"currentTripPosition":{"type":"location","latitude":52.373096,"longitude":9.725825}},{"tripId":"1|1228969|0|80|13022024","stop":{"type":"stop","id":"628410","name":"Hauptbahnhof/ZOB, Hannover","location":{"type":"location","id":"628410","latitude":52.379811,"longitude":9.742779},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:48:00+01:00","plannedWhen":"2024-02-13T16:48:00+01:00","delay":null,"platform":null,"plannedPlatform":null,"prognosisType":null,"direction":null,"provenance":"ZOB, Pattensen","line":{"type":"line","id":"5-webrbg-300","fahrtNr":"0","name":"Bus 300","public":true,"adminCode":"webRBG","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":null,"destination":null,"currentTripPosition":{"type":"location","latitude":52.373096,"longitude":9.725825}},{"tripId":"1|1211687|31|80|13022024","stop":{"type":"stop","id":"638428","name":"Hauptbahnhof (U), Hannover","location":{"type":"location","id":"638428","latitude":52.378382,"longitude":9.743201},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:50:00+01:00","plannedWhen":"2024-02-13T16:49:00+01:00","delay":60,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":null,"provenance":"Laatzen (GVH)","line":{"type":"line","id":"8-webuet-1","fahrtNr":"0","name":"STR 1","public":true,"adminCode":"webUET","productName":"STR","mode":"train","product":"tram","operator":{"type":"operator","id":"ustra-hannoversche-verkehrsbetriebe-ag","name":"üstra Hannoversche Verkehrsbetriebe AG"}},"remarks":[],"origin":null,"destination":null,"currentTripPosition":{"type":"location","latitude":52.343764,"longitude":9.763616}},{"tripId":"1|1211890|26|80|13022024","stop":{"type":"stop","id":"638427","name":"Hauptbahnhof (U), Hannover","location":{"type":"location","id":"638427","latitude":52.378328,"longitude":9.742563},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:49:00+01:00","plannedWhen":"2024-02-13T16:49:00+01:00","delay":0,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":null,"provenance":"Alte Heide, Hannover","line":{"type":"line","id":"8-webuet-2","fahrtNr":"0","name":"STR 2","public":true,"adminCode":"webUET","productName":"STR","mode":"train","product":"tram","operator":{"type":"operator","id":"ustra-hannoversche-verkehrsbetriebe-ag","name":"üstra Hannoversche Verkehrsbetriebe AG"}},"remarks":[],"origin":null,"destination":null,"currentTripPosition":{"type":"location","latitude":52.404001,"longitude":9.736585}},{"tripId":"1|1213193|60|80|13022024","stop":{"type":"stop","id":"612467","name":"Hauptbahnhof/Ernst-August-Platz, Hannover","location":{"type":"location","id":"612467","latitude":52.375739,"longitude":9.741215},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:49:00+01:00","plannedWhen":"2024-02-13T16:49:00+01:00","delay":0,"platform":null,"plannedPlatform":null,"prognosisType":"prognosed","direction":null,"provenance":"Altenbekener Damm, Hannover","line":{"type":"line","id":"5-webueb-121","fahrtNr":"0","name":"Bus 121","public":true,"adminCode":"webUEB","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":null,"destination":null,"currentTripPosition":{"type":"location","latitude":52.361959,"longitude":9.759714}},{"tripId":"1|1228243|3|80|13022024","stop":{"type":"stop","id":"360021","name":"Hauptbahnhof/Rosenstraße, Hannover","location":{"type":"location","id":"360021","latitude":52.376944,"longitude":9.737853},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false},"station":{"type":"station","id":"8000152","name":"Hannover Hbf","location":{"type":"location","id":"8000152","latitude":52.377079,"longitude":9.741763},"products":{"nationalExpress":true,"national":true,"regionalExpress":true,"regional":true,"suburban":true,"bus":true,"ferry":false,"subway":false,"tram":true,"taxi":false}}},"when":"2024-02-13T16:49:00+01:00","plannedWhen":"2024-02-13T16:49:00+01:00","delay":null,"platform":null,"plannedPlatform":null,"prognosisType":null,"direction":null,"provenance":"Wasserstadt Limmer, Hannover","line":{"type":"line","id":"5-webrbg-170","fahrtNr":"0","name":"Bus 170","public":true,"adminCode":"webRBG","productName":"Bus","mode":"bus","product":"bus","operator":{"type":"operator","id":"nahreisezug","name":"Nahreisezug"}},"remarks":[],"origin":null,"destination":null,"currentTripPosition":{"type":"location","latitude":52.370346,"longitude":9.705788}}],"realtimeDataUpdatedAt":1707838756} diff --git a/types-test-raw-api.ts b/types-test-raw-api.ts new file mode 100644 index 000000000..d0d17df85 --- /dev/null +++ b/types-test-raw-api.ts @@ -0,0 +1,93 @@ +import { RawLoc, RawProd, RawRem, RawIco, RawOutCon, RawCommon, RawJny, SearchOnTripRequest } from './types-raw-api'; + +// The test fixture json files are used to typecheck the raw hafas api types + +const dbJourney: Promise<{ + default: { + common: { + locL: RawLoc[]; + prodL: RawProd[]; + remL: RawRem[]; + icoL: RawIco[]; + }; + outConL: RawOutCon[]; + } +}> = import('./test/fixtures/db-journey.json') + +const dbJourneyPolyline: Promise<{ + default: { + common: RawCommon; + outConL: RawOutCon[]; + } +}> = import('./test/fixtures/db-journey-polyline.json') + +const dbArrivals: Promise<{ + default: { + common: RawCommon; + jnyL: RawJny[]; + } +}> = import('./test/fixtures/db-arrivals.json') + +const dbStop: Promise<{ + default: { + common: RawCommon; + locL: RawLoc[]; + } +}> = import('./test/fixtures/db-stop.json') + +const oebTrip: Promise<{ + default: { + common: RawCommon; + journey: RawJny; + } +}> = import('./test/fixtures/oebb-trip.json') + +const bvgJourney: Promise<{ + default: { + common: RawCommon; + outConL: RawOutCon[]; + } +}> = import('./test/fixtures/bvg-journey.json') + +const bvgRadar: Promise<{ + default: { + common: RawCommon; + jnyL: RawJny[]; + } +}> = import('./test/fixtures/bvg-radar.json') + +const req: SearchOnTripRequest = { + "sotMode": "JI", + "jid": "1|192136|0|80|16082021", + "locData": { + "loc": { + "type": "S", + "lid": "A=1@L=8002549@" + }, + "type": "DEP", + "date": "20210816", + "time": "092400" + }, + "arrLocL": [ + { + "type": "S", + "lid": "A=1@L=8000207@" + } + ], + "jnyFltrL": [ + { + "type": "PROD", + "mode": "INC", + "value": "1023" + }, + { + "type": "META", + "mode": "INC", + "meta": "notBarrierfree" + } + ], + "getPasslist": true, + "getPolyline": false, + "minChgTime": 0, + "getTariff": false +} \ No newline at end of file diff --git a/types.ts b/types.ts new file mode 100644 index 000000000..2c4e66074 --- /dev/null +++ b/types.ts @@ -0,0 +1,1242 @@ + +/** + * A ProductType relates to how a means of transport "works" in local context. + * Example: Even though S-Bahn and U-Bahn in Berlin are both trains, they have different operators, service patterns, + * stations and look different. Therefore, they are two distinct products subway and suburban. + */ +export interface ProductType { + id: string; + mode: 'train' | 'bus' | 'watercraft' | 'taxi' | 'gondola' | 'aircraft' | 'car' | 'bicycle' | 'walking'; + name: string; + short: string; + bitmasks: number[]; + default: boolean; +} + +/** + * A profile is a specific customisation for each endpoint. + * It parses data from the API differently, add additional information, or enable non-default methods. + */ +export interface Profile { + locale: string; + timezone: string; + endpoint: string; + products: ReadonlyArray; + trip?: boolean; + radar?: boolean; + refreshJourney?: boolean; + journeysFromTrip?: boolean; + reachableFrom?: boolean; + journeysWalkingSpeed?: boolean; + tripsByName?: boolean; + remarks?: boolean; + remarksGetPolyline?: boolean, + lines?: boolean; +} + +/** + * A location object is used by other items to indicate their locations. + */ +export interface Location { + type: 'location'; + id?: string; + name?: string; + poi?: boolean; + address?: string; + longitude?: number; + latitude?: number; + altitude?: number; + distance?: number; +} + +/** Each public transportation network exposes its products as boolean properties. See {@link ProductType} */ +export interface Products { + [product: string]: boolean; +} + +export interface Facilities { + [product: string]: string | boolean; +} + +export interface ReisezentrumOpeningHours { + Mo?: string; + Di?: string; + Mi?: string; + Do?: string; + Fr?: string; + Sa?: string; + So?: string; +} + +/** + * A station is a larger building or area that can be identified by a name. + * It is usually represented by a single node on a public transport map. + * Whereas a stop usually specifies a location, a station often is a broader area + * that may span across multiple levels or buildings. + */ +export interface Station { + type: 'station'; + id?: string; + name?: string; + station?: Station; + location?: Location; + products?: Products; + lines?: ReadonlyArray; + isMeta?: boolean; + /** region ids */ + regions?: ReadonlyArray; + facilities?: Facilities; + reisezentrumOpeningHours?: ReisezentrumOpeningHours; + stops?: ReadonlyArray; + entrances?: ReadonlyArray; + transitAuthority?: string; + distance?: number; +} + +/** + * Ids of a Stop, i.e. dhid as 'DELFI Haltestellen ID' + */ +export interface Ids { + [id: string]: string; +} + +/** + * A stop is a single small point or structure at which vehicles stop. + * A stop always belongs to a station. It may for example be a sign, a basic shelter or a railway platform. + */ +export interface Stop { + type: 'stop'; + id?: string; + name?: string; + location?: Location; + station?: Station; + products?: Products; + lines?: ReadonlyArray; + isMeta?: boolean; + reisezentrumOpeningHours?: ReisezentrumOpeningHours; + ids?: Ids; + loadFactor?: string; + entrances?: ReadonlyArray; + transitAuthority?: string; + distance?: number; +} + +/** + * A region is a group of stations, for example a metropolitan area or a geographical or cultural region. + */ +export interface Region { + type: 'region'; + id: string; + name: string; + /** station ids */ + stations: ReadonlyArray; +} + +export interface Line { + type: 'line'; + id?: string; + name?: string; + adminCode?: string; + fahrtNr?: string; + additionalName?: string; + product?: string; + public?: boolean; + mode?: 'train' | 'bus' | 'watercraft' | 'taxi' | 'gondola' | 'aircraft' | 'car' | 'bicycle' | 'walking'; + /** routes ids */ + routes?: ReadonlyArray; + operator?: Operator; + express?: boolean; + metro?: boolean; + night?: boolean; + nr?: number; + symbol?: string; + directions?: ReadonlyArray; + productName?: string; +} + +export interface RealtimeDataUpdatedAt { + realtimeDataUpdatedAt?: number +} + +/** + * A route represents a single set of stations, of a single line. + */ +export interface Route { + type: 'route'; + id: string; + line: string; + mode: 'train' | 'bus' | 'watercraft' | 'taxi' | 'gondola' | 'aircraft' | 'car' | 'bicycle' | 'walking'; + /** stop ids */ + stops: ReadonlyArray; +} + +export interface Cycle { + min?: number; + max?: number; + nr?: number; +} + +export interface ArrivalDeparture { + arrival?: number; + departure?: number; +} + +/** + * There are many ways to format schedules of public transport routes. + * This one tries to balance the amount of data and consumability. + * It is specifically geared towards urban public transport, with frequent trains and homogenous travels. + */ +export interface Schedule { + type: 'schedule'; + id: string; + route: string; + mode: 'train' | 'bus' | 'watercraft' | 'taxi' | 'gondola' | 'aircraft' | 'car' | 'bicycle' | 'walking'; + sequence: ReadonlyArray; + /** array of Unix timestamps */ + starts: ReadonlyArray; +} + +export interface Operator { + type: 'operator'; + id: string; + name: string; +} + +export interface Hint { + type: 'hint' | 'status' | 'foreign-id' | 'local-fare-zone' | 'stop-website' | 'stop-dhid' | 'transit-authority'; + code?: string; + summary?: string; + text: string; + tripId?: string; +} + +export interface Status { + type: 'hint' | 'status' | 'foreign-id' | 'local-fare-zone' | 'stop-website' | 'stop-dhid' | 'transit-authority'; + code?: string; + summary?: string; + text: string; + tripId?: string; +} + +export interface IcoCrd { + x: number; + y: number; + type?: string; +} + +export interface Edge { + fromLocation?: Station | Stop | Location; + toLocation?: Station | Stop | Location; + icon?: object; + dir?: number; + icoCrd?: IcoCrd; +} + +export interface Event { + fromLocation?: Station | Stop | Location; + toLocation?: Station | Stop | Location; + start?: string; + end?: string; + sections?: string[]; +} + +export interface Warning { + type: 'status' | 'warning'; + id?: string; + icon?: object; + summary?: string; + text?: string; + category?: string | number; + priority?: number; + products?: Products; + edges?: Edge[]; + events?: Event[]; + validFrom?: string | number; + validUntil?: string | number; + modified?: string | number; + company?: string; + categories?: number[]; + affectedLines?: Line[]; + fromStops?: ReadonlyArray; + toStops?: ReadonlyArray; +} + +export interface Geometry { + type: 'Point'; + coordinates: number[]; +} + +export interface Feature { + type: 'Feature'; + properties: Station | Stop | Location | object; + geometry: Geometry; +} + +export interface FeatureCollection { + type: 'FeatureCollection'; + features: ReadonlyArray; +} + +export type PrognosisType = 'prognosed' | 'calculated'; + +/** + * A stopover represents a vehicle stopping at a stop/station at a specific time. + */ +export interface StopOver { + stop?: Station | Stop; + /** null, if last stopOver of trip */ + departure?: string; + departureDelay?: number; + prognosedDeparture?: string; + plannedDeparture?: string; + departurePlatform?: string; + prognosedDeparturePlatform?: string; + plannedDeparturePlatform?: string; + /** null, if first stopOver of trip */ + arrival?: string; + arrivalDelay?: number; + prognosedArrival?: string; + plannedArrival?: string; + arrivalPlatform?: string; + prognosedArrivalPlatform?: string; + plannedArrivalPlatform?: string; + remarks?: ReadonlyArray; + passBy?: boolean; + cancelled?: boolean; + departurePrognosisType?: PrognosisType; + arrivalPrognosisType?: PrognosisType; + additional?: boolean; +} + +/** + * Trip – a vehicle stopping at a set of stops at specific times + */ +export interface Trip { + id: string; + origin?: Station | Stop | Location; + destination?: Station | Stop | Location; + departure?: string; + plannedDeparture?: string; + prognosedArrival?: string; + departureDelay?: number; + departurePlatform?: string; + prognosedDeparturePlatform?: string; + plannedDeparturePlatform?: string; + arrival?: string; + plannedArrival?: string; + prognosedDeparture?: string; + arrivalDelay?: number; + arrivalPlatform?: string; + prognosedArrivalPlatform?: string; + plannedArrivalPlatform?: string; + stopovers?: ReadonlyArray; + schedule?: number; + price?: Price; + operator?: number; + direction?: string; + line?: Line; + cancelled?: boolean; + walking?: boolean; + loadFactor?: string; + distance?: number; + public?: boolean; + transfer?: boolean; + cycle?: Cycle; + alternatives?: ReadonlyArray; + polyline?: FeatureCollection; + remarks?: ReadonlyArray; + currentLocation?: Location; + departurePrognosisType?: PrognosisType; + arrivalPrognosisType?: PrognosisType; + checkin?: boolean; + scheduledDays?: ScheduledDays; +} + +export interface TripWithRealtimeData extends RealtimeDataUpdatedAt { + trip: Trip; +} + +export interface TripsWithRealtimeData extends RealtimeDataUpdatedAt { + trips: ReadonlyArray; +} + +export interface WarningsWithRealtimeData extends RealtimeDataUpdatedAt { + remarks: ReadonlyArray; +} + +export interface LinesWithRealtimeData extends RealtimeDataUpdatedAt { + lines?: ReadonlyArray; +} + +export interface Price { + amount: number; + currency: string; + hint?: string; +} + +export interface Alternative { + tripId: string; + direction?: string; + location?: Location; + line?: Line; + stop?: Station | Stop; + when?: string; + plannedWhen?: string; + prognosedWhen?: string; + delay?: number; + platform?: string; + plannedPlatform?: string; + prognosedPlatform?: string; + remarks?: ReadonlyArray; + cancelled?: boolean; + loadFactor?: string; + provenance?: string; + previousStopovers?: ReadonlyArray; + nextStopovers?: ReadonlyArray; + frames?: Frame[]; + polyline?: FeatureCollection; + currentTripPosition?: Location; + origin?: Station | Stop | Location; + destination?: Station | Stop | Location; + prognosisType?: PrognosisType; +} + +export interface Departures extends RealtimeDataUpdatedAt { + departures: ReadonlyArray; +} + +export interface Arrivals extends RealtimeDataUpdatedAt { + arrivals: ReadonlyArray +} + +/** + * Leg of journey + */ +export interface Leg { + tripId?: string; + origin?: Station | Stop | Location; + destination?: Station | Stop | Location; + departure?: string; + plannedDeparture?: string; + prognosedArrival?: string; + departureDelay?: number; + departurePlatform?: string; + prognosedDeparturePlatform?: string; + plannedDeparturePlatform?: string; + arrival?: string; + plannedArrival?: string; + prognosedDeparture?: string; + arrivalDelay?: number; + arrivalPlatform?: string; + prognosedArrivalPlatform?: string; + plannedArrivalPlatform?: string; + stopovers?: ReadonlyArray; + schedule?: number; + price?: Price; + operator?: number; + direction?: string; + line?: Line; + reachable?: boolean; + cancelled?: boolean; + walking?: boolean; + loadFactor?: string; + distance?: number; + public?: boolean; + transfer?: boolean; + cycle?: Cycle; + alternatives?: ReadonlyArray; + polyline?: FeatureCollection; + remarks?: ReadonlyArray; + currentLocation?: Location; + departurePrognosisType?: PrognosisType; + arrivalPrognosisType?: PrognosisType; + checkin?: boolean; +} + +export interface ScheduledDays { + [day: string]: boolean; +} + +/** + * A journey is a computed set of directions to get from A to B at a specific time. + * It would typically be the result of a route planning algorithm. + */ +export interface Journey { + type: 'journey'; + legs: ReadonlyArray; + refreshToken?: string; + remarks?: ReadonlyArray; + price?: Price; + cycle?: Cycle; + scheduledDays?: ScheduledDays; +} + +export interface Journeys extends RealtimeDataUpdatedAt { + earlierRef?: string; + laterRef?: string; + journeys?: ReadonlyArray; +} + +export interface JourneyWithRealtimeData extends RealtimeDataUpdatedAt { + journey: Journey; +} + +export interface Duration { + duration: number; + stations: ReadonlyArray; +} + +export interface DurationsWithRealtimeData extends RealtimeDataUpdatedAt { + reachable: ReadonlyArray; +} + +export interface Frame { + origin: Stop | Location; + destination: Stop | Location; + t?: number; +} + +export interface Movement { + direction?: string; + tripId?: string; + line?: Line; + location?: Location; + nextStopovers?: ReadonlyArray; + frames?: Frame[]; + polyline?: FeatureCollection; +} + +export interface Radar extends RealtimeDataUpdatedAt { + movements?: ReadonlyArray; +} + +export interface ServerInfo extends RealtimeDataUpdatedAt { + hciVersion?: string; + timetableStart?: string; + timetableEnd?: string; + serverTime?: string | number; +} + +export interface JourneysOptionsCommon { + /** + * departure date, undefined corresponds to Date.Now + * @default undefined + */ + departure?: Date; + /** + * arrival date, departure and arrival are mutually exclusive. + * @default undefined + */ + arrival?: Date; + /** + * earlierThan, use {@link Journeys#earlierRef}, earlierThan and departure/arrival are mutually exclusive. + * @default undefined + */ + earlierThan?: string; + /** + * laterThan, use {@link Journeys#laterRef}, laterThan and departure/arrival are mutually exclusive. + * @default undefined + */ + laterThan?: string; + /** + * how many search results? + * @default 3 + */ + results?: number; + /** + * let journeys pass this station + * @default undefined + */ + via?: string; + /** + * return stations on the way? + * @default false + */ + stopovers?: boolean; + /** + * Maximum nr of transfers. Default: Let HAFAS decide. + * @default 10 + */ + transfers?: number; + /** + * minimum time for a single transfer in minutes + * @default 10 + */ + transferTime?: number; + /** + * 'none', 'partial' or 'complete' + * @default none + */ + accessibility?: string; + /** + * only bike-friendly journeys + * @default false + */ + bike?: boolean; + products?: Products; + /** + * return tickets? only available with some profiles + * @default false + */ + tickets?: boolean; + /** + * return a shape for each leg? + * @default false + */ + polylines?: boolean; + /** + * parse & expose sub-stops of stations? + * @default false + */ + subStops?: boolean; + /** + * parse & expose entrances of stops/stations? + * @default true + */ + entrances?: boolean; + /** + * parse & expose hints & warnings? + * @default true + */ + remarks?: boolean; + /** + * 'slow', 'normal', 'fast' + * @default slow + */ + walkingSpeed?: string; + /** + * start with walking + * @default false + */ + startWithWalking?: boolean; + /** + * language to get results in + * @default en + */ + language?: string; + /** + * parse which days each journey is valid on + * @default false + */ + scheduledDays?: boolean; + /** + * @deprecated + */ + when?: Date +} + +export interface LoyaltyCard { + type: string; + discount?: number; + class?: number; +} + +export type AgeGroup = 'B' | 'K' | 'Y' | 'E' | 'S' + +export type RoutingMode = 'OFF' | 'INFOS' | 'FULL' | 'REALTIME' | 'SERVER_DEFAULT' | 'HYBRID' + +/** + * JourneysOptions specific to Db Profile + */ +export interface JourneysOptionsDbProfile { + /** + * firstClass + * @default false + */ + firstClass?: boolean; + /** + * ageGroup + * @default none + */ + ageGroup?: AgeGroup; + /** + * age + * @default none + */ + age?: number; + /** + * LoyaltyCard + * @default none + */ + loyaltyCard?: LoyaltyCard; + /** + * RoutingMode + * @default none + */ + routingMode?: RoutingMode; +} + +export type JourneysOptions = JourneysOptionsCommon & JourneysOptionsDbProfile + +export interface JourneysFromTripOptions { + /** + * return stations on the way? + * @default false + */ + stopovers?: boolean; + /** + * minimum time for a single transfer in minutes + * @default 0 + */ + transferTime?: number; + /** + * 'none', 'partial' or 'complete' + * @default 'none' + */ + accessibility?: string; + /** + * return stations on the way? + * @default false + */ + /** + * return tickets? + * @default false + */ + tickets?: boolean; + /** + * return leg shapes? + * @default false + */ + polylines?: boolean; + /** + * parse & expose sub-stops of stations? + * @default true + */ + subStops?: boolean; + /** + * parse & expose entrances of stops/stations? + * @default true + */ + entrances?: boolean; + /** + * parse & expose hints & warnings? + * @default true + */ + remarks?: boolean; + /** + * products + * @default undefined + */ + products?: Products; +} + +export interface LocationsOptions { + /** + * find only exact matches? + * @default true + */ + fuzzy?: boolean; + /** + * how many search results? + * @default 10 + */ + results?: number; + /** + * return stops/stations? + * @default true + */ + stops?: boolean; + /** + * return addresses + * @default false + */ + addresses?: boolean; + /** + * points of interest + * @default true + */ + poi?: boolean; + /** + * parse & expose sub-stops of stations? + * @default false + */ + subStops?: boolean; + /** + * parse & expose entrances of stops/stations? + * @default true + */ + entrances?: boolean; + /** + * parse & expose lines at each stop/station? + * @default false + */ + linesOfStops?: boolean; + /** + * Language of the results + * @default en + */ + language?: string; +} + +export interface TripOptions { + /** + * return stations on the way? + * @default true + */ + stopovers?: boolean; + /** + * return a shape for the trip? + * @default false + */ + polyline?: boolean; + /** + * parse & expose sub-stops of stations? + * @default true + */ + subStops?: boolean; + /** + * parse & expose entrances of stops/stations? + * @default true + */ + entrances?: boolean; + /** + * parse & expose hints & warnings? + * @default true + */ + remarks?: boolean; + /** + * parse which days each journey is valid on + * @default false + */ + scheduledDays?: boolean; + /** + * Language of the results + * @default en + */ + language?: string; +} + +export interface StopOptions { + /** + * parse & expose lines at the stop/station? + * @default false + */ + linesOfStops?: boolean; + /** + * parse & expose sub-stops of stations? + * @default true + */ + subStops?: boolean; + /** + * parse & expose entrances of stops/stations? + * @default true + */ + entrances?: boolean; + /** + * parse & expose hints & warnings? + * @default true + */ + remarks?: boolean; + /** + * Language of the results + * @default en + */ + language?: string; +} + +export interface DeparturesArrivalsOptions { + /** + * departure date, undefined corresponds to Date.Now + * @default undefined + */ + when?: Date; + /** + * only show departures heading to this station + * @default undefined + */ + direction?: string; + /** + * filter by line ID + * @default undefined + */ + line?: string; + /** + * show departures for the next n minutes + * @default 120 + */ + duration?: number; + /** + * max. number of results; `null` means "whatever HAFAS wants" + * @default 10 + */ + results?: number; + /** + * parse & expose sub-stops of stations? + * @default true + */ + subStops?: boolean; + /** + * parse & expose entrances of stops/stations? + * @default true + */ + entrances?: boolean; + /** + * parse & expose lines at the stop/station? + * @default false + */ + linesOfStops?: boolean; + /** + * parse & expose hints & warnings? + * @default false + */ + remarks?: boolean; + /** + * fetch & parse previous/next stopovers? + * @default false + */ + stopovers?: boolean; + /** + * departures at related stations + * @default false + */ + includeRelatedStations?: boolean; + /** + * products + * @default undefined + */ + products?: Products; + /** + * language + * @default en + */ + language?: string; +} + +export interface RefreshJourneyOptions { + /** + * return stations on the way? + * @default false + */ + stopovers?: boolean; + /** + * return a shape for each leg? + * @default false + */ + polylines?: boolean; + /** + * return tickets? only available with some profiles + * @default false + */ + tickets?: boolean; + /** + * parse & expose sub-stops of stations? + * @default true + */ + subStops?: boolean; + /** + * parse & expose entrances of stops/stations? + * @default true + */ + entrances?: boolean; + /** + * parse & expose hints & warnings? + * @default true + */ + remarks?: boolean; + /** + * parse & expose dates the journey is valid on? + * @default false + */ + scheduledDays?: boolean; + /** + * language + * @default en + */ + language?: string; +} + +export interface NearByOptions { + /** + * maximum number of results + * @default 8 + */ + results?: number; + /** + * maximum walking distance in meters + * @default undefined + */ + distance?: number; + /** + * return points of interest? + * @default false + */ + poi?: boolean; + /** + * return stops/stations? + * @default true + */ + stops?: boolean; + /** + * products + * @default undefined + */ + products?: Products; + /** + * parse & expose sub-stops of stations? + * @default true + */ + subStops?: boolean; + /** + * parse & expose entrances of stops/stations? + * @default true + */ + entrances?: boolean; + /** + * parse & expose lines at each stop/station? + * @default false + */ + linesOfStops?: boolean; + /** + * language + * @default en + */ + language?: string; +} + +export interface ReachableFromOptions { + /** + * when + * @default undefined + */ + when?: Date; + /** + * maximum of transfers + * @default 5 + */ + maxTransfers?: number; + /** + * maximum travel duration in minutes, pass `null` for infinite + * @default 20 + */ + maxDuration?: number; + /** + * products + * @default undefined + */ + products?: Products; + /** + * parse & expose sub-stops of stations? + * @default true + */ + subStops?: boolean; + /** + * parse & expose entrances of stops/stations? + * @default true + */ + entrances?: boolean; + /** + * return leg shapes? + * @default false + */ + polylines?: boolean; +} + +export interface BoundingBox { + north: number; + west: number; + south: number; + east: number; +} + +export interface RadarOptions { + /** + * maximum number of vehicles + * @default 256 + */ + results?: number; + /** + * nr of frames to compute + * @default 3 + */ + frames?: number; + /** + * optionally an object of booleans + * @default null + */ + products?: Products; + /** + * compute frames for the next n seconds + * @default 20 + */ + duration?: number; + /** + * parse & expose sub-stops of stations? + * @default true + */ + subStops?: boolean; + /** + * parse & expose entrances of stops/stations? + * @default true + */ + entrances?: boolean; + /** + * return a shape for the trip? + * @default false + */ + polylines?: boolean; + /** + * when + * @default undefined + */ + when?: Date; +} + +export interface Filter { + type: string; + mode: string; + value: string; +} + +export interface TripsByNameOptions { + /** + * departure date, undefined corresponds to Date.Now + * @default undefined + */ + when?: Date; + fromWhen?: Date; + untilWhen?: Date; + onlyCurrentlyRunning?: boolean; + products?: Products; + currentlyStoppingAt?: string; + lineName?: string; + operatorNames?: string[]; + additionalFilters?: Filter[]; +} + +export interface RemarksOptions { + from?: Date | number; + to?: Date | number; + /** + * maximum number of remarks + * @default 100 + */ + results?: number; + products?: Products; + /** + * return leg shapes? (not supported by all endpoints) + * @default false + */ + polylines?: boolean; + /** + * Language of the results + * @default en + */ + language?: string; +} + +export interface LinesOptions { + /** + * Language of the results + * @default en + */ + language?: string; +} + +export interface ServerOptions { + /** + * versionInfo + * @default true + */ + versionInfo?: boolean; + /** + * Language of the results + * @default en + */ + language?: string; +} + +export interface HafasClient { + /** + * Retrieves journeys + * @param from uid of station + * @param to uid of station + * @param options options + */ + journeys: (from: string | Station | Stop | Location, to: string | Station | Stop | Location, options: JourneysOptions | undefined) => Promise; + /** + * refreshes a Journey + * @param refreshToken refreshToken must be a string, taken from {@link journey#refreshToken} + * @param options options + */ + refreshJourney?: (refreshToken: string, options: RefreshJourneyOptions | undefined) => Promise; + /** + * Refetch information about a trip + * @param id trip id, see {@link Leg#tripId} + * @param name name + * @param options options + */ + trip?: (id: string, options: TripOptions | undefined) => Promise; + /** + * Retrieves departures + * @param station uid of station + * @param options options + */ + departures: (station: string | Station | Stop | Location, options: DeparturesArrivalsOptions | undefined) => Promise; + /** + * Retrieves arrivals + * @param station uid of station + * @param options options + */ + arrivals: (station: string | Station | Stop | Location, options: DeparturesArrivalsOptions | undefined) => Promise; + /** + * Retrieves journeys from trip id to station + * @param fromTripId id of trip + * @param previousStopover previous stopover + * @param to uid of station or Station or Stop + * @param options options + */ + journeysFromTrip?: (fromTripId: string, previousStopover: StopOver, to: string | Station | Stop | Location, opt: JourneysFromTripOptions | undefined) => Promise; + /** + * Retrieves locations or stops + * @param name name of station + * @param options options for search + */ + locations: (name: string, options: LocationsOptions | undefined) => Promise>; + /** + * Retrieves information about a stop + * @param id uid of station + * @param options options for search + */ + stop: (id: string | Stop, options: StopOptions | undefined) => Promise; + /** + * Retrieves nearby stops from location + * @param location location + * @param options options for search + */ + nearby: (location: Location, options: NearByOptions | undefined) => Promise>; + /** + * Retrieves stations reachable within a certain time from a location + * @param address location + * @param options options for search + */ + reachableFrom?: (address: Location, options: ReachableFromOptions | undefined) => Promise; + /** + * Retrieves all vehicles currently in an area. + * @param box area + * @param options options for search + */ + radar?: (box: BoundingBox, options: RadarOptions | undefined) => Promise; + /** + * Retrieves trips by name. + * @param lineNameOrFahrtNr string + * @param options options for search + */ + tripsByName?: (lineNameOrFahrtNr: string, options: TripsByNameOptions | undefined) => Promise; + /** + * Fetches all remarks known to the HAFAS endpoint + * @param opt RemarksOptions + */ + remarks?: (opt: RemarksOptions | undefined) => Promise; + /** + * Fetches all lines known to the HAFAS endpoint + * @param query string + * @param opt LinesOptions + */ + lines?: (query: string, opt: LinesOptions | undefined) => Promise; + /** + * Fetches meta information from the HAFAS endpoint + * @param opt ServerOptions + */ + serverInfo: (opt: ServerOptions | undefined) => Promise +} + diff --git a/typescript-readme.md b/typescript-readme.md new file mode 100644 index 000000000..3754529e3 --- /dev/null +++ b/typescript-readme.md @@ -0,0 +1,40 @@ +# How to get a more complete TypeScript declaration file + +This is an attempt to get a more complete TypeScript declaration file by adding +type information via JsDoc annotations to the JavaScript files (see [here](https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html)) + +Some use cases of this approach are [webpack](https://github.com/webpack/webpack/pull/6862) and [Unsplash](https://medium.com/unsplash/how-we-gradually-migrated-to-typescript-at-unsplash-7a34caa24ef1). + +See also [ECMAScript proposal: Type Annotations](https://github.com/tc39/proposal-type-annotations). + +## Summary + +This is work in progress. + +* The file **types.ts** contains the interfaces types. +* Type information is added to the most relevant funtions via JsDoc documents. Tags **@type** and **@param** are used. +* The TypeScript compiler tsc runs only as a type checker and gets the type information from the jsdoc annotations +* The interfaces types are type checked to be compatible with the js code. +* The test fixture json files are used to typecheck the raw hafas api and hafas-client api types. +* There are some code changes (marked with **@author Jürgen Bergmann**) to pass the type checking. +* There is a special handling for Object.assign to enable type checking. +* The script **create-declaration-file.sh** creates a TypeScript Declaration file. Tsc can infer the return types for all api functions. +* There is a long running branch **add-types-in-jsdoc** containing all changes and 1 commit ahead of master branch (without commit history). +* The **master** branch is the unchanged copy of the hafas-client origin. +* todo: add namespace FriendlyPublicTransportFormat + +Maybe this way gets a more complete TypeScript Declaration file than the manual alternative. + +## Workflow + +* git checkout master +* git fetch upstream +* git rebase upstream/master +* git push +* git checkout add-types-in-jsdoc +* git rebase master +* tsc // adjust types till tsc succeeds +* create-types-test-file.sh +* tsc // adjust types till tsc succeeds +* create-declaration-file.sh +* git push origin add-types-in-jsdoc --force