arrival/departure, refactoring

This commit is contained in:
Traines 2024-12-07 22:46:04 +00:00
parent 2f45f66793
commit 80e633dcb7
49 changed files with 1889 additions and 52643 deletions

1
.gitignore vendored
View file

@ -8,3 +8,4 @@ npm-debug.log
package-lock.json package-lock.json
/.tap /.tap
*.ign.*

View file

@ -2,9 +2,13 @@ const formatLocationsReq = (ctx, query) => {
const {profile, opt} = ctx; const {profile, opt} = ctx;
return { return {
endpoint: profile.locationsEndpoint,
query: {
typ: profile.formatLocationFilter(opt.stops, opt.addresses, opt.poi), typ: profile.formatLocationFilter(opt.stops, opt.addresses, opt.poi),
suchbegriff: query, suchbegriff: query,
limit: opt.results, limit: opt.results,
},
method: 'get'
}; };
}; };

View file

@ -2,6 +2,8 @@ const formatNearbyReq = (ctx, location) => {
const {profile, opt} = ctx; const {profile, opt} = ctx;
return { return {
endpoint: profile.nearbyEndpoint,
query: {
long: location.longitude, long: location.longitude,
lat: location.latitude, lat: location.latitude,
radius: opt.distance || undefined, radius: opt.distance || undefined,
@ -9,6 +11,8 @@ const formatNearbyReq = (ctx, location) => {
// TODO getPOIs: Boolean(opt.poi), // TODO getPOIs: Boolean(opt.poi),
// TODO getStops: Boolean(opt.stops), // TODO getStops: Boolean(opt.stops),
maxNo: opt.results, maxNo: opt.results,
},
method: 'get'
}; };
}; };

View file

@ -2,7 +2,7 @@ import isObj from 'lodash/isObject.js';
const hasProp = (o, k) => Object.prototype.hasOwnProperty.call(o, k); const hasProp = (o, k) => Object.prototype.hasOwnProperty.call(o, k);
const formatProductsFilter = (ctx, filter) => { const formatProductsFilter = (ctx, filter, key='vendo') => {
if (!isObj(filter)) { if (!isObj(filter)) {
throw new TypeError('products filter must be an object'); throw new TypeError('products filter must be an object');
} }
@ -17,18 +17,23 @@ const formatProductsFilter = (ctx, filter) => {
filter = Object.assign({}, defaultProducts, filter); filter = Object.assign({}, defaultProducts, filter);
let products = []; let products = [];
let foundDeselected = false;
for (let product in filter) { for (let product in filter) {
if (!hasProp(filter, product) || filter[product] !== true) { if (!hasProp(filter, product) || filter[product] !== true) {
foundDeselected = true;
continue; continue;
} }
if (!byProduct[product]) { if (!byProduct[product]) {
throw new TypeError('unknown product ' + product); throw new TypeError('unknown product ' + product);
} }
products.push(byProduct[product].vendo); products.push(byProduct[product][key]);
} }
if (products.length === 0) { if (products.length === 0) {
throw new Error('no products used'); throw new Error('no products used');
} }
if (!foundDeselected && key == 'ris') {
return undefined;
}
return products; return products;
}; };

View file

@ -1,39 +1,26 @@
const formatStationBoardReq = (ctx, station, type) => { const formatStationBoardReq = (ctx, station, type) => {
const {profile, opt} = ctx; const {profile, opt} = ctx;
const jnyFltrL = [
profile.formatProductsFilter(ctx, opt.products || {}),
];
if (opt.line !== null) {
jnyFltrL.push({type: 'LINEID', mode: 'INC', value: opt.line});
}
const req = {
type,
date: profile.formatDate(profile, opt.when),
time: profile.formatTime(profile, opt.when),
stbLoc: station,
dirLoc: opt.direction
? profile.formatStation(opt.direction)
: undefined,
jnyFltrL,
dur: opt.duration,
};
if (opt.results !== null) {
req.maxJny = opt.results === Infinity
? 10000
: opt.results;
}
if (profile.departuresGetPasslist) {
req.getPasslist = Boolean(opt.stopovers);
}
if (profile.departuresStbFltrEquiv) {
req.stbFltrEquiv = !opt.includeRelatedStations;
}
return { return {
meth: 'StationBoard', endpoint: profile.boardEndpoint,
req, path: type+'/'+station,
query: {
// TODO direction
filterTransports: profile.formatProductsFilter(ctx, opt.products || {}, 'ris'),
timeStart: profile.formatTime(profile, opt.when, true),
timeEnd: profile.formatTime(profile, opt.when.getTime()+opt.duration*60*1000, true),
maxViaStops: opt.stopovers ? undefined : 0,
includeStationGroup: opt.includeRelatedStations,
maxTransportsPerType: opt.results === Infinity ? undefined : opt.results,
includeMessagesDisruptions: opt.remarks,
sortBy: 'TIME_SCHEDULE'
},
method: 'get',
headers: {
'Db-Client-Id': process.env.DB_CLIENT_ID,
'Db-Api-Key': process.env.DB_API_KEY,
'Accept': 'application/vnd.de.db.ris+json'
}
}; };
}; };

View file

@ -2,7 +2,7 @@ import {DateTime, IANAZone} from 'luxon';
import {luxonIANAZonesByProfile as timezones} from '../lib/luxon-timezones.js'; import {luxonIANAZonesByProfile as timezones} from '../lib/luxon-timezones.js';
// todo: change to `(profile) => (when) => {}` // todo: change to `(profile) => (when) => {}`
const formatTime = (profile, when) => { const formatTime = (profile, when, includeOffset = false) => {
let timezone; let timezone;
if (timezones.has(profile)) { if (timezones.has(profile)) {
timezone = timezones.get(profile); timezone = timezones.get(profile);
@ -16,7 +16,8 @@ const formatTime = (profile, when) => {
locale: profile.locale, locale: profile.locale,
zone: timezone, zone: timezone,
}) })
.toISO({ includeOffset: false, suppressMilliseconds: true }) .startOf('second')
.toISO({ includeOffset: includeOffset, suppressMilliseconds: true })
}; };
export { export {

View file

@ -47,11 +47,9 @@ const createClient = (profile, userAgent, opt = {}) => {
} }
const _stationBoard = async (station, type, resultsField, parse, opt = {}) => { const _stationBoard = async (station, type, resultsField, parse, opt = {}) => {
if (isObj(station)) { if (isObj(station) && station.id) {
station = profile.formatStation(station.id); station = station.id;
} else if ('string' === typeof station) { } else if ('string' !== typeof station) {
station = profile.formatStation(station);
} else {
throw new TypeError('station must be an object or a string.'); throw new TypeError('station must be an object or a string.');
} }
@ -86,22 +84,16 @@ const createClient = (profile, userAgent, opt = {}) => {
throw new Error('opt.when is invalid'); throw new Error('opt.when is invalid');
} }
const req = profile.formatStationBoardReq({profile, opt}, station, type); const req = profile.formatStationBoardReq({profile, opt}, station, resultsField);
const {res, common} = await profile.request({profile, opt}, userAgent, req); const {res, common} = await profile.request({profile, opt}, userAgent, req);
const ctx = {profile, opt, common, res}; const ctx = {profile, opt, common, res};
const jnyL = Array.isArray(res.jnyL) const results = res[resultsField].map(res => parse(ctx, res)); // todo sort?
? res.jnyL
: [];
const results = jnyL.map(res => parse(ctx, res))
.sort((a, b) => new Date(a.when) - new Date(b.when)); // todo
return { return {
[resultsField]: results, [resultsField]: results,
realtimeDataUpdatedAt: res.planrtTS && res.planrtTS !== '0' realtimeDataUpdatedAt: null, // TODO
? parseInt(res.planrtTS)
: null,
}; };
}; };
@ -217,12 +209,8 @@ const createClient = (profile, userAgent, opt = {}) => {
if (opt.results !== null) { if (opt.results !== null) {
// TODO query.numF = opt.results; // TODO query.numF = opt.results;
} }
const req = profile.transformJourneysQuery({profile, opt}, query);
const {res, common} = await profile.request({profile, opt}, userAgent, { const {res, common} = await profile.request({profile, opt}, userAgent, req);
endpoint: profile.journeysEndpoint,
body: profile.transformJourneysQuery({profile, opt}, query),
method: 'post'
});
const ctx = {profile, opt, common, res}; const ctx = {profile, opt, common, res};
const journeys = res.verbindungen const journeys = res.verbindungen
.map(j => profile.parseJourney(ctx, j)); .map(j => profile.parseJourney(ctx, j));
@ -428,11 +416,7 @@ const createClient = (profile, userAgent, opt = {}) => {
}, opt); }, opt);
const req = profile.formatLocationsReq({profile, opt}, query); const req = profile.formatLocationsReq({profile, opt}, query);
const {res, common} = await profile.request({profile, opt}, userAgent, { const {res, common} = await profile.request({profile, opt}, userAgent, req);
endpoint: profile.locationsEndpoint,
query: req,
method: 'get'
});
const ctx = {profile, opt, common, res}; const ctx = {profile, opt, common, res};
@ -483,11 +467,7 @@ const createClient = (profile, userAgent, opt = {}) => {
}, opt); }, opt);
const req = profile.formatNearbyReq({profile, opt}, location); const req = profile.formatNearbyReq({profile, opt}, location);
const {res, common} = await profile.request({profile, opt}, userAgent, { const {res, common} = await profile.request({profile, opt}, userAgent, req);
endpoint: profile.nearbyEndpoint,
query: req,
method: 'get'
});
const ctx = {profile, opt, common, res}; const ctx = {profile, opt, common, res};
const results = res.map(loc => profile.parseLocation(ctx, loc)); const results = res.map(loc => profile.parseLocation(ctx, loc));

View file

@ -116,12 +116,14 @@ const request = async (ctx, userAgent, reqData) => {
? randomizeUserAgent(userAgent) ? randomizeUserAgent(userAgent)
: userAgent, : userAgent,
'connection': 'keep-alive', // prevent excessive re-connecting 'connection': 'keep-alive', // prevent excessive re-connecting
...reqData.headers,
}, },
redirect: 'follow', redirect: 'follow',
query: reqData.query, query: reqData.query,
}); });
const url = endpoint + '?' + stringify(req.query, {arrayFormat: 'brackets', encodeValuesOnly: true}); const url = endpoint + (reqData.path || '') + '?' + stringify(req.query, {arrayFormat: 'brackets', encodeValuesOnly: true});
console.log(url);
const reqId = randomBytes(3) const reqId = randomBytes(3)
.toString('hex'); .toString('hex');
const fetchReq = new Request(url, req); const fetchReq = new Request(url, req);
@ -147,7 +149,7 @@ const request = async (ctx, userAgent, reqData) => {
let cType = res.headers.get('content-type'); let cType = res.headers.get('content-type');
if (cType) { if (cType) {
const {type} = parseContentType(cType); const {type} = parseContentType(cType);
if (type !== 'application/json') { if (type !== 'application/json' && type !== 'application/vnd.de.db.ris+json') {
throw new HafasError('invalid/unsupported response content-type: ' + cType, null, errProps); throw new HafasError('invalid/unsupported response content-type: ' + cType, null, errProps);
} }
} }

View file

@ -2,5 +2,6 @@
"journeysEndpoint": "https://int.bahn.de/web/api/angebote/fahrplan", "journeysEndpoint": "https://int.bahn.de/web/api/angebote/fahrplan",
"locationsEndpoint": "https://int.bahn.de/web/api/reiseloesung/orte", "locationsEndpoint": "https://int.bahn.de/web/api/reiseloesung/orte",
"nearbyEndpoint": "https://int.bahn.de/web/api/reiseloesung/orte/nearby", "nearbyEndpoint": "https://int.bahn.de/web/api/reiseloesung/orte/nearby",
"boardEndpoint": "https://apis.deutschebahn.com/db/apis/ris-boards/v1/public/",
"defaultLanguage": "en" "defaultLanguage": "en"
} }

View file

@ -151,18 +151,21 @@ loadFactors[3] = 'very-high';
loadFactors[4] = 'exceptionally-high'; loadFactors[4] = 'exceptionally-high';
const parseLoadFactor = (opt, auslastung) => { const parseLoadFactor = (opt, auslastung) => {
if (!auslastung) {
return null;
}
const cls = opt.firstClass const cls = opt.firstClass
? 'KLASSE_1' ? 'KLASSE_1'
: 'KLASSE_2'; : 'KLASSE_2';
const load = auslastung?.find(a => a.klasse === cls)?.stufe; const load = auslastung.find(a => a.klasse === cls)?.stufe;
return load && loadFactors[load.r] || null; return load && loadFactors[load.r] || null;
}; };
const parseArrOrDepWithLoadFactor = ({parsed, res, opt}, d) => { const parseArrOrDepWithLoadFactor = ({parsed, res, opt}, d) => {
const load = parseLoadFactor(opt, d); /*const load = parseLoadFactor(opt, d);
if (load) { if (load) {
parsed.loadFactor = load; parsed.loadFactor = load;
} }*/ // TODO
return parsed; return parsed;
}; };
@ -200,10 +203,13 @@ Pass in just opt.age, and the age group will calculated automatically.`);
return basicCtrfReq; return basicCtrfReq;
}; };
const transformJourneysQuery = ({opt}, query) => { const transformJourneysQuery = ({profile, opt}, query) => {
query = Object.assign(query, trfReq(opt, false)); query = Object.assign(query, trfReq(opt, false));
return {
return query; endpoint: profile.journeysEndpoint,
body: query,
method: 'post'
};
}; };
const formatRefreshJourneyReq = (ctx, refreshToken) => { const formatRefreshJourneyReq = (ctx, refreshToken) => {

View file

@ -6,6 +6,7 @@ const products = [
name: 'InterCityExpress', name: 'InterCityExpress',
short: 'ICE', short: 'ICE',
vendo: 'ICE', vendo: 'ICE',
ris: 'HIGH_SPEED_TRAIN',
default: true, default: true,
}, },
{ {
@ -15,6 +16,7 @@ const products = [
name: 'InterCity & EuroCity', name: 'InterCity & EuroCity',
short: 'IC/EC', short: 'IC/EC',
vendo: 'EC_IC', vendo: 'EC_IC',
ris: 'INTERCITY_TRAIN',
default: true, default: true,
}, },
{ {
@ -24,6 +26,7 @@ const products = [
name: 'RegionalExpress & InterRegio', // FlixTrain?? name: 'RegionalExpress & InterRegio', // FlixTrain??
short: 'RE/IR', short: 'RE/IR',
vendo: 'IR', vendo: 'IR',
ris: 'INTER_REGIONAL_TRAIN',
default: true, default: true,
}, },
{ {
@ -33,6 +36,7 @@ const products = [
name: 'Regio', name: 'Regio',
short: 'RB', short: 'RB',
vendo: 'REGIONAL', vendo: 'REGIONAL',
ris: 'REGIONAL_TRAIN',
default: true, default: true,
}, },
{ {
@ -42,6 +46,7 @@ const products = [
name: 'S-Bahn', name: 'S-Bahn',
short: 'S', short: 'S',
vendo: 'SBAHN', vendo: 'SBAHN',
ris: 'CITY_TRAIN',
default: true, default: true,
}, },
{ {
@ -51,6 +56,7 @@ const products = [
name: 'Bus', name: 'Bus',
short: 'B', short: 'B',
vendo: 'BUS', vendo: 'BUS',
ris: 'BUS',
default: true, default: true,
}, },
{ {
@ -60,6 +66,7 @@ const products = [
name: 'Ferry', name: 'Ferry',
short: 'F', short: 'F',
vendo: 'SCHIFF', vendo: 'SCHIFF',
ris: 'FERRY',
default: true, default: true,
}, },
{ {
@ -69,6 +76,7 @@ const products = [
name: 'U-Bahn', name: 'U-Bahn',
short: 'U', short: 'U',
vendo: 'UBAHN', vendo: 'UBAHN',
ris: 'SUBWAY',
default: true, default: true,
}, },
{ {
@ -78,6 +86,7 @@ const products = [
name: 'Tram', name: 'Tram',
short: 'T', short: 'T',
vendo: 'TRAM', vendo: 'TRAM',
ris: 'TRAM',
default: true, default: true,
}, },
{ {
@ -87,6 +96,7 @@ const products = [
name: 'Group Taxi', name: 'Group Taxi',
short: 'Taxi', short: 'Taxi',
vendo: 'ANRUFPFLICHTIG', vendo: 'ANRUFPFLICHTIG',
ris: 'TAXI',
default: true, default: true,
}, },
]; ];

View file

@ -3,10 +3,6 @@ import {parseRemarks} from './remarks.js';
const ARRIVAL = 'a'; const ARRIVAL = 'a';
const DEPARTURE = 'd'; const DEPARTURE = 'd';
// todo: pt.jny.dirFlg https://github.com/alexander-albers/tripkit/blob/07047c6ddef24339ebd49a86a78158bca8047421/Sources/TripKit/Provider/AbstractHafasClientInterfaceProvider.swift#L347-L353 & https://github.com/alexander-albers/tripkit/commit/07047c6ddef24339ebd49a86a78158bca8047421#commitcomment-68471656
// todo: d.stbStop.dProgType/d.stbStop.aProgType
// todo: d.stbStop.dProdX/aProdX can be different than d.prodX
const createParseArrOrDep = (prefix) => { const createParseArrOrDep = (prefix) => {
if (prefix !== ARRIVAL && prefix !== DEPARTURE) { if (prefix !== ARRIVAL && prefix !== DEPARTURE) {
throw new Error('invalid prefix'); throw new Error('invalid prefix');
@ -14,73 +10,32 @@ const createParseArrOrDep = (prefix) => {
const parseArrOrDep = (ctx, d) => { // d = raw arrival/departure const parseArrOrDep = (ctx, d) => { // d = raw arrival/departure
const {profile, opt} = ctx; const {profile, opt} = ctx;
const {locL} = ctx.res.common;
const tPlanned = d.stbStop[prefix + 'TimeS'];
const tPrognosed = d.stbStop[prefix + 'TimeR'];
const tzOffset = d.stbStop[prefix + 'TZOffset'] || null;
const cancelled = Boolean(d.stbStop[prefix + 'Cncl']);
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;
const res = { const res = {
tripId: d.jid, tripId: d.journeyID,
stop: d.stbStop.location || null, stop: profile.parseLocation(ctx, d.station),
...profile.parseWhen(ctx, d.date, tPlanned, tPrognosed, tzOffset, cancelled), ...profile.parseWhen(ctx, null, d.timeSchedule, d.time, d.canceled),
...profile.parsePlatform(ctx, plPlanned, plPrognosed, cancelled), ...profile.parsePlatform(ctx, d.platformSchedule, d.platform, d.canceled),
prognosisType: profile.parsePrognosisType(ctx, d.stbStop[prefix + 'ProgType']) || null, //prognosisType: TODO
// todo: for arrivals, this is the *origin*, not the *direction* direction: d.transport?.direction?.stopPlaces?.length > 0 && profile.parseStationName(ctx, d.transport?.direction?.stopPlaces[0].name) || null,
direction: prefix === DEPARTURE && d.dirTxt && profile.parseStationName(ctx, d.dirTxt) || null, provenance: profile.parseStationName(ctx, d.transport?.origin?.name) || null,
provenance: prefix === ARRIVAL && d.dirTxt && profile.parseStationName(ctx, d.dirTxt) || null, line: profile.parseLine(ctx, d) || null,
line: d.line || null,
remarks: [], remarks: [],
origin: null, origin: profile.parseLocation(ctx, d.transport?.origin) || null,
destination: null, destination: profile.parseLocation(ctx, d.transport?.destination) || null,
}; };
if (prefix === DEPARTURE && Array.isArray(d.prodL) && d.prodL[0] && locL[d.prodL[0].tLocX]) { // TODO pos
res.destination = profile.parseLocation(ctx, locL[d.prodL[0].tLocX]);
}
if (prefix === ARRIVAL && Array.isArray(d.prodL) && d.prodL[0] && locL[d.prodL[0].fLocX]) { if (d.canceled) {
res.origin = profile.parseLocation(ctx, locL[d.prodL[0].fLocX]);
}
if (d.pos) {
res.currentTripPosition = {
type: 'location',
latitude: d.pos.y / 1000000,
longitude: d.pos.x / 1000000,
};
}
if (cancelled) {
res.cancelled = true; res.cancelled = true;
Object.defineProperty(res, 'canceled', {value: true}); Object.defineProperty(res, 'canceled', {value: true});
} }
if (opt.remarks) { if (opt.remarks) {
res.remarks = parseRemarks(ctx, [ res.remarks = parseRemarks(ctx, d);
...d.remL || [],
...d.msgL || [],
...d.stbStop.remL || [],
...d.stbStop.msgL || [],
])
.map(([remark]) => remark);
} }
// TODO opt.stopovers
if (opt.stopovers && Array.isArray(d.stopL)) {
// Filter stations the train passes without stopping, as this doesn't comply with FPTF (yet).
const stopovers = d.stopL
.map(st => profile.parseStopover(ctx, st, d.date))
.filter(st => !st.passBy);
if (prefix === ARRIVAL) {
res.previousStopovers = stopovers;
} else if (prefix === DEPARTURE) {
res.nextStopovers = stopovers;
}
}
return res; return res;
}; };

View file

@ -4,15 +4,15 @@ const parseLine = (ctx, p) => {
const profile = ctx.profile; const profile = ctx.profile;
const res = { const res = {
type: 'line', type: 'line',
id: slugg(p.verkehrsmittel?.langText), // TODO terrible id: slugg(p.verkehrsmittel?.langText || p.transport?.journeyDescription), // TODO terrible
fahrtNr: p.verkehrsmittel?.nummer, fahrtNr: p.verkehrsmittel?.nummer || p.transport?.number,
name: p.verkehrsmittel?.name || p.zugName, name: p.verkehrsmittel?.name || p.zugName || p.transport?.journeyDescription,
public: true, public: true,
}; };
// TODO res.adminCode // TODO res.adminCode
res.productName = p.verkehrsmittel?.kurzText; res.productName = p.verkehrsmittel?.kurzText || p.transport?.category;
const foundProduct = profile.products.find(pp => pp.vendo == p.verkehrsmittel?.produktGattung) const foundProduct = profile.products.find(pp => pp.vendo == p.verkehrsmittel?.produktGattung || pp.ris == p.transport?.type)
res.mode = foundProduct?.mode; res.mode = foundProduct?.mode;
res.product = foundProduct?.id; res.product = foundProduct?.id;

View file

@ -9,10 +9,14 @@ const leadingZeros = /^0+/;
const parseLocation = (ctx, l) => { const parseLocation = (ctx, l) => {
const {profile, opt} = ctx; const {profile, opt} = ctx;
if (!l) {
return null;
}
const lid = parse(l.id, {delimiter: '@'}); const lid = parse(l.id, {delimiter: '@'});
const res = { const res = {
type: 'location', type: 'location',
id: (l.extId || lid.L || '').replace(leadingZeros, '') || null, id: (l.extId || lid.L || l.evaNumber || '').replace(leadingZeros, '') || null,
}; };
if (l.lat && l.lon) { if (l.lat && l.lon) {
@ -23,7 +27,7 @@ const parseLocation = (ctx, l) => {
res.longitude = lid.X / 1000000; res.longitude = lid.X / 1000000;
} }
if (l.type === STATION || l.extId) { if (l.type === STATION || l.extId || l.evaNumber) {
const stop = { const stop = {
type: 'stop', // TODO station type: 'stop', // TODO station
id: res.id, id: res.id,

View file

@ -1,8 +1,10 @@
import maxBy from 'lodash/maxBy.js';
const parsePolyline = (ctx, p) => { // p = raw polylineGroup const parsePolyline = (ctx, p) => { // p = raw polylineGroup
if (p.polylineDescriptions.length < 2) { if (p.polylineDescriptions.length < 1) {
return null; return null;
} }
const points = p.polylineDescriptions[1].coordinates; const points = maxBy(p.polylineDescriptions, d => d.coordinates.length).coordinates; // TODO initial and final poly?
if (points.length === 0) { if (points.length === 0) {
return null; return null;
} }

View file

@ -2,18 +2,26 @@ import flatMap from 'lodash/flatMap.js';
const parseRemarks = (ctx, ref) => { const parseRemarks = (ctx, ref) => {
//TODO ereignisZusammenfassung, priorisierteMeldungen? //TODO ereignisZusammenfassung, priorisierteMeldungen?
return flatMap([ref.risNotizen || [], ref.himMeldungen || [], ref.meldungenAsObject || [], ref.verkehrsmittel?.zugattribute || []]).map(remark => { return flatMap([
ref.risNotizen || [],
ref.himMeldungen || [],
ref.meldungenAsObject || [],
ref.verkehrsmittel?.zugattribute || [],
ref.messages || [],
ref.attributes || [],
ref.disruptions || [],
]).map(remark => {
if (remark.kategorie) { if (remark.kategorie) {
const res = ctx.profile.parseHintByCode(remark); const res = ctx.profile.parseHintByCode(remark);
if (res) return res; if (res) return res;
} }
let type = 'hint'; let type = 'hint';
if (remark.prioritaet) type = 'status'; if (remark.prioritaet || remark.type) type = 'status';
if (!remark.kategorie && remark.key || remark.prioritaet && remark.prioritaet == 'HOCH') type = 'warning'; if (!remark.kategorie && remark.key || remark.disruptionID || remark.prioritaet && remark.prioritaet == 'HOCH') type = 'warning';
let res = { let res = {
code: remark.code || remark.key, code: remark.code || remark.key,
summary: remark.nachrichtKurz || remark.value || remark.ueberschrift, summary: remark.nachrichtKurz || remark.value || remark.ueberschrift || remark.text || Object.values(remark.descriptions || {}).shift()?.textShort,
text: remark.nachrichtLang || remark.value || remark.text, text: remark.nachrichtLang || remark.value || remark.text || Object.values(remark.descriptions || {}).shift()?.text,
type: type, type: type,
}; };
if (remark.modDateTime) { if (remark.modDateTime) {

View file

@ -25,9 +25,8 @@ const opt = {
}; };
tap.test('parses an arrival correctly (DB)', (t) => { tap.test('parses an arrival correctly (DB)', (t) => {
const common = profile.parseCommon({profile, opt, res}); const ctx = {profile, opt, common: null, res};
const ctx = {profile, opt, common, res}; const arrivals = res.arrivals.map(d => profile.parseArrival(ctx, d));
const arrivals = res.jnyL.map(d => profile.parseArrival(ctx, d));
t.same(arrivals, expected); t.same(arrivals, expected);
t.end(); t.end();

View file

@ -1,35 +0,0 @@
// todo: use import assertions once they're supported by Node.js & ESLint
// https://github.com/tc39/proposal-import-assertions
import {createRequire} from 'module';
const require = createRequire(import.meta.url);
import tap from 'tap';
import {createClient} from '../index.js';
import {profile as rawProfile} from '../p/db/index.js';
const res = require('./fixtures/db-deps-with-destination.json');
const client = createClient(rawProfile, 'public-transport/hafas-client:test');
const {profile} = client;
const opt = {
direction: null,
duration: 10,
linesOfStops: true,
remarks: true,
stopovers: true,
includeRelatedStations: true,
when: '2022-10-15T15:45:00+02:00',
products: {},
};
tap.test('parses departure.destination correctly (DB)', (t) => {
const common = profile.parseCommon({profile, opt, res});
const ctx = {profile, opt, common, res};
const departure = profile.parseDeparture(ctx, res.jnyL[0]);
t.ok(departure.destination, 'missing departure.destination');
t.equal(departure.destination.type, 'stop', 'invalid departure.destination.type');
t.equal(departure.destination.id, '930200', 'invalid departure.destination.id');
t.end();
});

View file

@ -1,41 +0,0 @@
// todo: use import assertions once they're supported by Node.js & ESLint
// https://github.com/tc39/proposal-import-assertions
import {createRequire} from 'module';
const require = createRequire(import.meta.url);
import tap from 'tap';
import {createClient} from '../index.js';
import {profile as rawProfile} from '../p/db/index.js';
const res = require('./fixtures/db-journey-2.json');
import {dbJourney as expected} from './fixtures/db-journey-2.js';
const client = createClient(rawProfile, 'public-transport/hafas-client:test');
const {profile} = client;
const opt = {
results: 4,
via: null,
stopovers: true,
transfers: -1,
transferTime: 0,
accessibility: 'none',
bike: false,
tickets: true,
polylines: true,
remarks: true,
walkingSpeed: 'normal',
startWithWalking: true,
scheduledDays: false,
departure: '2020-11-16T10:00:00+01:00',
products: {},
};
tap.test('parses a journey remarks without failing', (t) => {
const common = profile.parseCommon({profile, opt, res});
const ctx = {profile, opt, common, res};
const journey = profile.parseJourney(ctx, res.outConL[2]);
t.same(journey, expected);
t.end();
});

View file

@ -1,35 +0,0 @@
// todo: use import assertions once they're supported by Node.js & ESLint
// https://github.com/tc39/proposal-import-assertions
import {createRequire} from 'module';
const require = createRequire(import.meta.url);
import tap from 'tap';
import {createClient} from '../index.js';
import {profile as rawProfile} from '../p/db/index.js';
const resAdditionalStopover = require('./fixtures/db-journey-additional-stopover.json');
const client = createClient(rawProfile, 'public-transport/hafas-client:test');
const {profile} = client;
const opt = {
results: 1,
stopovers: true,
};
// https://github.com/public-transport/hafas-client/issues/303
tap.test('parses a journey having a leg with an additional stopover', (t) => {
const common = profile.parseCommon({profile, opt, res: resAdditionalStopover});
const ctx = {profile, opt, common, res: resAdditionalStopover};
const journey = profile.parseJourney(ctx, resAdditionalStopover.outConL[0]);
const stopovers = journey.legs[0].stopovers;
const stopoverRegular = stopovers[6];
const stopoverAdditional = stopovers[7];
t.notOk('additional' in stopoverRegular, 'regular stopover has attribute additional');
t.equal(stopoverAdditional.additional, true, 'additional stopover doesn\'t have attribute additional');
t.end();
});

View file

@ -1,776 +0,0 @@
// todo: use import assertions once they're supported by Node.js & ESLint
// https://github.com/tc39/proposal-import-assertions
import {createRequire} from 'module';
const require = createRequire(import.meta.url);
import tap from 'tap';
import {createClient} from '../index.js';
import {profile as rawProfile} from '../p/db/index.js';
const res = require('./fixtures/db-journey-fpB-fpE-2-years.json');
const client = createClient(rawProfile, 'public-transport/hafas-client:test');
const {profile} = client;
const opt = {
results: 1,
via: null,
stopovers: false,
transfers: -1,
transferTime: 0,
accessibility: 'none',
bike: false,
walkingSpeed: 'normal',
startWithWalking: true,
tickets: false,
polylines: false,
subStops: false,
entrances: false,
remarks: false,
scheduledDays: true,
};
tap.test('parses journey.scheduledDays correctly with planning period of >1 year', (t) => {
const common = profile.parseCommon({profile, opt, res});
const ctx = {profile, opt, common, res};
const journey = profile.parseJourney(ctx, res.outConL[0]);
// "fpB": "20211212",
// "fpE": "20231209",
// […]
// "sDays": {
// "sDaysR": "runs 16. Nov 2022 ",
// "sDaysB": "000000000000000000000000000000000000000000000000000000000000000000000000000000000001F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
// },
t.same(journey.scheduledDays, {
'2021-12-12': false,
'2021-12-13': false,
'2021-12-14': false,
'2021-12-15': false,
'2021-12-16': false,
'2021-12-17': false,
'2021-12-18': false,
'2021-12-19': false,
'2021-12-20': false,
'2021-12-21': false,
'2021-12-22': false,
'2021-12-23': false,
'2021-12-24': false,
'2021-12-25': false,
'2021-12-26': false,
'2021-12-27': false,
'2021-12-28': false,
'2021-12-29': false,
'2021-12-30': false,
'2021-12-31': false,
'2022-01-01': false,
'2022-01-02': false,
'2022-01-03': false,
'2022-01-04': false,
'2022-01-05': false,
'2022-01-06': false,
'2022-01-07': false,
'2022-01-08': false,
'2022-01-09': false,
'2022-01-10': false,
'2022-01-11': false,
'2022-01-12': false,
'2022-01-13': false,
'2022-01-14': false,
'2022-01-15': false,
'2022-01-16': false,
'2022-01-17': false,
'2022-01-18': false,
'2022-01-19': false,
'2022-01-20': false,
'2022-01-21': false,
'2022-01-22': false,
'2022-01-23': false,
'2022-01-24': false,
'2022-01-25': false,
'2022-01-26': false,
'2022-01-27': false,
'2022-01-28': false,
'2022-01-29': false,
'2022-01-30': false,
'2022-01-31': false,
'2022-02-01': false,
'2022-02-02': false,
'2022-02-03': false,
'2022-02-04': false,
'2022-02-05': false,
'2022-02-06': false,
'2022-02-07': false,
'2022-02-08': false,
'2022-02-09': false,
'2022-02-10': false,
'2022-02-11': false,
'2022-02-12': false,
'2022-02-13': false,
'2022-02-14': false,
'2022-02-15': false,
'2022-02-16': false,
'2022-02-17': false,
'2022-02-18': false,
'2022-02-19': false,
'2022-02-20': false,
'2022-02-21': false,
'2022-02-22': false,
'2022-02-23': false,
'2022-02-24': false,
'2022-02-25': false,
'2022-02-26': false,
'2022-02-27': false,
'2022-02-28': false,
'2022-03-01': false,
'2022-03-02': false,
'2022-03-03': false,
'2022-03-04': false,
'2022-03-05': false,
'2022-03-06': false,
'2022-03-07': false,
'2022-03-08': false,
'2022-03-09': false,
'2022-03-10': false,
'2022-03-11': false,
'2022-03-12': false,
'2022-03-13': false,
'2022-03-14': false,
'2022-03-15': false,
'2022-03-16': false,
'2022-03-17': false,
'2022-03-18': false,
'2022-03-19': false,
'2022-03-20': false,
'2022-03-21': false,
'2022-03-22': false,
'2022-03-23': false,
'2022-03-24': false,
'2022-03-25': false,
'2022-03-26': false,
'2022-03-27': false,
'2022-03-28': false,
'2022-03-29': false,
'2022-03-30': false,
'2022-03-31': false,
'2022-04-01': false,
'2022-04-02': false,
'2022-04-03': false,
'2022-04-04': false,
'2022-04-05': false,
'2022-04-06': false,
'2022-04-07': false,
'2022-04-08': false,
'2022-04-09': false,
'2022-04-10': false,
'2022-04-11': false,
'2022-04-12': false,
'2022-04-13': false,
'2022-04-14': false,
'2022-04-15': false,
'2022-04-16': false,
'2022-04-17': false,
'2022-04-18': false,
'2022-04-19': false,
'2022-04-20': false,
'2022-04-21': false,
'2022-04-22': false,
'2022-04-23': false,
'2022-04-24': false,
'2022-04-25': false,
'2022-04-26': false,
'2022-04-27': false,
'2022-04-28': false,
'2022-04-29': false,
'2022-04-30': false,
'2022-05-01': false,
'2022-05-02': false,
'2022-05-03': false,
'2022-05-04': false,
'2022-05-05': false,
'2022-05-06': false,
'2022-05-07': false,
'2022-05-08': false,
'2022-05-09': false,
'2022-05-10': false,
'2022-05-11': false,
'2022-05-12': false,
'2022-05-13': false,
'2022-05-14': false,
'2022-05-15': false,
'2022-05-16': false,
'2022-05-17': false,
'2022-05-18': false,
'2022-05-19': false,
'2022-05-20': false,
'2022-05-21': false,
'2022-05-22': false,
'2022-05-23': false,
'2022-05-24': false,
'2022-05-25': false,
'2022-05-26': false,
'2022-05-27': false,
'2022-05-28': false,
'2022-05-29': false,
'2022-05-30': false,
'2022-05-31': false,
'2022-06-01': false,
'2022-06-02': false,
'2022-06-03': false,
'2022-06-04': false,
'2022-06-05': false,
'2022-06-06': false,
'2022-06-07': false,
'2022-06-08': false,
'2022-06-09': false,
'2022-06-10': false,
'2022-06-11': false,
'2022-06-12': false,
'2022-06-13': false,
'2022-06-14': false,
'2022-06-15': false,
'2022-06-16': false,
'2022-06-17': false,
'2022-06-18': false,
'2022-06-19': false,
'2022-06-20': false,
'2022-06-21': false,
'2022-06-22': false,
'2022-06-23': false,
'2022-06-24': false,
'2022-06-25': false,
'2022-06-26': false,
'2022-06-27': false,
'2022-06-28': false,
'2022-06-29': false,
'2022-06-30': false,
'2022-07-01': false,
'2022-07-02': false,
'2022-07-03': false,
'2022-07-04': false,
'2022-07-05': false,
'2022-07-06': false,
'2022-07-07': false,
'2022-07-08': false,
'2022-07-09': false,
'2022-07-10': false,
'2022-07-11': false,
'2022-07-12': false,
'2022-07-13': false,
'2022-07-14': false,
'2022-07-15': false,
'2022-07-16': false,
'2022-07-17': false,
'2022-07-18': false,
'2022-07-19': false,
'2022-07-20': false,
'2022-07-21': false,
'2022-07-22': false,
'2022-07-23': false,
'2022-07-24': false,
'2022-07-25': false,
'2022-07-26': false,
'2022-07-27': false,
'2022-07-28': false,
'2022-07-29': false,
'2022-07-30': false,
'2022-07-31': false,
'2022-08-01': false,
'2022-08-02': false,
'2022-08-03': false,
'2022-08-04': false,
'2022-08-05': false,
'2022-08-06': false,
'2022-08-07': false,
'2022-08-08': false,
'2022-08-09': false,
'2022-08-10': false,
'2022-08-11': false,
'2022-08-12': false,
'2022-08-13': false,
'2022-08-14': false,
'2022-08-15': false,
'2022-08-16': false,
'2022-08-17': false,
'2022-08-18': false,
'2022-08-19': false,
'2022-08-20': false,
'2022-08-21': false,
'2022-08-22': false,
'2022-08-23': false,
'2022-08-24': false,
'2022-08-25': false,
'2022-08-26': false,
'2022-08-27': false,
'2022-08-28': false,
'2022-08-29': false,
'2022-08-30': false,
'2022-08-31': false,
'2022-09-01': false,
'2022-09-02': false,
'2022-09-03': false,
'2022-09-04': false,
'2022-09-05': false,
'2022-09-06': false,
'2022-09-07': false,
'2022-09-08': false,
'2022-09-09': false,
'2022-09-10': false,
'2022-09-11': false,
'2022-09-12': false,
'2022-09-13': false,
'2022-09-14': false,
'2022-09-15': false,
'2022-09-16': false,
'2022-09-17': false,
'2022-09-18': false,
'2022-09-19': false,
'2022-09-20': false,
'2022-09-21': false,
'2022-09-22': false,
'2022-09-23': false,
'2022-09-24': false,
'2022-09-25': false,
'2022-09-26': false,
'2022-09-27': false,
'2022-09-28': false,
'2022-09-29': false,
'2022-09-30': false,
'2022-10-01': false,
'2022-10-02': false,
'2022-10-03': false,
'2022-10-04': false,
'2022-10-05': false,
'2022-10-06': false,
'2022-10-07': false,
'2022-10-08': false,
'2022-10-09': false,
'2022-10-10': false,
'2022-10-11': false,
'2022-10-12': false,
'2022-10-13': false,
'2022-10-14': false,
'2022-10-15': false,
'2022-10-16': false,
'2022-10-17': false,
'2022-10-18': false,
'2022-10-19': false,
'2022-10-20': false,
'2022-10-21': false,
'2022-10-22': false,
'2022-10-23': false,
'2022-10-24': false,
'2022-10-25': false,
'2022-10-26': false,
'2022-10-27': false,
'2022-10-28': false,
'2022-10-29': false,
'2022-10-30': false,
'2022-10-31': false,
'2022-11-01': false,
'2022-11-02': false,
'2022-11-03': false,
'2022-11-04': false,
'2022-11-05': false,
'2022-11-06': false,
'2022-11-07': false,
'2022-11-08': false,
'2022-11-09': false,
'2022-11-10': false,
'2022-11-11': false,
'2022-11-12': true,
'2022-11-13': true,
'2022-11-14': true,
'2022-11-15': true,
'2022-11-16': true,
'2022-11-17': false,
'2022-11-18': false,
'2022-11-19': false,
'2022-11-20': false,
'2022-11-21': false,
'2022-11-22': false,
'2022-11-23': false,
'2022-11-24': false,
'2022-11-25': false,
'2022-11-26': false,
'2022-11-27': false,
'2022-11-28': false,
'2022-11-29': false,
'2022-11-30': false,
'2022-12-01': false,
'2022-12-02': false,
'2022-12-03': false,
'2022-12-04': false,
'2022-12-05': false,
'2022-12-06': false,
'2022-12-07': false,
'2022-12-08': false,
'2022-12-09': false,
'2022-12-10': false,
'2022-12-11': false,
'2022-12-12': false,
'2022-12-13': false,
'2022-12-14': false,
'2022-12-15': false,
'2022-12-16': false,
'2022-12-17': false,
'2022-12-18': false,
'2022-12-19': false,
'2022-12-20': false,
'2022-12-21': false,
'2022-12-22': false,
'2022-12-23': false,
'2022-12-24': false,
'2022-12-25': false,
'2022-12-26': false,
'2022-12-27': false,
'2022-12-28': false,
'2022-12-29': false,
'2022-12-30': false,
'2022-12-31': false,
'2023-01-01': false,
'2023-01-02': false,
'2023-01-03': false,
'2023-01-04': false,
'2023-01-05': false,
'2023-01-06': false,
'2023-01-07': false,
'2023-01-08': false,
'2023-01-09': false,
'2023-01-10': false,
'2023-01-11': false,
'2023-01-12': false,
'2023-01-13': false,
'2023-01-14': false,
'2023-01-15': false,
'2023-01-16': false,
'2023-01-17': false,
'2023-01-18': false,
'2023-01-19': false,
'2023-01-20': false,
'2023-01-21': false,
'2023-01-22': false,
'2023-01-23': false,
'2023-01-24': false,
'2023-01-25': false,
'2023-01-26': false,
'2023-01-27': false,
'2023-01-28': false,
'2023-01-29': false,
'2023-01-30': false,
'2023-01-31': false,
'2023-02-01': false,
'2023-02-02': false,
'2023-02-03': false,
'2023-02-04': false,
'2023-02-05': false,
'2023-02-06': false,
'2023-02-07': false,
'2023-02-08': false,
'2023-02-09': false,
'2023-02-10': false,
'2023-02-11': false,
'2023-02-12': false,
'2023-02-13': false,
'2023-02-14': false,
'2023-02-15': false,
'2023-02-16': false,
'2023-02-17': false,
'2023-02-18': false,
'2023-02-19': false,
'2023-02-20': false,
'2023-02-21': false,
'2023-02-22': false,
'2023-02-23': false,
'2023-02-24': false,
'2023-02-25': false,
'2023-02-26': false,
'2023-02-27': false,
'2023-02-28': false,
'2023-03-01': false,
'2023-03-02': false,
'2023-03-03': false,
'2023-03-04': false,
'2023-03-05': false,
'2023-03-06': false,
'2023-03-07': false,
'2023-03-08': false,
'2023-03-09': false,
'2023-03-10': false,
'2023-03-11': false,
'2023-03-12': false,
'2023-03-13': false,
'2023-03-14': false,
'2023-03-15': false,
'2023-03-16': false,
'2023-03-17': false,
'2023-03-18': false,
'2023-03-19': false,
'2023-03-20': false,
'2023-03-21': false,
'2023-03-22': false,
'2023-03-23': false,
'2023-03-24': false,
'2023-03-25': false,
'2023-03-26': false,
'2023-03-27': false,
'2023-03-28': false,
'2023-03-29': false,
'2023-03-30': false,
'2023-03-31': false,
'2023-04-01': false,
'2023-04-02': false,
'2023-04-03': false,
'2023-04-04': false,
'2023-04-05': false,
'2023-04-06': false,
'2023-04-07': false,
'2023-04-08': false,
'2023-04-09': false,
'2023-04-10': false,
'2023-04-11': false,
'2023-04-12': false,
'2023-04-13': false,
'2023-04-14': false,
'2023-04-15': false,
'2023-04-16': false,
'2023-04-17': false,
'2023-04-18': false,
'2023-04-19': false,
'2023-04-20': false,
'2023-04-21': false,
'2023-04-22': false,
'2023-04-23': false,
'2023-04-24': false,
'2023-04-25': false,
'2023-04-26': false,
'2023-04-27': false,
'2023-04-28': false,
'2023-04-29': false,
'2023-04-30': false,
'2023-05-01': false,
'2023-05-02': false,
'2023-05-03': false,
'2023-05-04': false,
'2023-05-05': false,
'2023-05-06': false,
'2023-05-07': false,
'2023-05-08': false,
'2023-05-09': false,
'2023-05-10': false,
'2023-05-11': false,
'2023-05-12': false,
'2023-05-13': false,
'2023-05-14': false,
'2023-05-15': false,
'2023-05-16': false,
'2023-05-17': false,
'2023-05-18': false,
'2023-05-19': false,
'2023-05-20': false,
'2023-05-21': false,
'2023-05-22': false,
'2023-05-23': false,
'2023-05-24': false,
'2023-05-25': false,
'2023-05-26': false,
'2023-05-27': false,
'2023-05-28': false,
'2023-05-29': false,
'2023-05-30': false,
'2023-05-31': false,
'2023-06-01': false,
'2023-06-02': false,
'2023-06-03': false,
'2023-06-04': false,
'2023-06-05': false,
'2023-06-06': false,
'2023-06-07': false,
'2023-06-08': false,
'2023-06-09': false,
'2023-06-10': false,
'2023-06-11': false,
'2023-06-12': false,
'2023-06-13': false,
'2023-06-14': false,
'2023-06-15': false,
'2023-06-16': false,
'2023-06-17': false,
'2023-06-18': false,
'2023-06-19': false,
'2023-06-20': false,
'2023-06-21': false,
'2023-06-22': false,
'2023-06-23': false,
'2023-06-24': false,
'2023-06-25': false,
'2023-06-26': false,
'2023-06-27': false,
'2023-06-28': false,
'2023-06-29': false,
'2023-06-30': false,
'2023-07-01': false,
'2023-07-02': false,
'2023-07-03': false,
'2023-07-04': false,
'2023-07-05': false,
'2023-07-06': false,
'2023-07-07': false,
'2023-07-08': false,
'2023-07-09': false,
'2023-07-10': false,
'2023-07-11': false,
'2023-07-12': false,
'2023-07-13': false,
'2023-07-14': false,
'2023-07-15': false,
'2023-07-16': false,
'2023-07-17': false,
'2023-07-18': false,
'2023-07-19': false,
'2023-07-20': false,
'2023-07-21': false,
'2023-07-22': false,
'2023-07-23': false,
'2023-07-24': false,
'2023-07-25': false,
'2023-07-26': false,
'2023-07-27': false,
'2023-07-28': false,
'2023-07-29': false,
'2023-07-30': false,
'2023-07-31': false,
'2023-08-01': false,
'2023-08-02': false,
'2023-08-03': false,
'2023-08-04': false,
'2023-08-05': false,
'2023-08-06': false,
'2023-08-07': false,
'2023-08-08': false,
'2023-08-09': false,
'2023-08-10': false,
'2023-08-11': false,
'2023-08-12': false,
'2023-08-13': false,
'2023-08-14': false,
'2023-08-15': false,
'2023-08-16': false,
'2023-08-17': false,
'2023-08-18': false,
'2023-08-19': false,
'2023-08-20': false,
'2023-08-21': false,
'2023-08-22': false,
'2023-08-23': false,
'2023-08-24': false,
'2023-08-25': false,
'2023-08-26': false,
'2023-08-27': false,
'2023-08-28': false,
'2023-08-29': false,
'2023-08-30': false,
'2023-08-31': false,
'2023-09-01': false,
'2023-09-02': false,
'2023-09-03': false,
'2023-09-04': false,
'2023-09-05': false,
'2023-09-06': false,
'2023-09-07': false,
'2023-09-08': false,
'2023-09-09': false,
'2023-09-10': false,
'2023-09-11': false,
'2023-09-12': false,
'2023-09-13': false,
'2023-09-14': false,
'2023-09-15': false,
'2023-09-16': false,
'2023-09-17': false,
'2023-09-18': false,
'2023-09-19': false,
'2023-09-20': false,
'2023-09-21': false,
'2023-09-22': false,
'2023-09-23': false,
'2023-09-24': false,
'2023-09-25': false,
'2023-09-26': false,
'2023-09-27': false,
'2023-09-28': false,
'2023-09-29': false,
'2023-09-30': false,
'2023-10-01': false,
'2023-10-02': false,
'2023-10-03': false,
'2023-10-04': false,
'2023-10-05': false,
'2023-10-06': false,
'2023-10-07': false,
'2023-10-08': false,
'2023-10-09': false,
'2023-10-10': false,
'2023-10-11': false,
'2023-10-12': false,
'2023-10-13': false,
'2023-10-14': false,
'2023-10-15': false,
'2023-10-16': false,
'2023-10-17': false,
'2023-10-18': false,
'2023-10-19': false,
'2023-10-20': false,
'2023-10-21': false,
'2023-10-22': false,
'2023-10-23': false,
'2023-10-24': false,
'2023-10-25': false,
'2023-10-26': false,
'2023-10-27': false,
'2023-10-28': false,
'2023-10-29': false,
'2023-10-30': false,
'2023-10-31': false,
'2023-11-01': false,
'2023-11-02': false,
'2023-11-03': false,
'2023-11-04': false,
'2023-11-05': false,
'2023-11-06': false,
'2023-11-07': false,
'2023-11-08': false,
'2023-11-09': false,
'2023-11-10': false,
'2023-11-11': false,
'2023-11-12': false,
'2023-11-13': false,
'2023-11-14': false,
'2023-11-15': false,
'2023-11-16': false,
'2023-11-17': false,
'2023-11-18': false,
'2023-11-19': false,
'2023-11-20': false,
'2023-11-21': false,
'2023-11-22': false,
'2023-11-23': false,
'2023-11-24': false,
'2023-11-25': false,
'2023-11-26': false,
'2023-11-27': false,
'2023-11-28': false,
'2023-11-29': false,
'2023-11-30': false,
'2023-12-01': false,
'2023-12-02': false,
'2023-12-03': false,
'2023-12-04': false,
'2023-12-05': false,
'2023-12-06': false,
'2023-12-07': false,
'2023-12-08': false,
'2023-12-09': false,
});
t.end();
});

View file

@ -1,65 +0,0 @@
// todo: use import assertions once they're supported by Node.js & ESLint
// https://github.com/tc39/proposal-import-assertions
import {createRequire} from 'module';
const require = createRequire(import.meta.url);
import tap from 'tap';
import {createClient} from '../index.js';
import {profile as rawProfile} from '../p/db/index.js';
const res0 = require('./fixtures/db-journey-overnight-0.json');
const expected0 = require('./fixtures/db-journey-overnight-0.expected.json');
const res1 = require('./fixtures/db-journey-overnight-1.json');
import {overnightJourney as expected1} from './fixtures/db-journey-overnight-1.expected.js';
const client = createClient(rawProfile, 'public-transport/hafas-client:test');
const {profile} = client;
const baseOpt = {
results: null,
via: null,
stopovers: false,
transfers: -1,
transferTime: 0,
accessibility: 'none',
bike: false,
walkingSpeed: 'normal',
startWithWalking: true,
tickets: true,
polylines: true,
remarks: true,
scheduledDays: false,
products: {},
};
tap.test('parses a journey across day with correct timestamps', (t) => {
const opt = {
...baseOpt,
results: 4,
stopovers: true,
departure: '2023-11-13T22:00:00+01:00',
};
const common = profile.parseCommon({profile, opt, res: res0});
const ctx = {profile, opt, common, res: res0};
const journey = profile.parseJourney(ctx, res0.outConL[16]);
t.same(journey, expected0);
t.end();
});
tap.test('parses a journey across dates with correct timestamps', (t) => {
const opt = {
...baseOpt,
results: 1,
stopovers: true,
departure: '2023-11-24T22:00+01:00',
};
const common = profile.parseCommon({profile, opt, res: res1});
const ctx = {profile, opt, common, res: res1};
const journey = profile.parseJourney(ctx, res1.outConL[0]);
t.same(journey, expected1);
t.end();
});

View file

@ -1,41 +0,0 @@
// todo: use import assertions once they're supported by Node.js & ESLint
// https://github.com/tc39/proposal-import-assertions
import {createRequire} from 'module';
const require = createRequire(import.meta.url);
import tap from 'tap';
import {createClient} from '../index.js';
import {profile as rawProfile} from '../p/db/index.js';
const res = require('./fixtures/db-journey-polyline.json');
import {dbJourneyPolyline as expected} from './fixtures/db-journey-polyline.js';
const client = createClient(rawProfile, 'public-transport/hafas-client:test');
const {profile} = client;
const opt = {
results: null,
via: null,
stopovers: true,
transfers: -1,
transferTime: 0,
accessibility: 'none',
bike: false,
tickets: true,
polylines: true,
remarks: false,
walkingSpeed: 'normal',
startWithWalking: true,
scheduledDays: false,
departure: '2020-07-27T10:00+02:00',
products: {},
};
tap.test('parses a journey with an embedded polyline correctly', (t) => {
const common = profile.parseCommon({profile, opt, res});
const ctx = {profile, opt, common, res};
const journey = profile.parseJourney(ctx, res.outConL[0]);
t.same(journey, expected);
t.end();
});

View file

@ -1,45 +0,0 @@
// todo: use import assertions once they're supported by Node.js & ESLint
// https://github.com/tc39/proposal-import-assertions
import {createRequire} from 'module';
const require = createRequire(import.meta.url);
import tap from 'tap';
import {createClient} from '../index.js';
import {profile as rawProfile} from '../p/db/index.js';
const resDTZOffset0 = require('./fixtures/db-journey-dtzoffset-0.json');
const resATZOffset0 = require('./fixtures/db-journey-atzoffset-0.json');
const client = createClient(rawProfile, 'public-transport/hafas-client:test');
const {profile} = client;
const opt = {
stopovers: false,
tickets: false,
polylines: false,
subStops: true,
entrances: true,
remarks: true,
};
// https://github.com/public-transport/hafas-client/issues/237
tap.test('parses a journey whose first leg has a dTZOffset of 0 (#237)', (t) => {
const common = profile.parseCommon({profile, opt, res: resDTZOffset0});
const ctx = {profile, opt, common, res: resDTZOffset0};
const journey = profile.parseJourney(ctx, resDTZOffset0.outConL[0]);
const firstLeg = journey.legs[0];
t.notOk((/Z$/).test(firstLeg.departure), 'firstLeg.departure has TZ offset "Z"');
t.end();
});
tap.test('parses a journey whose first leg has a aTZOffset of 0 (#237)', (t) => {
const common = profile.parseCommon({profile, opt, res: resATZOffset0});
const ctx = {profile, opt, common, res: resATZOffset0};
const journey = profile.parseJourney(ctx, resATZOffset0.outConL[0]);
const lastLeg = journey.legs[0];
t.notOk((/Z$/).test(lastLeg.departure), 'lastLeg.departure has TZ offset "Z"');
t.end();
});

View file

@ -22,7 +22,7 @@ const opt = {
accessibility: 'none', accessibility: 'none',
bike: false, bike: false,
tickets: true, tickets: true,
polylines: false, polylines: true,
remarks: true, remarks: true,
walkingSpeed: 'normal', walkingSpeed: 'normal',
startWithWalking: true, startWithWalking: true,

View file

@ -1,30 +0,0 @@
// todo: use import assertions once they're supported by Node.js & ESLint
// https://github.com/tc39/proposal-import-assertions
import {createRequire} from 'module';
const require = createRequire(import.meta.url);
import tap from 'tap';
import {createClient} from '../index.js';
import {profile as rawProfile} from '../p/db/index.js';
const res = require('./fixtures/db-stop.json');
import {dbStop as expected} from './fixtures/db-stop.js';
const client = createClient(rawProfile, 'public-transport/hafas-client:test');
const {profile} = client;
const opt = {
linesOfStops: false, // parse & expose lines at the stop/station?
subStops: true,
entrances: true,
remarks: true,
};
tap.test('parses a stop() response correctly (DB)', (t) => {
const common = profile.parseCommon({profile, opt, res});
const ctx = {profile, opt, common, res};
const stop = profile.parseLocation(ctx, res.locL[0]);
t.same(stop, expected);
t.end();
});

View file

@ -1,269 +1,322 @@
const dbArrivals = [ const dbArrivals = [
{ {
tripId: '1|1144239|52|80|9062020', "tripId": "20241208-c33bba6c-a73a-3eec-8a64-76356c922ece",
stop: { "stop": {
type: 'stop', "type": "stop",
id: '730985', "id": "8089100",
name: 'Jungfernheide Bahnhof (S+U), Berlin', "name": "Berlin Jungfernheide (S)",
location: { "location": null
type: 'location',
id: '730985',
latitude: 52.530866,
longitude: 13.300781,
}, },
products: { "when": "2024-12-08T01:00:00+01:00",
nationalExpress: false, "plannedWhen": "2024-12-08T01:00:00+01:00",
national: false, "delay": 0,
regionalExpress: false, "platform": "6",
regional: true, "plannedPlatform": "6",
suburban: true, "direction": null,
bus: true, "provenance": "Berlin Beusselstraße",
ferry: false, "line": {
subway: true, "type": "line",
tram: false, "id": "s-42-42323",
taxi: false, "fahrtNr": 42323,
"name": "S 42 (42323)",
"public": true,
"productName": "S",
"mode": "train",
"product": "suburban",
"operator": null
}, },
station: { "remarks": [
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', "code": "FB",
id: '3-bb-re6', "summary": "Fahrradmitnahme begrenzt möglich",
fahrtNr: null, "text": "Fahrradmitnahme begrenzt möglich",
name: 'Bus RE6', "type": "hint"
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',
},
], ],
"origin": {
"type": "stop",
"id": "8089118",
"name": "Berlin Beusselstraße",
"location": null
}, },
lines: [ "destination": null
{
type: 'line',
id: '5-vbbbvb-n7',
fahrtNr: null,
name: 'Bus N7',
public: true,
mode: 'bus',
product: 'bus',
}, },
{ {
type: 'line', "tripId": "20241208-89eeca5a-1768-3713-894a-dd088977f42b",
id: '5-vbbbvb-x9', "stop": {
fahrtNr: null, "type": "stop",
name: 'Bus X9', "id": "730985",
public: true, "name": "Jungfernheide Bahnhof (S+U), Berlin",
mode: 'bus', "location": null
product: 'bus', },
"when": "2024-12-08T01:00:00+01:00",
"plannedWhen": "2024-12-08T01:00:00+01:00",
"delay": 0,
"platform": null,
"plannedPlatform": null,
"direction": null,
"provenance": "Rudow (U), Berlin",
"line": {
"type": "line",
"id": "u-7-15421",
"fahrtNr": 15421,
"name": "U 7 (15421)",
"public": true,
"productName": "U",
"mode": "train",
"product": "subway",
"operator": null
},
"remarks": [
{
"code": "FB",
"summary": "Fahrradmitnahme begrenzt möglich",
"text": "Fahrradmitnahme begrenzt möglich",
"type": "hint"
}, },
{ {
type: 'line', "code": "RG",
id: '5-vbbbvb-m21', "summary": "Behindertengerechtes Fahrzeug",
fahrtNr: null, "text": "Behindertengerechtes Fahrzeug",
name: 'Bus M21', "type": "hint"
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',
},
], ],
"origin": {
"type": "stop",
"id": "732218",
"name": "Rudow (U), Berlin",
"location": null
}, },
when: '2020-06-09T17:21:00+02:00', "destination": null
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: [], {
"tripId": "20241208-2dc4f2d4-a1e1-3bbf-a607-98ff71c927d0",
"stop": {
"type": "stop",
"id": "730985",
"name": "Jungfernheide Bahnhof (S+U), Berlin",
"location": null
}, },
"when": "2024-12-08T01:03:00+01:00",
"plannedWhen": "2024-12-08T01:03:00+01:00",
"delay": 0,
"platform": null,
"plannedPlatform": null,
"direction": null,
"provenance": "Goerdelersteg, Berlin",
"line": {
"type": "line",
"id": "bus-m21-93424",
"fahrtNr": 93424,
"name": "Bus M21 (93424)",
"public": true,
"productName": "Bus",
"mode": "bus",
"product": "bus",
"operator": null
},
"remarks": [
{
"code": "NF",
"summary": "keine Fahrradbeförderung möglich",
"text": "keine Fahrradbeförderung möglich",
"type": "hint"
},
{
"code": "RG",
"summary": "Behindertengerechtes Fahrzeug",
"text": "Behindertengerechtes Fahrzeug",
"type": "hint"
}
],
"origin": {
"type": "stop",
"id": "730993",
"name": "Goerdelersteg, Berlin",
"location": null
},
"destination": null
},
{
"tripId": "20241208-6fa6d37c-a1c0-3f84-bdac-0424705bffaf",
"stop": {
"type": "stop",
"id": "8089100",
"name": "Berlin Jungfernheide (S)",
"location": null
},
"when": "2024-12-08T01:05:00+01:00",
"plannedWhen": "2024-12-08T01:05:00+01:00",
"delay": 0,
"platform": "5",
"plannedPlatform": "5",
"direction": null,
"provenance": "Berlin Beusselstraße",
"line": {
"type": "line",
"id": "s-41-41254",
"fahrtNr": 41254,
"name": "S 41 (41254)",
"public": true,
"productName": "S",
"mode": "train",
"product": "suburban",
"operator": null
},
"remarks": [
{
"code": "FB",
"summary": "Fahrradmitnahme begrenzt möglich",
"text": "Fahrradmitnahme begrenzt möglich",
"type": "hint"
}
],
"origin": {
"type": "stop",
"id": "8089118",
"name": "Berlin Beusselstraße",
"location": null
},
"destination": null
},
{
"tripId": "20241208-c4abf007-d667-3bf1-87a8-2d1b153c014d",
"stop": {
"type": "stop",
"id": "730985",
"name": "Jungfernheide Bahnhof (S+U), Berlin",
"location": null
},
"when": "2024-12-08T01:10:00+01:00",
"plannedWhen": "2024-12-08T01:10:00+01:00",
"delay": 0,
"platform": null,
"plannedPlatform": null,
"direction": null,
"provenance": "Rudow (U), Berlin",
"line": {
"type": "line",
"id": "u-7-15422",
"fahrtNr": 15422,
"name": "U 7 (15422)",
"public": true,
"productName": "U",
"mode": "train",
"product": "subway",
"operator": null
},
"remarks": [
{
"code": "FB",
"summary": "Fahrradmitnahme begrenzt möglich",
"text": "Fahrradmitnahme begrenzt möglich",
"type": "hint"
},
{
"code": "RG",
"summary": "Behindertengerechtes Fahrzeug",
"text": "Behindertengerechtes Fahrzeug",
"type": "hint"
}
],
"origin": {
"type": "stop",
"id": "732218",
"name": "Rudow (U), Berlin",
"location": null
},
"destination": null
},
{
"tripId": "20241208-c8b6e3e4-6acb-3237-b89e-1fca72497555",
"stop": {
"type": "stop",
"id": "8089100",
"name": "Berlin Jungfernheide (S)",
"location": null
},
"when": "2024-12-08T01:10:00+01:00",
"plannedWhen": "2024-12-08T01:10:00+01:00",
"delay": 0,
"platform": "6",
"plannedPlatform": "6",
"direction": null,
"provenance": "Berlin Beusselstraße",
"line": {
"type": "line",
"id": "s-42-42325",
"fahrtNr": 42325,
"name": "S 42 (42325)",
"public": true,
"productName": "S",
"mode": "train",
"product": "suburban",
"operator": null
},
"remarks": [
{
"code": "FB",
"summary": "Fahrradmitnahme begrenzt möglich",
"text": "Fahrradmitnahme begrenzt möglich",
"type": "hint"
}
],
"origin": {
"type": "stop",
"id": "8089118",
"name": "Berlin Beusselstraße",
"location": null
},
"destination": null
},
{
"tripId": "20241208-f9d83ab7-d603-3344-87c0-a65ecf0f8524",
"stop": {
"type": "stop",
"id": "730985",
"name": "Jungfernheide Bahnhof (S+U), Berlin",
"location": null
},
"when": "2024-12-08T01:10:00+01:00",
"plannedWhen": "2024-12-08T01:10:00+01:00",
"delay": 0,
"platform": null,
"plannedPlatform": null,
"direction": null,
"provenance": "Rathaus Spandau (S+U), Berlin",
"line": {
"type": "line",
"id": "u-7-15752",
"fahrtNr": 15752,
"name": "U 7 (15752)",
"public": true,
"productName": "U",
"mode": "train",
"product": "subway",
"operator": null
},
"remarks": [
{
"code": "FB",
"summary": "Fahrradmitnahme begrenzt möglich",
"text": "Fahrradmitnahme begrenzt möglich",
"type": "hint"
},
{
"code": "RG",
"summary": "Behindertengerechtes Fahrzeug",
"text": "Behindertengerechtes Fahrzeug",
"type": "hint"
}
],
"origin": {
"type": "stop",
"id": "731176",
"name": "Rathaus Spandau (S+U), Berlin",
"location": null
},
"destination": null
}
]; ];
export { export {

File diff suppressed because it is too large Load diff

View file

@ -1,630 +0,0 @@
{
"common": {
"locL": [
{
"lid": "A=1@O=Hauptbahnhof Bushst.1-3, Bielefeld@X=8532669@Y=52028585@U=80@L=930200@",
"type": "S",
"name": "Hauptbahnhof Bushst.1-3, Bielefeld",
"icoX": 0,
"extId": "930200",
"state": "F",
"crd": {
"x": 8532669,
"y": 52028585,
"floor": 0
},
"pCls": 303,
"pRefL": [
1,
2,
3,
4,
5,
6,
7,
8
],
"mMastLocX": 1
},
{
"lid": "A=1@O=Bielefeld Hbf@X=8532723@Y=52029259@U=80@L=8000036@",
"type": "S",
"name": "Bielefeld Hbf",
"icoX": 2,
"extId": "8000036",
"state": "F",
"crd": {
"x": 8532777,
"y": 52029421,
"z": 0,
"floor": 0
},
"pCls": 303,
"pRefL": [
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
1,
2,
24,
4,
5,
25,
6,
26,
27,
28,
29,
7,
8,
30,
31,
32,
33
]
}
],
"prodL": [
{
"name": "Bus 87",
"nameS": "87",
"number": "87",
"icoX": 0,
"cls": 32,
"oprX": 0,
"prodCtx": {
"name": "Bus 87",
"num": "73374",
"line": "87",
"lineId": "5_owl032_87",
"matchId": "87",
"catOut": "Bus",
"catOutS": "Bus",
"catOutL": "Bus",
"catIn": "Bus",
"catCode": "5",
"admin": "owl032"
}
},
{
"name": "Bus 52",
"nameS": "52",
"icoX": 0,
"cls": 32,
"prodCtx": {
"name": "Bus 52",
"line": "52",
"lineId": "5_owl032_52",
"catOut": "Bus ",
"catOutS": "Bus",
"catOutL": "Bus"
}
},
{
"name": "Bus 54",
"nameS": "54",
"icoX": 0,
"cls": 32,
"prodCtx": {
"name": "Bus 54",
"line": "54",
"lineId": "5_owl032_54",
"catOut": "Bus ",
"catOutS": "Bus",
"catOutL": "Bus"
}
},
{
"name": "Bus 61",
"nameS": "61",
"icoX": 0,
"cls": 32,
"prodCtx": {
"name": "Bus 61",
"line": "61",
"lineId": "5_owl051_61",
"catOut": "Bus ",
"catOutS": "Bus",
"catOutL": "Bus"
}
},
{
"name": "Bus 62",
"nameS": "62",
"icoX": 0,
"cls": 32,
"prodCtx": {
"name": "Bus 62",
"line": "62",
"lineId": "5_owl051_62",
"catOut": "Bus ",
"catOutS": "Bus",
"catOutL": "Bus"
}
},
{
"name": "Bus 87",
"nameS": "87",
"icoX": 0,
"cls": 32,
"prodCtx": {
"name": "Bus 87",
"line": "87",
"lineId": "5_owl032_87",
"catOut": "Bus ",
"catOutS": "Bus",
"catOutL": "Bus"
}
},
{
"name": "Bus 95",
"nameS": "95",
"icoX": 0,
"cls": 32,
"prodCtx": {
"name": "Bus 95",
"line": "95",
"lineId": "5_owl032_95",
"catOut": "Bus ",
"catOutS": "Bus",
"catOutL": "Bus"
}
},
{
"name": "Bus 369",
"nameS": "369",
"icoX": 0,
"cls": 32,
"prodCtx": {
"name": "Bus 369",
"line": "369",
"lineId": "5_owl032_369",
"catOut": "Bus ",
"catOutS": "Bus",
"catOutL": "Bus"
}
},
{
"name": "Bus 80.2",
"nameS": "80.2",
"icoX": 0,
"cls": 32,
"prodCtx": {
"name": "Bus 80.2",
"line": "80.2",
"lineId": "5_owl050_80.2",
"catOut": "Bus ",
"catOutS": "Bus",
"catOutL": "Bus"
}
},
{
"name": "ICE",
"icoX": 2,
"cls": 1,
"prodCtx": {
"name": "ICE ",
"line": "",
"catOut": "ICE ",
"catOutS": "ICE",
"catOutL": "Intercity-Express"
}
},
{
"name": "EC",
"icoX": 3,
"cls": 2,
"prodCtx": {
"name": "EC ",
"line": "",
"catOut": "EC ",
"catOutS": "EC",
"catOutL": "Eurocity"
}
},
{
"name": "IC",
"icoX": 4,
"cls": 2,
"prodCtx": {
"name": "IC ",
"line": "",
"catOut": "IC ",
"catOutS": "IC",
"catOutL": "Intercity"
}
},
{
"name": "FLX",
"icoX": 5,
"cls": 4,
"prodCtx": {
"name": "FLX",
"line": "",
"catOut": "DPF ",
"catOutS": "DPF",
"catOutL": "Fernreisezug externer EU"
}
},
{
"name": "Bus 61",
"nameS": "61",
"icoX": 0,
"cls": 8,
"prodCtx": {
"name": "Bus 61",
"line": "61",
"lineId": "3_R2_____61!!949218!!5787966",
"catOut": "Bus ",
"catOutS": "Bsv",
"catOutL": "SEV-Bus"
}
},
{
"name": "Bus 69",
"nameS": "69",
"icoX": 0,
"cls": 8,
"prodCtx": {
"name": "Bus 69",
"line": "69",
"lineId": "3_R2_____69!!949218!!5787966",
"catOut": "Bus ",
"catOutS": "Bsv",
"catOutL": "SEV-Bus"
}
},
{
"name": "Bus 78",
"nameS": "78",
"icoX": 0,
"cls": 8,
"prodCtx": {
"name": "Bus 78",
"line": "78",
"lineId": "3_R2_____78!!949218!!5787966",
"catOut": "Bus ",
"catOutS": "Bsv",
"catOutL": "SEV-Bus"
}
},
{
"name": "Bus 82",
"nameS": "82",
"icoX": 0,
"cls": 8,
"prodCtx": {
"name": "Bus 82",
"line": "82",
"lineId": "3_R2_____82",
"catOut": "Bus ",
"catOutS": "Bsv",
"catOutL": "SEV-Bus"
}
},
{
"name": "Bus SEV",
"nameS": "SEV",
"icoX": 0,
"cls": 8,
"prodCtx": {
"name": "Bus SEV",
"line": "SEV",
"lineId": "3_NWBus__SEV!!896828!!5815064",
"catOut": "Bus ",
"catOutS": "Bsv",
"catOutL": "SEV-Bus"
}
},
{
"name": "NWB",
"icoX": 6,
"cls": 8,
"prodCtx": {
"name": "NWB",
"line": "",
"catOut": "DPN ",
"catOutS": "DPN",
"catOutL": "Nahreisezug"
}
},
{
"name": "RB",
"icoX": 6,
"cls": 8,
"prodCtx": {
"name": "RB ",
"line": "",
"catOut": "DPN ",
"catOutS": "DPN",
"catOutL": "Nahreisezug"
}
},
{
"name": "RE",
"icoX": 6,
"cls": 8,
"prodCtx": {
"name": "RE ",
"line": "",
"catOut": "DPN ",
"catOutS": "DPN",
"catOutL": "Nahreisezug"
}
},
{
"name": "TRI",
"icoX": 6,
"cls": 8,
"prodCtx": {
"name": "TRI",
"line": "",
"catOut": "DPN ",
"catOutS": "DPN",
"catOutL": "Nahreisezug"
}
},
{
"name": "WFB",
"icoX": 6,
"cls": 8,
"prodCtx": {
"name": "WFB",
"line": "",
"catOut": "DPN ",
"catOutS": "DPN",
"catOutL": "Nahreisezug"
}
},
{
"name": "Bus 48",
"nameS": "48",
"icoX": 0,
"cls": 32,
"prodCtx": {
"name": "Bus 48",
"line": "48",
"lineId": "5_owl051_48",
"catOut": "Bus ",
"catOutS": "Bus",
"catOutL": "Bus"
}
},
{
"name": "Bus 59",
"nameS": "59",
"icoX": 0,
"cls": 32,
"prodCtx": {
"name": "Bus 59",
"line": "59",
"lineId": "5_owl051_59",
"catOut": "Bus ",
"catOutS": "Bus",
"catOutL": "Bus"
}
},
{
"name": "Bus 88",
"nameS": "88",
"icoX": 0,
"cls": 32,
"prodCtx": {
"name": "Bus 88",
"line": "88",
"lineId": "5_owl051_88",
"catOut": "Bus ",
"catOutS": "Bus",
"catOutL": "Bus"
}
},
{
"name": "Bus N8",
"nameS": "N8",
"icoX": 0,
"cls": 32,
"prodCtx": {
"name": "Bus N8",
"line": "N8",
"lineId": "5_owl032_N8",
"catOut": "Bus ",
"catOutS": "Bus",
"catOutL": "Bus"
}
},
{
"name": "Bus 196",
"nameS": "196",
"icoX": 0,
"cls": 32,
"prodCtx": {
"name": "Bus 196",
"line": "196",
"lineId": "5_owl032_196",
"catOut": "Bus ",
"catOutS": "Bus",
"catOutL": "Bus"
}
},
{
"name": "Bus 350",
"nameS": "350",
"icoX": 0,
"cls": 32,
"prodCtx": {
"name": "Bus 350",
"line": "350",
"lineId": "5_owl021_350",
"catOut": "Bus ",
"catOutS": "Bus",
"catOutL": "Bus"
}
},
{
"name": "Bus 351",
"nameS": "351",
"icoX": 0,
"cls": 32,
"prodCtx": {
"name": "Bus 351",
"line": "351",
"lineId": "5_owl021_351",
"catOut": "Bus ",
"catOutS": "Bus",
"catOutL": "Bus"
}
},
{
"name": "STB 1",
"nameS": "1",
"icoX": 7,
"cls": 256,
"prodCtx": {
"name": "STB 1",
"line": "1",
"lineId": "8_owl031_1",
"catOut": "STB ",
"catOutS": "stb",
"catOutL": "Stadtbahn"
}
},
{
"name": "STB 2",
"nameS": "2",
"icoX": 7,
"cls": 256,
"prodCtx": {
"name": "STB 2",
"line": "2",
"lineId": "8_owl031_2",
"catOut": "STB ",
"catOutS": "stb",
"catOutL": "Stadtbahn"
}
},
{
"name": "STB 3",
"nameS": "3",
"icoX": 7,
"cls": 256,
"prodCtx": {
"name": "STB 3",
"line": "3",
"lineId": "8_owl031_3",
"catOut": "STB ",
"catOutS": "stb",
"catOutL": "Stadtbahn"
}
},
{
"name": "STB 4",
"nameS": "4",
"icoX": 7,
"cls": 256,
"prodCtx": {
"name": "STB 4",
"line": "4",
"lineId": "8_owl031_4",
"catOut": "STB ",
"catOutS": "stb",
"catOutL": "Stadtbahn"
}
}
],
"opL": [
{
"name": "Nahreisezug",
"icoX": 1
}
],
"icoL": [
{
"res": "Bus"
},
{
"res": "DPN",
"txt": "Nahreisezug"
},
{
"res": "ICE"
},
{
"res": "EC"
},
{
"res": "IC"
},
{
"res": "DPF"
},
{
"res": "DPN"
},
{
"res": "STB"
}
],
"lDrawStyleL": [
{
"sIcoX": 0,
"type": "SOLID"
},
{
"type": "SOLID"
}
]
},
"type": "DEP",
"jnyL": [
{
"jid": "1|1616073|0|80|15102022",
"date": "20221015",
"prodX": 0,
"dirTxt": "Hauptbahnhof Bushst.1-3, Bielefeld",
"dirFlg": "2",
"status": "P",
"isRchbl": true,
"stbStop": {
"locX": 0,
"idx": 0,
"dProdX": 0,
"dTimeS": "154600",
"dTZOffset": 120,
"type": "N"
},
"subscr": "F",
"prodL": [
{
"prodX": 0,
"fLocX": 0,
"tLocX": 0,
"fIdx": 0,
"tIdx": 37
}
],
"sumLDrawStyleX": 0,
"resLDrawStyleX": 1,
"trainStartDate": "20221015"
}
],
"fpB": "20211212",
"fpE": "20231209",
"planrtTS": "1665819982",
"sD": "20221015",
"sT": "094752",
"locRefL": [
0
]
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,640 +0,0 @@
{
"common": {
"locL": [
{
"lid": "A=1@O=Moser, Achstetten@X=9898310@Y=48258859@U=80@L=800002@",
"type": "S",
"name": "Moser, Achstetten",
"icoX": 0,
"extId": "800002",
"state": "F",
"crd": {
"x": 9898310,
"y": 48258859,
"floor": 0
},
"pCls": 544
},
{
"lid": "A=1@O=Dellmensingen Schule, Erbach (Donau)@X=9901834@Y=48302844@U=80@L=800258@",
"type": "S",
"name": "Dellmensingen Schule, Erbach (Donau)",
"icoX": 0,
"extId": "800258",
"state": "F",
"crd": {
"x": 9901834,
"y": 48302844,
"floor": 0
},
"pCls": 32
},
{
"lid": "A=1@O=ZOB Ost, Ulm@X=9983887@Y=48397644@U=80@L=801345@",
"type": "S",
"name": "ZOB Ost, Ulm",
"icoX": 0,
"extId": "801345",
"state": "F",
"crd": {
"x": 9983887,
"y": 48397644,
"floor": 0
},
"pCls": 40
},
{
"lid": "A=1@O=Ulm Hbf@X=9982224@Y=48399433@U=80@L=8000170@",
"type": "S",
"name": "Ulm Hbf",
"icoX": 1,
"extId": "8000170",
"state": "F",
"crd": {
"x": 9982422,
"y": 48399585,
"z": 0,
"floor": 0
},
"pCls": 299
},
{
"lid": "A=1@O=München Hbf@X=11558339@Y=48140229@U=80@L=8000261@",
"type": "S",
"name": "München Hbf",
"icoX": 5,
"extId": "8000261",
"state": "F",
"crd": {
"x": 11558744,
"y": 48140364,
"z": 0,
"floor": 0
},
"pCls": 447
},
{
"lid": "A=1@O=München Hbf@X=11559004@Y=48139429@U=199@L=618000261@",
"type": "S",
"name": "München Hbf",
"icoX": 8,
"extId": "618000261",
"state": "F",
"crd": {
"x": 11559004,
"y": 48139429,
"floor": 0
},
"pCls": 0,
"entry": true,
"mMastLocX": 4
},
{
"lid": "A=1@O=Karlsplatz (Stachus), München@X=11565584@Y=48140148@U=80@L=800001@",
"type": "S",
"name": "Karlsplatz (Stachus), München",
"icoX": 0,
"extId": "800001",
"state": "F",
"crd": {
"x": 11565584,
"y": 48140148,
"floor": 0
},
"pCls": 432,
"mMastLocX": 7
},
{
"lid": "A=1@O=München Karlsplatz@X=11565620@Y=48139456@U=80@L=8004132@",
"type": "S",
"name": "München Karlsplatz",
"icoX": 9,
"extId": "8004132",
"state": "F",
"crd": {
"x": 11565521,
"y": 48139564,
"z": 0,
"floor": 0
},
"pCls": 432
}
],
"prodL": [
{
"name": "Bus 212",
"nameS": "212",
"number": "212",
"icoX": 0,
"cls": 32,
"prodCtx": {
"name": "Bus 212",
"num": "913",
"line": "212",
"matchId": "212",
"catOut": "Bus",
"catOutS": "Bus",
"catOutL": "Bus",
"catIn": "Bus",
"catCode": "5",
"admin": "ald020"
}
},
{
"name": "Bus 212",
"nameS": "212",
"number": "212",
"icoX": 0,
"cls": 32,
"prodCtx": {
"name": "Bus 212",
"num": "913",
"line": "212",
"lineId": "5_ald020_212",
"matchId": "212",
"catOut": "Bus",
"catOutS": "Bus",
"catOutL": "Bus",
"catIn": "Bus",
"catCode": "5",
"admin": "ald020"
}
},
{
"name": "Bus 12",
"nameS": "12",
"number": "12",
"icoX": 0,
"cls": 32,
"prodCtx": {
"name": "Bus 12",
"num": "15266",
"line": "12",
"matchId": "12",
"catOut": "Bus",
"catOutS": "Bus",
"catOutL": "Bus",
"catIn": "Bus",
"catCode": "5",
"admin": "ald087"
}
},
{
"name": "Bus 12",
"nameS": "12",
"number": "12",
"icoX": 0,
"cls": 32,
"prodCtx": {
"name": "Bus 12",
"num": "15266",
"line": "12",
"lineId": "5_ald087_12",
"matchId": "12",
"catOut": "Bus",
"catOutS": "Bus",
"catOutL": "Bus",
"catIn": "Bus",
"catCode": "5",
"admin": "ald087"
}
},
{
"name": "Walk",
"icoX": 2,
"prodCtx": {
"name": "Walk"
}
},
{
"name": "RE 57057",
"nameS": "RE",
"number": "57057",
"icoX": 3,
"cls": 8,
"oprX": 0,
"prodCtx": {
"name": "RE 57057",
"num": "57057",
"matchId": "9",
"catOut": "RE",
"catOutS": "RE",
"catOutL": "Regional-Express",
"catIn": "RE",
"catCode": "3",
"admin": "800734",
"addName": "RE 9"
},
"addName": "RE 9"
}
],
"opL": [
{
"name": "DB Regio AG Bayern",
"icoX": 4
}
],
"remL": [
{
"type": "A",
"code": "PF",
"prio": 200,
"icoX": 6,
"txtN": "Please wear an FFP2 mask. You are legally required to do so"
},
{
"type": "A",
"code": "FB",
"prio": 260,
"icoX": 7,
"txtN": "Number of bicycles conveyed limited"
},
{
"type": "A",
"code": "RC",
"prio": 320,
"icoX": 6,
"txtN": "Reservations at DB ticket machines/travel centres + many DB agencies"
},
{
"type": "A",
"code": "ER",
"prio": 560,
"icoX": 6,
"txtN": "vehicle-mounted accessaid"
}
],
"icoL": [
{
"res": "Bus"
},
{
"res": "ICE"
},
{
"res": "prod_walk"
},
{
"res": "RE"
},
{
"res": "RE",
"txt": "DB Regio AG Bayern"
},
{
"res": "ECE"
},
{
"res": "attr_info"
},
{
"res": "attr_bike"
},
{
"res": "STA"
},
{
"res": "S"
}
],
"lDrawStyleL": [
{
"sIcoX": 0,
"type": "SOLID"
},
{
"type": "SOLID"
},
{
"sIcoX": 2,
"type": "SOLID"
},
{
"type": "DOT"
},
{
"sIcoX": 3,
"type": "SOLID"
}
]
},
"outConL": [
{
"cid": "DirectConReq",
"date": "20210817",
"dur": "034600",
"durS": "033700",
"durR": "033700",
"chg": 2,
"sDays": {
"sDaysR": "runs Mo - Fr, not 1. Nov ",
"sDaysB": "0000000000000000000000000000000000000000000001F3E7CF9F3E7CF9F3E7CF9F3E7CF9F3E7CF8F3E7CF9F3E0"
},
"dep": {
"locX": 0,
"idx": 5,
"dProdX": 0,
"dTimeS": "154600",
"dProgType": "PROGNOSED",
"dTZOffset": 120,
"type": "N"
},
"arr": {
"locX": 6,
"aTimeS": "193200",
"type": "N"
},
"secL": [
{
"type": "JNY",
"dep": {
"locX": 0,
"idx": 5,
"dProdX": 0,
"dTimeS": "154600",
"dProgType": "PROGNOSED",
"dTZOffset": 120,
"type": "N"
},
"arr": {
"locX": 1,
"idx": 12,
"aTimeS": "160000",
"aProgType": "PROGNOSED",
"aTZOffset": 120,
"type": "N"
},
"jny": {
"jid": "1|1722205|0|80|17082021",
"prodX": 1,
"dirTxt": "Rabenstraße, Laupheim",
"dirFlg": "2",
"status": "P",
"isRchbl": true,
"ctxRecon": "T$A=1@O=Moser, Achstetten@L=800002@a=128@$A=1@O=Dellmensingen Schule, Erbach (Donau)@L=800258@a=128@$202108171546$202108171600$Bus 212$$1$$$$",
"subscr": "F",
"chgDurR": 5,
"prodL": [
{
"prodX": 1,
"fLocX": 0,
"tLocX": 1,
"fIdx": 5,
"tIdx": 12
}
],
"sumLDrawStyleX": 0,
"resLDrawStyleX": 1,
"trainStartDate": "20210817",
"durS": "001400"
},
"minChg": "000500",
"resState": "N",
"resRecommendation": "N"
},
{
"type": "JNY",
"dep": {
"locX": 1,
"idx": 2,
"dProdX": 2,
"dTimeS": "160500",
"dProgType": "PROGNOSED",
"dTZOffset": 120,
"type": "N"
},
"arr": {
"locX": 2,
"idx": 15,
"aTimeS": "163000",
"aProgType": "PROGNOSED",
"aTZOffset": 120,
"type": "N"
},
"jny": {
"jid": "1|74020|9|80|17082021",
"prodX": 3,
"dirTxt": "ZOB Ost, Ulm",
"dirFlg": "2",
"status": "P",
"isRchbl": true,
"freq": {
"minC": 54,
"maxC": 60,
"numC": 3
},
"ctxRecon": "T$A=1@O=Dellmensingen Schule, Erbach (Donau)@L=800258@a=128@$A=1@O=ZOB Ost, Ulm@L=801345@a=128@$202108171605$202108171630$Bus 12$$1$$$$",
"subscr": "F",
"chgDurR": 53,
"prodL": [
{
"prodX": 3,
"fLocX": 1,
"tLocX": 2,
"fIdx": 2,
"tIdx": 15
}
],
"sumLDrawStyleX": 0,
"resLDrawStyleX": 1,
"trainStartDate": "20210817",
"durS": "002500"
},
"minChg": "000600",
"resState": "N",
"resRecommendation": "N"
},
{
"type": "WALK",
"dep": {
"locX": 2,
"dTimeS": "163000",
"dTZOffset": 120,
"type": "N"
},
"arr": {
"locX": 3,
"aTimeS": "163600",
"aTZOffset": 120,
"type": "N"
},
"gis": {
"dist": 234,
"durS": "000600",
"dirGeo": 10,
"ctx": "H|1|W$A=1@O=ZOB Ost, Ulm@L=801345@a=128@$A=1@O=Ulm Hbf@L=8000170@a=128@$202108171630$202108171636$$$1$$$$",
"gisPrvr": "H",
"getDescr": true,
"getPoly": true,
"sumLDrawStyleX": 2,
"resLDrawStyleX": 3,
"prodX": 4
},
"resState": "N",
"resRecommendation": "N"
},
{
"type": "JNY",
"dep": {
"locX": 3,
"idx": 0,
"dProdX": 5,
"dPltfS": {
"type": "PL",
"txt": "25"
},
"dTimeS": "172300",
"dProgType": "PROGNOSED",
"dTZOffset": 120,
"type": "N"
},
"arr": {
"locX": 4,
"idx": 24,
"aPltfS": {
"type": "PL",
"txt": "17"
},
"aTimeS": "192100",
"aProgType": "PROGNOSED",
"aTZOffset": 120,
"type": "N"
},
"jny": {
"jid": "1|239889|0|80|17082021",
"prodX": 5,
"dirTxt": "München Hbf",
"status": "P",
"isRchbl": true,
"ctxRecon": "T$A=1@O=Ulm Hbf@L=8000170@a=128@$A=1@O=München Hbf@L=8000261@a=128@$202108171723$202108171921$RE 57057$$1$$$$",
"msgL": [
{
"type": "REM",
"remX": 0,
"sty": "I",
"fLocX": 3,
"tLocX": 4,
"fIdx": 0,
"tIdx": 24,
"tagL": [
"RES_JNY_DTL"
],
"sort": 697303040
},
{
"type": "REM",
"remX": 1,
"sty": "I",
"fLocX": 3,
"tLocX": 4,
"fIdx": 0,
"tIdx": 24,
"tagL": [
"RES_JNY_DTL_L"
],
"sort": 705167360
},
{
"type": "REM",
"remX": 2,
"sty": "I",
"fLocX": 3,
"tLocX": 4,
"fIdx": 0,
"tIdx": 24,
"tagL": [
"RES_JNY_DTL"
],
"sort": 713031680
},
{
"type": "REM",
"remX": 3,
"sty": "I",
"fLocX": 3,
"tLocX": 4,
"fIdx": 0,
"tIdx": 24,
"tagL": [
"RES_JNY_DTL"
],
"sort": 744488960
}
],
"subscr": "F",
"prodL": [
{
"prodX": 5,
"fLocX": 3,
"tLocX": 4,
"fIdx": 0,
"tIdx": 24
}
],
"sumLDrawStyleX": 4,
"resLDrawStyleX": 1,
"trainStartDate": "20210817",
"durS": "015800"
},
"minChg": "000200",
"resState": "N",
"resRecommendation": "N"
},
{
"type": "WALK",
"hide": false,
"dep": {
"locX": 4,
"dTimeS": "192100",
"dTZOffset": 120
},
"arr": {
"locX": 6,
"aTimeS": "193200",
"aTZOffset": 0
},
"gis": {
"dist": 701,
"durS": "001100",
"ctx": "H|1|W$A=1@O=München Hbf@L=8000261@a=128@$A=1@O=München Hbf@L=618000261@a=128@$202108171921$202108171923$$$1$$$$±G|1|G@F|A=1@O=München Hbf@X=11559004@Y=48139429@U=199@L=618000261@|A=1@O=Karlsplatz (Stachus), München@X=11565584@Y=48140148@U=80@L=800001@|17082021|192400|193200|fb|ft@0@2000@120@0@100@1@@0@@@@@false@0@-1@0@-1@-1@$f@$f@$f@$f@$f@$§bt@0@2000@120@0@100@1@@0@@@@@false@0@-1@0@-1@-1@$f@$f@$f@$f@$f@$§tf@$f@$f@$f@$f@$f@$§||",
"gisPrvr": "M",
"sumLDrawStyleX": 2,
"resLDrawStyleX": 3,
"prodX": 4
},
"resRecommendation": "U"
}
],
"ctxRecon": "¶HKI¶T$A=1@O=Moser, Achstetten@L=800002@a=128@$A=1@O=Dellmensingen Schule, Erbach (Donau)@L=800258@a=128@$202108171546$202108171600$Bus 212$$1$$$$§T$A=1@O=Dellmensingen Schule, Erbach (Donau)@L=800258@a=128@$A=1@O=ZOB Ost, Ulm@L=801345@a=128@$202108171605$202108171630$Bus 12$$1$$$$§W$A=1@O=ZOB Ost, Ulm@L=801345@a=128@$A=1@O=Ulm Hbf@L=8000170@a=128@$202108171630$202108171636$$$1$$$$§T$A=1@O=Ulm Hbf@L=8000170@a=128@$A=1@O=München Hbf@L=8000261@a=128@$202108171723$202108171921$RE 57057$$1$$$$§W$A=1@O=München Hbf@L=8000261@a=128@$A=1@O=München Hbf@L=618000261@a=128@$202108171921$202108171923$$$1$$$$§G@F$A=1@O=München Hbf@L=618000261@a=128@$A=1@O=Karlsplatz (Stachus), München@L=800001@a=128@$202108171924$202108171932$$$1$$$$¶GP¶ft@0@2000@120@0@100@1@@0@@@@@false@0@-1@0@-1@-1@$f@$f@$f@$f@$f@$§bt@0@2000@120@0@100@1@@0@@@@@false@0@-1@0@-1@-1@$f@$f@$f@$f@$f@$§tf@$f@$f@$f@$f@$f@$§",
"freq": {
"minC": 54
},
"conSubscr": "F",
"resState": "N",
"resRecommendation": "N",
"recState": "C",
"sotRating": 0,
"isSotCon": false,
"showARSLink": false,
"sotCtxt": {
"cnLocX": 0,
"calcDate": "20210817",
"jid": "1|1722205|0|80|-1",
"locMode": "FROM_START",
"pLocX": 0,
"reqMode": "UNKNOWN",
"sectX": 0,
"calcTime": "153402"
},
"cksum": "e68a17a7_3",
"cksumDti": "24d55b5a_3",
"intvlSubscr": "P",
"originType": "INITIAL"
}
],
"fpB": "20201213",
"fpE": "20211211",
"bfATS": -1,
"bfIOSTS": -1,
"planrtTS": "1629207135"
}

View file

@ -1,758 +0,0 @@
{
"common": {
"locL": [
{
"lid": "A=1@O=Karlsplatz (Stachus), München@X=11565584@Y=48140148@U=80@L=800001@",
"type": "S",
"name": "Karlsplatz (Stachus), München",
"icoX": 0,
"extId": "800001",
"state": "F",
"crd": {
"x": 11565584,
"y": 48140148,
"floor": 0
},
"pCls": 432,
"mMastLocX": 1
},
{
"lid": "A=1@O=München Karlsplatz@X=11565620@Y=48139456@U=80@L=8004132@",
"type": "S",
"name": "München Karlsplatz",
"icoX": 1,
"extId": "8004132",
"state": "F",
"crd": {
"x": 11565521,
"y": 48139564,
"z": 0,
"floor": 0
},
"pCls": 432
},
{
"lid": "A=1@O=München Hbf@X=11559004@Y=48139429@U=199@L=618000261@",
"type": "S",
"name": "München Hbf",
"icoX": 2,
"extId": "618000261",
"state": "F",
"crd": {
"x": 11559004,
"y": 48139429,
"floor": 0
},
"pCls": 0,
"entry": true,
"mMastLocX": 3
},
{
"lid": "A=1@O=München Hbf@X=11558339@Y=48140229@U=80@L=8000261@",
"type": "S",
"name": "München Hbf",
"icoX": 3,
"extId": "8000261",
"state": "F",
"crd": {
"x": 11558744,
"y": 48140364,
"z": 0,
"floor": 0
},
"pCls": 447
},
{
"lid": "A=1@O=Ulm Hbf@X=9982224@Y=48399433@U=80@L=8000170@",
"type": "S",
"name": "Ulm Hbf",
"icoX": 7,
"extId": "8000170",
"state": "F",
"crd": {
"x": 9982422,
"y": 48399585,
"z": 0,
"floor": 0
},
"pCls": 299
},
{
"lid": "A=1@O=ZOB Ost, Ulm@X=9983887@Y=48397644@U=80@L=801345@",
"type": "S",
"name": "ZOB Ost, Ulm",
"icoX": 0,
"extId": "801345",
"state": "F",
"crd": {
"x": 9983887,
"y": 48397644,
"floor": 0
},
"pCls": 40
},
{
"lid": "A=1@O=Oberholzheim Hauptstraße, Achstetten@X=9923848@Y=48260792@U=80@L=801494@",
"type": "S",
"name": "Oberholzheim Hauptstraße, Achstetten",
"icoX": 0,
"extId": "801494",
"state": "F",
"crd": {
"x": 9923848,
"y": 48260792,
"floor": 0
},
"pCls": 32
},
{
"lid": "A=1@O=Rathaus, Achstetten@X=9897941@Y=48258563@U=80@L=800132@",
"type": "S",
"name": "Rathaus, Achstetten",
"icoX": 0,
"extId": "800132",
"state": "F",
"crd": {
"x": 9897941,
"y": 48258563,
"floor": 0
},
"pCls": 32
},
{
"lid": "A=1@O=Moser, Achstetten@X=9898310@Y=48258859@U=80@L=800002@",
"type": "S",
"name": "Moser, Achstetten",
"icoX": 0,
"extId": "800002",
"state": "F",
"crd": {
"x": 9898310,
"y": 48258859,
"floor": 0
},
"pCls": 544
}
],
"prodL": [
{
"name": "Walk",
"icoX": 4,
"prodCtx": {
"name": "Walk"
}
},
{
"name": "IC 2094",
"number": "2094",
"icoX": 5,
"cls": 2,
"oprX": 0,
"prodCtx": {
"name": "IC 2094",
"num": "2094",
"matchId": "60",
"catOut": "IC",
"catOutS": "IC",
"catOutL": "Intercity",
"catIn": "IC",
"catCode": "1",
"admin": "80____"
}
},
{
"name": "Bus 24",
"nameS": "24",
"number": "24",
"icoX": 0,
"cls": 32,
"prodCtx": {
"name": "Bus 24",
"num": "45",
"line": "24",
"matchId": "24",
"catOut": "Bus",
"catOutS": "Bus",
"catOutL": "Bus",
"catIn": "Bus",
"catCode": "5",
"admin": "ald020"
}
},
{
"name": "Bus 24",
"nameS": "24",
"number": "24",
"icoX": 0,
"cls": 32,
"prodCtx": {
"name": "Bus 24",
"num": "45",
"line": "24",
"lineId": "5_ald020_24",
"matchId": "24",
"catOut": "Bus",
"catOutS": "Bus",
"catOutL": "Bus",
"catIn": "Bus",
"catCode": "5",
"admin": "ald020"
}
},
{
"name": "Bus 227",
"nameS": "227",
"number": "227",
"icoX": 0,
"cls": 32,
"oprX": 1,
"prodCtx": {
"name": "Bus 227",
"num": "3381",
"line": "227",
"matchId": "227",
"catOut": "Bus",
"catOutS": "Bus",
"catOutL": "Bus",
"catIn": "Bus",
"catCode": "5",
"admin": "rabRAB"
}
},
{
"name": "Bus 227",
"nameS": "227",
"number": "227",
"icoX": 0,
"cls": 32,
"oprX": 1,
"prodCtx": {
"name": "Bus 227",
"num": "3381",
"line": "227",
"lineId": "5_rabRAB_227",
"matchId": "227",
"catOut": "Bus",
"catOutS": "Bus",
"catOutL": "Bus",
"catIn": "Bus",
"catCode": "5",
"admin": "rabRAB"
}
}
],
"opL": [
{
"name": "DB Fernverkehr AG",
"icoX": 6
},
{
"name": "DB ZugBus Regionalverkehr Alb-Bodensee",
"icoX": 11
}
],
"remL": [
{
"type": "A",
"code": "CK",
"prio": 200,
"icoX": 8,
"txtN": "Komfort Check-in possible (visit bahn.de/kci for more information)"
},
{
"type": "A",
"code": "PF",
"prio": 200,
"icoX": 8,
"txtN": "Please wear an FFP2 mask. You are legally required to do so"
},
{
"type": "A",
"code": "FR",
"prio": 260,
"icoX": 9,
"txtN": "Bicycles conveyed - subject to reservation"
},
{
"type": "A",
"code": "FB",
"prio": 260,
"icoX": 10,
"txtN": "Number of bicycles conveyed limited"
},
{
"type": "A",
"code": "KG",
"prio": 640,
"icoX": 8,
"txtN": "No food or beverages"
},
{
"type": "A",
"code": "bg",
"prio": 560,
"icoX": 8,
"txtN": "Behindertengerechtes Fahrzeug"
}
],
"icoL": [
{
"res": "Bus"
},
{
"res": "S"
},
{
"res": "STA"
},
{
"res": "ECE"
},
{
"res": "prod_walk"
},
{
"res": "IC"
},
{
"res": "D",
"txt": "DB Fernverkehr AG"
},
{
"res": "ICE"
},
{
"res": "attr_info"
},
{
"res": "attr_bike_r"
},
{
"res": "attr_bike"
},
{
"res": "N",
"txt": "DB ZugBus Regionalverkehr Alb-Bodensee"
},
{
"res": "navi_enter"
}
],
"tcocL": [
{
"c": "FIRST",
"r": 1
},
{
"c": "SECOND",
"r": 1
}
],
"lDrawStyleL": [
{
"sIcoX": 4,
"type": "SOLID"
},
{
"type": "DOT"
},
{
"sIcoX": 5,
"type": "SOLID"
},
{
"type": "SOLID"
},
{
"sIcoX": 0,
"type": "SOLID"
}
]
},
"outConL": [
{
"cid": "DirectConReq",
"date": "20210817",
"dur": "032200",
"durS": "031300",
"durR": "031300",
"chg": 2,
"sDays": {
"sDaysR": "runs Mo - Th, not 1. Nov ",
"sDaysB": "00000000000000000000000000000000000000000000000000000000000063C78F1E3C78F1E3C78F0E3C78F1E3C0"
},
"dep": {
"locX": 0,
"dTimeS": "170800",
"type": "N"
},
"arr": {
"locX": 8,
"aTimeS": "203100",
"type": "N"
},
"secL": [
{
"type": "WALK",
"hide": false,
"dep": {
"locX": 0,
"dTimeS": "170800",
"dTZOffset": 0
},
"arr": {
"locX": 3,
"aTimeS": "171800",
"aTZOffset": 120
},
"gis": {
"dist": 701,
"durS": "001000",
"ctx": "G|1|G@F|A=1@O=Karlsplatz (Stachus), München@X=11565584@Y=48140148@U=80@L=800001@|A=1@O=München Hbf@X=11559004@Y=48139429@U=199@L=618000261@|17082021|170800|171600|bf|ft@0@2000@120@0@100@1@@0@@@@@false@0@-1@0@-1@-1@$f@$f@$f@$f@$f@$§bt@0@2000@120@0@100@1@@0@@@@@false@0@-1@0@-1@-1@$f@$f@$f@$f@$f@$§tf@$f@$f@$f@$f@$f@$§||±H|1|W$A=1@O=München Hbf@L=618000261@a=128@$A=1@O=München Hbf@L=8000261@a=128@$202108171716$202108171718$$$1$$$$",
"gisPrvr": "M",
"sumLDrawStyleX": 0,
"resLDrawStyleX": 1,
"prodX": 0
},
"resRecommendation": "U"
},
{
"type": "JNY",
"dep": {
"locX": 3,
"idx": 0,
"dProdX": 1,
"dPltfS": {
"type": "PL",
"txt": "17"
},
"dTimeS": "171900",
"dProgType": "PROGNOSED",
"dTrnCmpSX": {
"tcocX": [
0,
1
],
"tcM": 1
},
"dTZOffset": 120,
"type": "N"
},
"arr": {
"locX": 4,
"idx": 4,
"aPltfS": {
"type": "PL",
"txt": "25"
},
"aTimeS": "183600",
"aProgType": "PROGNOSED",
"aTrnCmpSX": {
"tcM": 1
},
"aTZOffset": 120,
"type": "N"
},
"jny": {
"jid": "1|187459|0|80|17082021",
"prodX": 1,
"dirTxt": "Ulm Hbf",
"status": "P",
"isRchbl": true,
"ctxRecon": "T$A=1@O=München Hbf@L=8000261@a=128@$A=1@O=Ulm Hbf@L=8000170@a=128@$202108171719$202108171836$IC 2094$$1$$$$",
"msgL": [
{
"type": "REM",
"remX": 0,
"sty": "I",
"fLocX": 3,
"tLocX": 4,
"fIdx": 0,
"tIdx": 4,
"tagL": [
"RES_JNY_DTL"
],
"sort": 697303040
},
{
"type": "REM",
"remX": 1,
"sty": "I",
"fLocX": 3,
"tLocX": 4,
"fIdx": 0,
"tIdx": 4,
"tagL": [
"RES_JNY_DTL"
],
"sort": 697303040
},
{
"type": "REM",
"remX": 2,
"sty": "I",
"fLocX": 3,
"tLocX": 4,
"fIdx": 0,
"tIdx": 4,
"tagL": [
"RES_JNY_DTL_L"
],
"sort": 705167360
},
{
"type": "REM",
"remX": 3,
"sty": "I",
"fLocX": 3,
"tLocX": 4,
"fIdx": 0,
"tIdx": 4,
"tagL": [
"RES_JNY_DTL_L"
],
"sort": 705167360
},
{
"type": "REM",
"remX": 4,
"sty": "I",
"fLocX": 3,
"tLocX": 4,
"fIdx": 0,
"tIdx": 4,
"tagL": [
"RES_JNY_DTL"
],
"sort": 754974720
}
],
"subscr": "F",
"chgDurR": 36,
"prodL": [
{
"prodX": 1,
"fLocX": 3,
"tLocX": 4,
"fIdx": 0,
"tIdx": 4
}
],
"dTrnCmpSX": {
"tcocX": [
0,
1
]
},
"sumLDrawStyleX": 2,
"resLDrawStyleX": 3,
"trainStartDate": "20210817",
"durS": "011700",
"tcocXL": [
0,
1
]
},
"minChg": "000600",
"resState": "N",
"resRecommendation": "N"
},
{
"type": "WALK",
"dep": {
"locX": 4,
"dTimeS": "183600",
"dTZOffset": 120,
"type": "N"
},
"arr": {
"locX": 5,
"aTimeS": "184200",
"aTZOffset": 120,
"type": "N"
},
"gis": {
"dist": 234,
"durS": "000600",
"dirGeo": 26,
"ctx": "H|1|W$A=1@O=Ulm Hbf@L=8000170@a=128@$A=1@O=ZOB Ost, Ulm@L=801345@a=128@$202108171836$202108171842$$$1$$$$",
"gisPrvr": "H",
"getDescr": true,
"getPoly": true,
"sumLDrawStyleX": 0,
"resLDrawStyleX": 1,
"prodX": 0
},
"resState": "N",
"resRecommendation": "N"
},
{
"type": "JNY",
"dep": {
"locX": 5,
"idx": 0,
"dProdX": 2,
"dTimeS": "191200",
"dProgType": "PROGNOSED",
"dTZOffset": 120,
"type": "N"
},
"arr": {
"locX": 6,
"idx": 15,
"aTimeS": "194800",
"aProgType": "PROGNOSED",
"aTZOffset": 120,
"type": "N"
},
"jny": {
"jid": "1|75903|0|80|17082021",
"prodX": 3,
"dirTxt": "Rabenstraße, Laupheim",
"dirFlg": "1",
"status": "P",
"isRchbl": true,
"ctxRecon": "T$A=1@O=ZOB Ost, Ulm@L=801345@a=128@$A=1@O=Oberholzheim Hauptstraße, Achstetten@L=801494@a=128@$202108171912$202108171948$Bus 24$$1$$$$",
"subscr": "F",
"chgDurR": 31,
"prodL": [
{
"prodX": 3,
"fLocX": 5,
"tLocX": 6,
"fIdx": 0,
"tIdx": 15
}
],
"sumLDrawStyleX": 4,
"resLDrawStyleX": 3,
"trainStartDate": "20210817",
"durS": "003600"
},
"minChg": "000300",
"resState": "N",
"resRecommendation": "N"
},
{
"type": "JNY",
"dep": {
"locX": 6,
"idx": 17,
"dProdX": 4,
"dTimeS": "201900",
"dProgType": "PROGNOSED",
"dTZOffset": 120,
"type": "N"
},
"arr": {
"locX": 7,
"idx": 21,
"aTimeS": "202900",
"aProgType": "PROGNOSED",
"aTZOffset": 120,
"type": "N"
},
"jny": {
"jid": "1|587878|0|80|17082021",
"prodX": 5,
"dirTxt": "Rabenstraße, Laupheim",
"dirFlg": "1",
"status": "P",
"isRchbl": true,
"ctxRecon": "T$A=1@O=Oberholzheim Hauptstraße, Achstetten@L=801494@a=128@$A=1@O=Rathaus, Achstetten@L=800132@a=128@$202108172019$202108172029$Bus 227$$1$$$$",
"msgL": [
{
"type": "REM",
"remX": 5,
"sty": "I",
"fLocX": 6,
"tLocX": 7,
"fIdx": 17,
"tIdx": 21,
"tagL": [
"RES_JNY_DTL"
],
"sort": 744488960
}
],
"subscr": "F",
"prodL": [
{
"prodX": 5,
"fLocX": 6,
"tLocX": 7,
"fIdx": 17,
"tIdx": 21
}
],
"sumLDrawStyleX": 4,
"resLDrawStyleX": 3,
"trainStartDate": "20210817",
"durS": "001000"
},
"resState": "N",
"resRecommendation": "N"
},
{
"type": "WALK",
"dep": {
"locX": 7,
"dTimeS": "202900",
"type": "N"
},
"arr": {
"locX": 8,
"aTimeS": "203100",
"type": "N"
},
"gis": {
"dist": 53,
"durS": "000200",
"ctx": "G|1|G@F|A=1@O=Rathaus, Achstetten@X=9897941@Y=48258563@U=80@L=800132@|A=1@O=Moser, Achstetten@X=9898310@Y=48258859@U=80@L=800002@|17082021|202900|203100|fb|ft@0@2000@120@0@100@1@@0@@@@@false@0@-1@0@-1@-1@$f@$f@$f@$f@$f@$§bt@0@2000@120@0@100@1@@0@@@@@false@0@-1@0@-1@-1@$f@$f@$f@$f@$f@$§tf@$f@$f@$f@$f@$f@$§||",
"gisPrvr": "E",
"getDescr": true,
"getPoly": true,
"sumLDrawStyleX": 0,
"resLDrawStyleX": 1,
"prodX": 0
},
"resState": "N",
"resRecommendation": "N"
}
],
"ctxRecon": "¶HKI¶G@F$A=1@O=Karlsplatz (Stachus), München@L=800001@a=128@$A=1@O=München Hbf@L=618000261@a=128@$202108171708$202108171716$$$1$$$$§W$A=1@O=München Hbf@L=618000261@a=128@$A=1@O=München Hbf@L=8000261@a=128@$202108171716$202108171718$$$1$$$$§T$A=1@O=München Hbf@L=8000261@a=128@$A=1@O=Ulm Hbf@L=8000170@a=128@$202108171719$202108171836$IC 2094$$1$$$$§W$A=1@O=Ulm Hbf@L=8000170@a=128@$A=1@O=ZOB Ost, Ulm@L=801345@a=128@$202108171836$202108171842$$$1$$$$§T$A=1@O=ZOB Ost, Ulm@L=801345@a=128@$A=1@O=Oberholzheim Hauptstraße, Achstetten@L=801494@a=128@$202108171912$202108171948$Bus 24$$1$$$$§T$A=1@O=Oberholzheim Hauptstraße, Achstetten@L=801494@a=128@$A=1@O=Rathaus, Achstetten@L=800132@a=128@$202108172019$202108172029$Bus 227$$1$$$$§G@F$A=1@O=Rathaus, Achstetten@L=800132@a=128@$A=1@O=Moser, Achstetten@L=800002@a=128@$202108172029$202108172031$$$1$$$$¶GP¶ft@0@2000@120@0@100@1@@0@@@@@false@0@-1@0@-1@-1@$f@$f@$f@$f@$f@$§bt@0@2000@120@0@100@1@@0@@@@@false@0@-1@0@-1@-1@$f@$f@$f@$f@$f@$§tf@$f@$f@$f@$f@$f@$§",
"conSubscr": "F",
"resState": "N",
"resRecommendation": "N",
"recState": "C",
"sotRating": 0,
"isSotCon": false,
"showARSLink": false,
"sotCtxt": {
"calcDate": "20210817",
"locMode": "FROM_START",
"reqMode": "UNKNOWN",
"calcTime": "153352"
},
"cksum": "4e99db20_3",
"cksumDti": "c10fe4ec_3",
"dTrnCmpSX": {
"tcocX": [
0,
1
]
},
"intvlSubscr": "P",
"tcocXL": [
0,
1
],
"originType": "INITIAL"
}
],
"fpB": "20201213",
"fpE": "20211211",
"bfATS": -1,
"bfIOSTS": -1,
"planrtTS": "1629207135"
}

File diff suppressed because it is too large Load diff

View file

@ -1,204 +0,0 @@
{
"type": "journey",
"legs": [
{
"origin": {
"type": "stop",
"id": "8000193",
"name": "Kassel Hbf",
"location": {
"type": "location",
"id": "8000193",
"latitude": 51.31832,
"longitude": 9.489903
},
"products": {
"nationalExpress": false,
"national": false,
"regionalExpress": false,
"regional": true,
"suburban": true,
"bus": true,
"ferry": false,
"subway": false,
"tram": true,
"taxi": false
}
},
"destination": {
"type": "stop",
"id": "8003200",
"name": "Kassel-Wilhelmshöhe",
"location": {
"type": "location",
"id": "8003200",
"latitude": 51.312998,
"longitude": 9.446845
},
"products": {
"nationalExpress": true,
"national": true,
"regionalExpress": true,
"regional": true,
"suburban": true,
"bus": true,
"ferry": false,
"subway": false,
"tram": true,
"taxi": false
}
},
"departure": "2023-11-13T22:14:00+01:00",
"plannedDeparture": "2023-11-13T22:14:00+01:00",
"departureDelay": null,
"arrival": "2023-11-13T22:21:00+01:00",
"plannedArrival": "2023-11-13T22:21:00+01:00",
"arrivalDelay": null,
"public": true,
"walking": true,
"distance": null,
"transfer": true
},
{
"origin": {
"type": "stop",
"id": "8003200",
"name": "Kassel-Wilhelmshöhe",
"location": {
"type": "location",
"id": "8003200",
"latitude": 51.312998,
"longitude": 9.446845
},
"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": "8000147",
"name": "Hamburg-Harburg",
"location": {
"type": "location",
"id": "8000147",
"latitude": 0,
"longitude": 0
},
"products": {
"nationalExpress": true,
"national": true,
"regionalExpress": true,
"regional": true,
"suburban": true,
"bus": true,
"ferry": false,
"subway": false,
"tram": false,
"taxi": false
}
},
"departure": "2023-11-13T22:21:00+01:00",
"plannedDeparture": "2023-11-13T22:21:00+01:00",
"departureDelay": null,
"arrival": "2023-11-14T01:22:00+01:00",
"plannedArrival": "2023-11-14T01:22:00+01:00",
"arrivalDelay": null,
"reachable": true,
"tripId": "1|202739|0|80|-1",
"line": {
"type": "line",
"id": "ice-592",
"fahrtNr": null,
"name": "ICE 592",
"public": true,
"productName": "ICE"
},
"direction": null,
"arrivalPlatform": null,
"plannedArrivalPlatform": null,
"arrivalPrognosisType": null,
"departurePlatform": "1",
"plannedDeparturePlatform": "1",
"departurePrognosisType": null
},
{
"origin": {
"type": "stop",
"id": "8000147",
"name": "Hamburg-Harburg",
"location": {
"type": "location",
"id": "8000147",
"latitude": 0,
"longitude": 0
},
"products": {
"nationalExpress": true,
"national": true,
"regionalExpress": true,
"regional": true,
"suburban": true,
"bus": true,
"ferry": false,
"subway": false,
"tram": false,
"taxi": false
}
},
"destination": {
"type": "stop",
"id": "8002549",
"name": "Hamburg Hbf",
"location": {
"type": "location",
"id": "8002549",
"latitude": 0,
"longitude": 0
},
"products": {
"nationalExpress": true,
"national": true,
"regionalExpress": true,
"regional": true,
"suburban": true,
"bus": true,
"ferry": false,
"subway": true,
"tram": false,
"taxi": false
}
},
"departure": "2023-11-14T01:22:00+01:00",
"plannedDeparture": "2023-11-14T01:22:00+01:00",
"departureDelay": null,
"arrival": "2023-11-14T01:42:00+01:00",
"plannedArrival": "2023-11-14T01:42:00+01:00",
"arrivalDelay": null,
"public": true,
"walking": true,
"distance": null,
"transfer": true
}
],
"refreshToken": "D$A=1@O=Kassel Hbf@L=8000193@a=0@$A=1@O=Kassel-Wilhelmshöhe@L=8003200@a=0@$202311132214$202311132221$$$1$$$$$$§T$A=1@O=Kassel-Wilhelmshöhe@L=8003200@a=0@$A=1@O=Hamburg-Harburg@L=8000147@a=0@$202311132221$202311140122$ICE 592$$1$$$$$$§D$A=1@O=Hamburg-Harburg@L=8000147@a=0@$A=1@O=Hamburg Hbf@L=8002549@a=0@$202311140122$202311140142$$$1$$$$$$",
"price": {
"amount": 55.9,
"currency": "EUR",
"hint": null
},
"tickets": [
{
"name": "To offer selection",
"priceObj": {"amount": 5590}
}
]
}

File diff suppressed because it is too large Load diff

View file

@ -1,317 +0,0 @@
const büchen = {
type: 'stop',
id: '8000058',
name: 'Büchen',
location: {
type: 'location',
id: '8000058',
latitude: 53.475291,
longitude: 10.622939,
},
products: {
nationalExpress: true,
national: true,
regionalExpress: false,
regional: true,
suburban: false,
bus: true,
ferry: false,
subway: false,
tram: false,
taxi: true,
},
};
const berlinHbfTief = {
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: true,
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: true,
tram: true,
taxi: false,
},
},
};
const overnightJourney = {
type: 'journey',
refreshToken: 'T$A=1@O=Lübeck Hbf@L=8000237@a=128@$A=1@O=Büchen@L=8000058@a=128@$202311242210$202311242249$erx21137$$1$$$$$$§T$A=1@O=Büchen@L=8000058@a=128@$A=1@O=Berlin Hbf (tief)@L=8098160@a=128@$202311242315$202311250054$ICE 907$$1$$$$$$§T$A=1@O=Berlin Hbf (tief)@L=8098160@a=128@$A=1@O=München Hbf@L=8000261@a=128@$202311250430$202311250917$ICE 501$$1$$$$$$',
legs: [
{
origin: {
type: 'stop',
id: '8000237',
name: 'Lübeck Hbf',
location: {
type: 'location',
id: '8000237',
latitude: 53.86767,
longitude: 10.669737,
},
products: {
nationalExpress: true,
national: true,
regionalExpress: true,
regional: true,
suburban: false,
bus: true,
ferry: false,
subway: false,
tram: false,
taxi: true,
},
},
destination: büchen,
departure: '2023-11-24T22:10:00+01:00',
plannedDeparture: '2023-11-24T22:10:00+01:00',
departureDelay: null,
arrival: '2023-11-24T22:49:00+01:00',
plannedArrival: '2023-11-24T22:49:00+01:00',
arrivalDelay: null,
reachable: true,
tripId: '1|466091|0|80|24112023',
line: {
type: 'line',
id: 'erx-re83',
fahrtNr: '21137',
name: 'erx RE83',
public: true,
adminCode: 'X1____',
productName: 'erx',
mode: 'train',
product: 'regional',
operator: {
type: 'operator',
id: 'erixx',
name: 'erixx',
},
additionalName: 'erx RE83',
},
direction: 'Lüneburg',
arrivalPlatform: '140',
plannedArrivalPlatform: '140',
arrivalPrognosisType: null,
departurePlatform: '6',
plannedDeparturePlatform: '6',
departurePrognosisType: 'prognosed',
remarks: [
{
text: 'Number of bicycles conveyed limited',
type: 'hint',
code: 'bicycle-conveyance',
summary: 'bicycles conveyed',
},
{
text: 'space for wheelchairs',
type: 'hint',
code: 'wheelchairs-space',
summary: 'space for wheelchairs',
},
{
text: 'vehicle-mounted access aid',
type: 'hint',
code: 'boarding-ramp',
summary: 'vehicle-mounted boarding ramp available',
},
{
type: 'hint',
code: 'SI',
text: 'Barrierefreier Zustieg an geeigneten Stationen möglich',
},
{
type: 'hint',
code: 'SM',
text: 'Info www.bahn.de/sh-barrierefrei',
},
],
},
{
origin: büchen,
destination: berlinHbfTief,
departure: '2023-11-24T23:15:00+01:00',
plannedDeparture: '2023-11-24T23:15:00+01:00',
departureDelay: null,
arrival: '2023-11-25T00:54:00+01:00',
plannedArrival: '2023-11-25T00:54:00+01:00',
arrivalDelay: null,
reachable: true,
tripId: '1|206310|0|80|24112023',
line: {
type: 'line',
id: 'ice-907',
fahrtNr: '907',
name: 'ICE 907',
public: true,
adminCode: '80____',
productName: 'ICE',
mode: 'train',
product: 'nationalExpress',
operator: {
type: 'operator',
id: 'db-fernverkehr-ag',
name: 'DB Fernverkehr AG',
},
},
direction: 'Berlin Südkreuz',
arrivalPlatform: '1',
plannedArrivalPlatform: '1',
arrivalPrognosisType: null,
departurePlatform: '1',
plannedDeparturePlatform: '1',
departurePrognosisType: 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',
},
{
origin: berlinHbfTief,
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,
},
},
departure: '2023-11-25T04:30:00+01:00',
plannedDeparture: '2023-11-25T04:30:00+01:00',
departureDelay: null,
arrival: '2023-11-25T09:17:00+01:00',
plannedArrival: '2023-11-25T09:17:00+01:00',
arrivalDelay: null,
reachable: true,
tripId: '1|198958|0|80|25112023',
line: {
type: 'line',
id: 'ice-501',
fahrtNr: '501',
name: 'ICE 501',
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: '19',
plannedArrivalPlatform: '19',
arrivalPrognosisType: 'prognosed',
departurePlatform: '1',
plannedDeparturePlatform: '1',
departurePrognosisType: 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',
},
],
loadFactor: 'low-to-medium',
},
],
remarks: [],
price: {amount: 108.9, currency: 'EUR', hint: null},
tickets: [{
name: 'To offer selection',
priceObj: {amount: 10890},
}],
};
export {
overnightJourney,
};

View file

@ -1,865 +0,0 @@
{
"common": {
"locL": [
{
"lid": "A=1@O=Lübeck Hbf@X=10669818@Y=53867544@U=80@L=8000237@",
"type": "S",
"name": "Lübeck Hbf",
"icoX": 0,
"extId": "8000237",
"state": "F",
"crd": {
"x": 10669737,
"y": 53867670,
"z": 0,
"floor": 0
},
"pCls": 559
},
{
"lid": "A=1@O=Büchen@X=10623299@Y=53474976@U=80@L=8000058@",
"type": "S",
"name": "Büchen",
"icoX": 0,
"extId": "8000058",
"state": "F",
"crd": {
"x": 10622939,
"y": 53475291,
"z": 0,
"floor": 0
},
"pCls": 555
},
{
"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,
"floor": 0
},
"pCls": 447,
"entry": true,
"mMastLocX": 3
},
{
"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,
"floor": 0
},
"pCls": 447
},
{
"lid": "A=1@O=München Hbf@X=11558339@Y=48140229@U=80@L=8000261@",
"type": "S",
"name": "München Hbf",
"icoX": 9,
"extId": "8000261",
"state": "F",
"crd": {
"x": 11558744,
"y": 48140364,
"z": 0,
"floor": 0
},
"pCls": 447
}
],
"prodL": [
{
"name": "erx21137",
"nameS": "DPN",
"number": "21137",
"icoX": 1,
"cls": 8,
"oprX": 0,
"prodCtx": {
"name": "erx21137",
"num": "21137",
"matchId": "RE83",
"catOut": "erx",
"catOutS": "DPN",
"catOutL": "erixx",
"catIn": "DPN",
"catCode": "3",
"admin": "X1____",
"addName": "erx RE83"
},
"addName": "erx RE83"
},
{
"name": "ICE 907",
"number": "907",
"icoX": 0,
"cls": 1,
"oprX": 1,
"prodCtx": {
"name": "ICE 907",
"num": "907",
"matchId": "28",
"catOut": "ICE",
"catOutS": "ICE",
"catOutL": "Intercity-Express",
"catIn": "ICE",
"catCode": "0",
"admin": "80____"
}
},
{
"name": "ICE 501",
"number": "501",
"icoX": 0,
"cls": 1,
"oprX": 1,
"prodCtx": {
"name": "ICE 501",
"num": "501",
"matchId": "28",
"catOut": "ICE",
"catOutS": "ICE",
"catOutL": "Intercity-Express",
"catIn": "ICE",
"catCode": "0",
"admin": "80____"
}
}
],
"opL": [
{
"name": "erixx",
"icoX": 2
},
{
"name": "DB Fernverkehr AG",
"icoX": 6
}
],
"remL": [
{
"type": "A",
"code": "FB",
"prio": 260,
"icoX": 3,
"txtN": "Number of bicycles conveyed limited"
},
{
"type": "A",
"code": "RO",
"prio": 560,
"icoX": 4,
"txtN": "space for wheelchairs"
},
{
"type": "A",
"code": "EH",
"prio": 560,
"icoX": 5,
"txtN": "vehicle-mounted access aid"
},
{
"type": "A",
"code": "SI",
"prio": 561,
"icoX": 5,
"txtN": "Barrierefreier Zustieg an geeigneten Stationen möglich"
},
{
"type": "A",
"code": "SM",
"prio": 561,
"icoX": 5,
"txtN": "Info www.bahn.de/sh-barrierefrei"
},
{
"type": "A",
"code": "CK",
"prio": 200,
"icoX": 5,
"txtN": "Komfort Check-in possible (visit bahn.de/kci for more information)"
},
{
"type": "A",
"code": "BR",
"prio": 450,
"icoX": 7,
"txtN": "Bordrestaurant"
},
{
"type": "H",
"code": "text.connection.section.arrival.date.deviation",
"icoX": 8,
"txtN": "Arrival Saturday, 2023-11-25"
},
{
"type": "A",
"code": "FR",
"prio": 260,
"icoX": 10,
"txtN": "Bicycles conveyed - subject to reservation"
},
{
"type": "H",
"code": "text.connection.section.departure.date.deviation",
"icoX": 8,
"txtN": "Departure Saturday, 2023-11-25"
},
{
"type": "H",
"code": "455",
"icoX": 5,
"txtN": "Longer stay at a station"
}
],
"icoL": [
{
"res": "ICE"
},
{
"res": "erx"
},
{
"res": "DPN",
"txt": "erixx"
},
{
"res": "attr_bike"
},
{
"res": "attr_wchair"
},
{
"res": "attr_info"
},
{
"res": "D",
"txt": "DB Fernverkehr AG"
},
{
"res": "attr_resto"
},
{
"res": "attr_day_change"
},
{
"res": "ECE"
},
{
"res": "attr_bike_r"
},
{
"res": "cl_all"
}
],
"tcocL": [
{
"c": "FIRST",
"r": 1
},
{
"c": "SECOND",
"r": 1
}
],
"lDrawStyleL": [
{
"sIcoX": 1,
"type": "SOLID"
},
{
"type": "SOLID"
},
{
"sIcoX": 0,
"type": "SOLID"
}
]
},
"outConL": [
{
"cid": "C-0",
"date": "20231124",
"dur": "110700",
"durS": "110700",
"durR": "110700",
"chg": 2,
"sDays": {
"sDaysR": "runs 24. Nov until 8. Dec 2023 Fr, Su; not 1. Dec 2023 ",
"sDaysB": "0000000000000000000000000002888A14245001424402042850A142850A142850A142850A142850A040000A042000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
},
"dep": {
"locX": 0,
"idx": 0,
"dProdX": 0,
"dPltfS": {
"type": "PL",
"txt": "6"
},
"dTimeS": "221000",
"dProgType": "PROGNOSED",
"dTZOffset": 60,
"type": "N"
},
"arr": {
"locX": 4,
"idx": 9,
"aProdX": 2,
"aPltfS": {
"type": "PL",
"txt": "19"
},
"aTimeS": "01091700",
"aProgType": "PROGNOSED",
"aTZOffset": 60,
"msgL": [
{
"type": "REM",
"remX": 7,
"sty": "I",
"tagL": [
"RES_LOC_H3"
],
"sort": 147324928
}
],
"type": "N"
},
"secL": [
{
"type": "JNY",
"dep": {
"locX": 0,
"idx": 0,
"dProdX": 0,
"dPltfS": {
"type": "PL",
"txt": "6"
},
"dTimeS": "221000",
"dProgType": "PROGNOSED",
"dTZOffset": 60,
"type": "N"
},
"arr": {
"locX": 1,
"idx": 5,
"aProdX": 0,
"aPltfS": {
"type": "PL",
"txt": "140"
},
"aTimeS": "224900",
"aTZOffset": 60,
"type": "N"
},
"jny": {
"jid": "1|466091|0|80|24112023",
"prodX": 0,
"dirTxt": "Lüneburg",
"status": "P",
"isRchbl": true,
"ctxRecon": "T$A=1@O=Lübeck Hbf@L=8000237@a=128@$A=1@O=Büchen@L=8000058@a=128@$202311242210$202311242249$erx21137$$1$$$$$$",
"msgL": [
{
"type": "REM",
"remX": 0,
"sty": "I",
"fLocX": 0,
"tLocX": 1,
"fIdx": 0,
"tIdx": 5,
"tagL": [
"RES_JNY_DTL_L"
],
"sort": 839385088
},
{
"type": "REM",
"remX": 1,
"sty": "I",
"fLocX": 0,
"tLocX": 1,
"fIdx": 0,
"tIdx": 5,
"tagL": [
"RES_JNY_DTL_L"
],
"sort": 878706688
},
{
"type": "REM",
"remX": 2,
"sty": "I",
"fLocX": 0,
"tLocX": 1,
"fIdx": 0,
"tIdx": 5,
"tagL": [
"RES_JNY_DTL"
],
"sort": 878706688
},
{
"type": "REM",
"remX": 3,
"sty": "I",
"fLocX": 0,
"tLocX": 1,
"fIdx": 0,
"tIdx": 5,
"tagL": [
"RES_JNY_DTL"
],
"sort": 878837760
},
{
"type": "REM",
"remX": 4,
"sty": "I",
"fLocX": 0,
"tLocX": 1,
"fIdx": 0,
"tIdx": 5,
"tagL": [
"RES_JNY_DTL"
],
"sort": 878837760
}
],
"subscr": "F",
"chgDurR": 26,
"prodL": [
{
"prodX": 0,
"fLocX": 0,
"tLocX": 1,
"fIdx": 0,
"tIdx": 5
}
],
"sumLDrawStyleX": 0,
"resLDrawStyleX": 1,
"trainStartDate": "20231124",
"durS": "003900"
},
"minChg": "000500",
"resState": "N",
"resRecommendation": "N"
},
{
"type": "JNY",
"dep": {
"locX": 1,
"idx": 3,
"dProdX": 1,
"dPltfS": {
"type": "PL",
"txt": "1"
},
"dTimeS": "231500",
"dTrnCmpSX": {
"tcocX": [
0,
1
],
"tcM": 1
},
"dTZOffset": 60,
"type": "N"
},
"arr": {
"locX": 2,
"idx": 7,
"aProdX": 1,
"aPltfS": {
"type": "PL",
"txt": "1"
},
"aTimeS": "01005400",
"aTrnCmpSX": {
"tcM": 1
},
"aTZOffset": 60,
"msgL": [
{
"type": "REM",
"remX": 7,
"sty": "I",
"tagL": [
"RES_LOC_H3"
],
"sort": 147324928
}
],
"type": "N"
},
"jny": {
"jid": "1|206310|0|80|24112023",
"prodX": 1,
"dirTxt": "Berlin Südkreuz",
"dirFlg": "1",
"status": "P",
"isRchbl": true,
"ctxRecon": "T$A=1@O=Büchen@L=8000058@a=128@$A=1@O=Berlin Hbf (tief)@L=8098160@a=128@$202311242315$202311250054$ICE 907$$1$$$$$$",
"msgL": [
{
"type": "REM",
"remX": 5,
"sty": "I",
"fLocX": 1,
"tLocX": 2,
"fIdx": 3,
"tIdx": 7,
"tagL": [
"RES_JNY_DTL"
],
"sort": 831520768
},
{
"type": "REM",
"remX": 6,
"sty": "I",
"fLocX": 1,
"tLocX": 2,
"fIdx": 3,
"tIdx": 7,
"tagL": [
"RES_JNY_DTL_L"
],
"sort": 864288768
}
],
"subscr": "F",
"chgDurR": 216,
"prodL": [
{
"prodX": 1,
"fLocX": 1,
"tLocX": 2,
"fIdx": 3,
"tIdx": 7
}
],
"dTrnCmpSX": {
"tcocX": [
0,
1
]
},
"sumLDrawStyleX": 2,
"resLDrawStyleX": 1,
"trainStartDate": "20231124",
"durS": "013900",
"tcocXL": [
0,
1
]
},
"minChg": "000800",
"resState": "N",
"resRecommendation": "N"
},
{
"type": "JNY",
"dep": {
"locX": 2,
"idx": 1,
"dProdX": 2,
"dPltfS": {
"type": "PL",
"txt": "1"
},
"dTimeS": "01043000",
"dTZOffset": 60,
"msgL": [
{
"type": "REM",
"remX": 9,
"sty": "I",
"tagL": [
"RES_LOC_H3"
],
"sort": 147324928
}
],
"type": "N"
},
"arr": {
"locX": 4,
"idx": 9,
"aProdX": 2,
"aPltfS": {
"type": "PL",
"txt": "19"
},
"aTimeS": "01091700",
"aProgType": "PROGNOSED",
"aTZOffset": 60,
"msgL": [
{
"type": "REM",
"remX": 7,
"sty": "I",
"tagL": [
"RES_LOC_H3"
],
"sort": 147324928
}
],
"type": "N"
},
"jny": {
"jid": "1|198958|0|80|25112023",
"prodX": 2,
"dirTxt": "München Hbf",
"dirFlg": "1",
"status": "P",
"isRchbl": true,
"ctxRecon": "T$A=1@O=Berlin Hbf (tief)@L=8098160@a=128@$A=1@O=München Hbf@L=8000261@a=128@$202311250430$202311250917$ICE 501$$1$$$$$$",
"msgL": [
{
"type": "REM",
"remX": 5,
"sty": "I",
"fLocX": 2,
"tLocX": 4,
"fIdx": 1,
"tIdx": 9,
"tagL": [
"RES_JNY_DTL"
],
"sort": 831520768
},
{
"type": "REM",
"remX": 8,
"sty": "I",
"fLocX": 2,
"tLocX": 4,
"fIdx": 1,
"tIdx": 9,
"tagL": [
"RES_JNY_DTL_L"
],
"sort": 839385088
},
{
"type": "REM",
"remX": 0,
"sty": "I",
"fLocX": 2,
"tLocX": 4,
"fIdx": 1,
"tIdx": 9,
"tagL": [
"RES_JNY_DTL_L"
],
"sort": 839385088
},
{
"type": "REM",
"remX": 6,
"sty": "I",
"fLocX": 2,
"tLocX": 4,
"fIdx": 1,
"tIdx": 9,
"tagL": [
"RES_JNY_DTL_L"
],
"sort": 864288768
},
{
"type": "REM",
"remX": 2,
"sty": "I",
"fLocX": 2,
"tLocX": 4,
"fIdx": 1,
"tIdx": 9,
"tagL": [
"RES_JNY_DTL"
],
"sort": 878706688
}
],
"subscr": "F",
"prodL": [
{
"prodX": 2,
"fLocX": 2,
"tLocX": 4,
"fIdx": 1,
"tIdx": 9
}
],
"dTrnCmpSX": {
"tcocX": [
0,
1
]
},
"sumLDrawStyleX": 2,
"resLDrawStyleX": 1,
"trainStartDate": "20231125",
"durS": "044700"
},
"resState": "N",
"resRecommendation": "N"
}
],
"ctxRecon": "T$A=1@O=Lübeck Hbf@L=8000237@a=128@$A=1@O=Büchen@L=8000058@a=128@$202311242210$202311242249$erx21137$$1$$$$$$§T$A=1@O=Büchen@L=8000058@a=128@$A=1@O=Berlin Hbf (tief)@L=8098160@a=128@$202311242315$202311250054$ICE 907$$1$$$$$$§T$A=1@O=Berlin Hbf (tief)@L=8098160@a=128@$A=1@O=München Hbf@L=8000261@a=128@$202311250430$202311250917$ICE 501$$1$$$$$$",
"trfRes": {
"statusCode": "OK",
"fareSetL": [
{
"fareL": [
{
"isFromPrice": true,
"isPartPrice": false,
"isBookable": true,
"isUpsell": false,
"targetCtx": "D",
"buttonText": "To offer selection",
"price": {
"amount": 10890
},
"retPriceIsCompletePrice": false,
"retPrice": -1
}
]
}
]
},
"msgL": [
{
"type": "REM",
"remX": 10,
"sty": "I",
"tagL": [
"SUM_CON_HDR_H3",
"RES_CON_FTR_H3"
],
"sort": 147324928
}
],
"conSubscr": "F",
"resState": "N",
"resRecommendation": "N",
"recState": "U",
"sotRating": 0,
"isSotCon": false,
"showARSLink": false,
"sotCtxt": {
"cnLocX": 0,
"calcDate": "20231124",
"jid": "1|466091|0|80|-1",
"locMode": "FROM_START",
"pLocX": 0,
"reqMode": "UNKNOWN",
"sectX": 0,
"calcTime": "170656"
},
"cksum": "9e560ba9_3",
"cksumDti": "738637ef_3",
"dTrnCmpSX": {
"tcocX": [
0,
1
]
},
"intvlSubscr": "F",
"tcocXL": [
0,
1
],
"originType": "INITIAL"
}
],
"outCtxScrF": "3|OF|MT#14#505330#505330#505997#505997#0#0#565#505316#1#0#26#0#0#-2147483648#1#2|PDH#1f7519b00e0470208ad97667bfd70f7a|RD#24112023|RT#215600|US#0|RS#INIT",
"fpB": "20221211",
"fpE": "20241214",
"bfATS": -1,
"bfIOSTS": -1,
"planrtTS": "1700841908",
"outConGrpSettings": {
"conGrpL": [
{
"name": "All connections",
"icoX": 11,
"grpid": "cl_all",
"conScoringL": [
{
"type": "DT",
"conScoreL": [
{
"score": 7013570268465987581,
"scoreS": "07013570268465987581",
"conRefL": [
0
]
}
],
"name": "Departure"
},
{
"type": "AT",
"conScoreL": [
{
"score": 7010636771443081213,
"scoreS": "07010636771443081213",
"conRefL": [
0
]
}
],
"name": "Arrival"
},
{
"type": "TI",
"conScoreL": [
{
"score": 9220434977868480509,
"scoreS": "09220434977868480509",
"conRefL": [
0
]
}
],
"name": "Duration"
}
],
"initScoringType": "DT",
"requests": [
{
"id": "RQ_CLIENT",
"autosend": true
}
],
"scrollable": true,
"bitmask": 1
}
],
"selectL": [
{
"icoX": 11,
"name": "All connections",
"bitIdx": 0
}
],
"variant": "RADIO"
}
}

File diff suppressed because it is too large Load diff

View file

@ -1,822 +0,0 @@
{
"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"
}

View file

@ -70,7 +70,100 @@ const dbJourney = {
"code": "boarding-ramp", "code": "boarding-ramp",
"summary": "vehicle-mounted boarding ramp available", "summary": "vehicle-mounted boarding ramp available",
} }
] ],
"polyline": {
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "Point",
"coordinates": [
6.9597,
50.943038,
],
},
},
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "Point",
"coordinates": [
6.9597,
50.943038,
],
},
},
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "Point",
"coordinates": [
6.960033,
50.942724,
],
},
},
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "Point",
"coordinates": [
6.960491,
50.942301,
],
},
},
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "Point",
"coordinates": [
6.961282,
50.941825,
],
},
},
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "Point",
"coordinates": [
6.962253,
50.941582,
],
},
},
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "Point",
"coordinates": [
6.971467,
50.941492,
],
},
},
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "Point",
"coordinates": [
6.974658,
50.941285,
],
},
},
],
},
}, },
{ {
origin: { origin: {
@ -159,10 +252,37 @@ const dbJourney = {
summary: 'Komfort-Checkin available', summary: 'Komfort-Checkin available',
}, },
], ],
"polyline": {
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "Point",
"coordinates": [
11.082144,
49.445678,
],
},
},
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "Point",
"coordinates": [
11.08227,
49.445435,
],
},
},
],
},
}, },
], ],
refreshToken: '¶HKI¶T$A=1@O=Köln Hbf@X=6958730@Y=50943029@L=8000207@a=128@$A=1@O=Köln Messe/Deutz@X=6975000@Y=50940872@L=8003368@a=128@$202504110511$202504110512$S 12$$1$$$$$$§W$A=1@O=Köln Messe/Deutz@X=6975000@Y=50940872@L=8003368@a=128@$A=1@O=Köln Messe/Deutz Gl.11-12@X=6974065@Y=50941717@L=8073368@a=128@$202504110512$202504110519$$$1$$$$$$§T$A=1@O=Köln Messe/Deutz Gl.11-12@X=6974065@Y=50941717@L=8073368@a=128@$A=1@O=Nürnberg Hbf@X=11082989@Y=49445615@L=8000284@a=128@$202504110520$202504110858$ICE 523$$1$$$$$$¶KC¶#VE#2#CF#100#CA#0#CM#0#SICT#0#AM#81#AM2#0#RT#7#¶KCC¶I1ZFIzEjRVJHIzMjSElOIzAjRUNLIzcwNTkxMXw3MDU5MTF8NzA2MTM4fDcwNjEzOHwwfDB8NDg1fDcwNTg5N3wxfDB8MTh8MHwwfC0yMTQ3NDgzNjQ4I0dBTSMxMTA0MjUwNTExIwpaI1ZOIzEjU1QjMTczMzE3MzczMSNQSSMxI1pJIzE2MTQ3MyNUQSMxI0RBIzExMDQyNSMxUyM4MDAwMjA4IzFUIzUwNCNMUyM4MDAyNzUzI0xUIzU0NSNQVSM4MSNSVCMxI0NBI3MjWkUjMTIjWkIjUyAgICAgMTIjUEMjNCNGUiM4MDAwMjA3I0ZUIzUxMSNUTyM4MDAzMzY4I1RUIzUxMiMKRiNWTiMwI1NUIzE3MzMxNzM3MzEjUEkjMSNQVSM4MSNaSSMyMjgzODI4ODkzI0RBIzExMDQyNSNGUiM4MDAzMzY4I1RPIzgwNzMzNjgjRlQjNTEyI1RUIzUxOSNUUyMwI0ZGIyNGViMwIwpaI1ZOIzEjU1QjMTczMzE3MzczMSNQSSMxI1pJIzE1NTA2MyNUQSMwI0RBIzExMDQyNSMxUyM4MDAwMDgwIzFUIzM1OCNMUyM4MDAwMjYxI0xUIzEwMDYjUFUjODEjUlQjMSNDQSNJQ0UjWkUjNTIzI1pCI0lDRSAgNTIzI1BDIzAjRlIjODA3MzM2OCNGVCM1MjAjVE8jODAwMDI4NCNUVCM4NTgj¶KRCC¶#VE#1#¶SC¶1_H4sIAAAAAAACA32P306DMBjFX8X0GpevhUIhIUFGFv8sGzHOaIwXbHQTU2CWskgIz+GbeOXdXswCemE09qLpOT09v68tOnCJPIQnDkMG4q9Kiyic3EYTV2vJX5DXoqLOZ8ijRn8IkQcGKmsVJYrrMAFCwcIYDeZNlvcmUNBLW9uh4RQb6LloZkLJOfIeWqSafR+Lr5eRDuVl2quLxVSLQyLqXmEgJuoeh5mmT7uxWJNTvp+Xm7FGZKlOnvk4WPpXx3dRnJyvt8Gdb7uUOSYE9z4F1zKBuMHKZxDM9QZAwAlC/WbvY8c0scNsmwSZvzq+ATDA1KIs0INUavzgbJgikfJP7OL4IYs1l7svNMbAiMtczbZcy6I2pj/YzPqHTQh2zd/sHVdxKRqRFdpTsuaDdVnWsuBNWNZFWiFvm4hqvIiTqhJZpb6zfFPGiUxyHWq7rvsE0LytQvMBAAA=', refreshToken: '¶HKI¶T$A=1@O=Köln Hbf@X=6958730@Y=50943029@L=8000207@a=128@$A=1@O=Köln Messe/Deutz@X=6975000@Y=50940872@L=8003368@a=128@$202504110511$202504110512$S 12$$1$$$$$$§W$A=1@O=Köln Messe/Deutz@X=6975000@Y=50940872@L=8003368@a=128@$A=1@O=Köln Messe/Deutz Gl.11-12@X=6974065@Y=50941717@L=8073368@a=128@$202504110512$202504110519$$$1$$$$$$§T$A=1@O=Köln Messe/Deutz Gl.11-12@X=6974065@Y=50941717@L=8073368@a=128@$A=1@O=Nürnberg Hbf@X=11082989@Y=49445615@L=8000284@a=128@$202504110520$202504110858$ICE 523$$1$$$$$$¶KC¶#VE#2#CF#100#CA#0#CM#0#SICT#0#AM#81#AM2#0#RT#7#¶KCC¶I1ZFIzEjRVJHIzMjSElOIzAjRUNLIzcwNTkxMXw3MDU5MTF8NzA2MTM4fDcwNjEzOHwwfDB8NDg1fDcwNTg5N3wxfDB8MTh8MHwwfC0yMTQ3NDgzNjQ4I0dBTSMxMTA0MjUwNTExIwpaI1ZOIzEjU1QjMTczMzE3MzczMSNQSSMxI1pJIzE2MTQ3MyNUQSMxI0RBIzExMDQyNSMxUyM4MDAwMjA4IzFUIzUwNCNMUyM4MDAyNzUzI0xUIzU0NSNQVSM4MSNSVCMxI0NBI3MjWkUjMTIjWkIjUyAgICAgMTIjUEMjNCNGUiM4MDAwMjA3I0ZUIzUxMSNUTyM4MDAzMzY4I1RUIzUxMiMKRiNWTiMwI1NUIzE3MzMxNzM3MzEjUEkjMSNQVSM4MSNaSSMyMjgzODI4ODkzI0RBIzExMDQyNSNGUiM4MDAzMzY4I1RPIzgwNzMzNjgjRlQjNTEyI1RUIzUxOSNUUyMwI0ZGIyNGViMwIwpaI1ZOIzEjU1QjMTczMzE3MzczMSNQSSMxI1pJIzE1NTA2MyNUQSMwI0RBIzExMDQyNSMxUyM4MDAwMDgwIzFUIzM1OCNMUyM4MDAwMjYxI0xUIzEwMDYjUFUjODEjUlQjMSNDQSNJQ0UjWkUjNTIzI1pCI0lDRSAgNTIzI1BDIzAjRlIjODA3MzM2OCNGVCM1MjAjVE8jODAwMDI4NCNUVCM4NTgj¶KRCC¶#VE#1#¶SC¶1_H4sIAAAAAAACA32P306DMBjFX8X0GpevhUIhIUFGFv8sGzHOaIwXbHQTU2CWskgIz+GbeOXdXswCemE09qLpOT09v68tOnCJPIQnDkMG4q9Kiyic3EYTV2vJX5DXoqLOZ8ijRn8IkQcGKmsVJYrrMAFCwcIYDeZNlvcmUNBLW9uh4RQb6LloZkLJOfIeWqSafR+Lr5eRDuVl2quLxVSLQyLqXmEgJuoeh5mmT7uxWJNTvp+Xm7FGZKlOnvk4WPpXx3dRnJyvt8Gdb7uUOSYE9z4F1zKBuMHKZxDM9QZAwAlC/WbvY8c0scNsmwSZvzq+ATDA1KIs0INUavzgbJgikfJP7OL4IYs1l7svNMbAiMtczbZcy6I2pj/YzPqHTQh2zd/sHVdxKRqRFdpTsuaDdVnWsuBNWNZFWiFvm4hqvIiTqhJZpb6zfFPGiUxyHWq7rvsE0LytQvMBAAA=',
price: {amount: 31.49, currency: 'EUR', hint: null}, price: { amount: 31.49, currency: 'EUR', hint: null },
remarks: [] remarks: []
}; };

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,184 +0,0 @@
{
"Trip": [
{
"Eco": {},
"ServiceDays": [
{
"planningPeriodBegin": "2018-12-09",
"planningPeriodEnd": "2019-12-14",
"sDaysR": "täglich",
"sDaysB": "FFFFFFFFFFFFFFFFFFFFFF0001FFFC000000000000000007FFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0"
}
],
"LegList": {
"Leg": [
{
"Origin": {
"name": "Hildesheim Hbf",
"type": "ST",
"id": "A=1@O=Hildesheim Hbf@X=9953495@Y=52160627@U=80@L=8000169@",
"extId": "8000169",
"lon": 9.953495,
"lat": 52.160627,
"routeIdx": 6,
"prognosisType": "PROGNOSED",
"time": "17:44:00",
"date": "2019-08-23",
"tz": 120,
"track": "3",
"rtTime": "17:45:00",
"rtDate": "2019-08-23",
"rtTz": 120,
"rtBoarding": true
},
"Destination": {
"name": "Hannover Hbf",
"type": "ST",
"id": "A=1@O=Hannover Hbf@X=9741017@Y=52376764@U=80@L=8000152@",
"extId": "8000152",
"lon": 9.741017,
"lat": 52.376764,
"routeIdx": 8,
"prognosisType": "PROGNOSED",
"time": "18:10:00",
"date": "2019-08-23",
"tz": 120,
"track": "2",
"rtTime": "18:11:00",
"rtDate": "2019-08-23",
"rtTz": 120,
"rtAlighting": true
},
"Notes": {
"Note": [
{
"value": "Fahrradmitnahme begrenzt möglich",
"key": "FB",
"type": "A",
"priority": 260,
"routeIdxFrom": 6,
"routeIdxTo": 8
},
{
"value": "Rollstuhlstellplatz",
"key": "RO",
"type": "A",
"priority": 560,
"routeIdxFrom": 6,
"routeIdxTo": 8
}
]
},
"JourneyDetailRef": {
"ref": "1|272481|0|80|23082019"
},
"JourneyStatus": "P",
"Product": {
"name": "erx83476",
"num": "83476",
"catOut": "erx",
"catIn": "DPN",
"catCode": "3",
"catOutS": "DPN",
"catOutL": "erixx",
"operatorCode": "DPN",
"operator": "erixx",
"admin": "X2____"
},
"Polyline": {
"crd": [
9.953495,
52.160627,
9.842595,
52.232604,
9.741017,
52.376764
],
"delta": false,
"dim": 2,
"type": "WGS84",
"crdEncS": "NNN"
},
"Stops": {
"Stop": [
{
"name": "Hildesheim Hbf",
"id": "A=1@O=Hildesheim Hbf@X=9953495@Y=52160627@U=80@L=8000169@",
"extId": "8000169",
"routeIdx": 6,
"lon": 9.953495,
"lat": 52.160627,
"depPrognosisType": "PROGNOSED",
"depTime": "17:44:00",
"depDate": "2019-08-23",
"depTz": 120,
"depTrack": "3",
"rtDepTime": "17:45:00",
"rtDepDate": "2019-08-23",
"rtBoarding": true
},
{
"name": "Sarstedt",
"id": "A=1@O=Sarstedt@X=9842595@Y=52232604@U=80@L=8005292@",
"extId": "8005292",
"routeIdx": 7,
"lon": 9.842595,
"lat": 52.232604,
"arrPrognosisType": "PROGNOSED",
"depPrognosisType": "PROGNOSED",
"depTime": "17:56:00",
"depDate": "2019-08-23",
"depTz": 120,
"arrTime": "17:56:00",
"arrDate": "2019-08-23",
"arrTz": 120,
"arrTrack": "1",
"depTrack": "1",
"rtDepTime": "17:57:00",
"rtDepDate": "2019-08-23",
"rtArrTime": "17:57:00",
"rtArrDate": "2019-08-23",
"rtAlighting": true,
"rtBoarding": true
},
{
"name": "Hannover Hbf",
"id": "A=1@O=Hannover Hbf@X=9741017@Y=52376764@U=80@L=8000152@",
"extId": "8000152",
"routeIdx": 8,
"lon": 9.741017,
"lat": 52.376764,
"arrPrognosisType": "PROGNOSED",
"arrTime": "18:10:00",
"arrDate": "2019-08-23",
"arrTz": 120,
"arrTrack": "2",
"rtArrTime": "18:11:00",
"rtArrDate": "2019-08-23",
"rtAlighting": true
}
]
},
"idx": 0,
"name": "erx83476",
"number": "83476",
"category": "DPN",
"type": "JNY",
"reachable": true,
"direction": "Hannover Hbf"
}
]
},
"idx": 0,
"tripId": "C-0",
"ctxRecon": "T$A=1@O=Hildesheim Hbf@L=8000169@a=128@$A=1@O=Hannover Hbf@L=8000152@a=128@$201908231744$201908231810$erx83476$$1$",
"duration": "PT26M",
"checksum": "d3b9a458_3"
}
],
"scrB": "1|OB|MTµ11µ374024µ374024µ374050µ374050µ0µ0µ165µ374018µ1µ-2147482610µ0µ1µ2|PDHµ3abb7e01fc6c29145882f2d490780e90|RDµ23082019|RTµ173813",
"scrF": "1|OF|MTµ11µ374024µ374024µ374050µ374050µ0µ0µ165µ374018µ1µ-2147482610µ0µ1µ2|PDHµ3abb7e01fc6c29145882f2d490780e90|RDµ23082019|RTµ173813",
"serverVersion": "1.14",
"dialectVersion": "1.23",
"requestId": "1566574693925"
}

View file

@ -1,637 +0,0 @@
const facilities = {
'3SZentrale': '030/2971055',
'parkingLots': true,
'bicycleParkingRacks': true,
'localPublicTransport': true,
'toilets': true,
'lockers': true,
'travelShop': false,
'stepFreeAccess': true,
'boardingAid': 'ja, um voranmeldung unter 01806 512 512* wird gebeten',
'taxis': true,
};
const reisezentrumOpeningHours = {
Mo: '08:00-20:00',
Di: '08:00-20:00',
Mi: '08:00-20:00',
Do: '08:00-20:00',
Fr: '08:00-20:00',
Sa: '10:00-18:00',
So: '10:00-18:00',
raw: [
['Mo', '08:00-20:00'],
['Di', '08:00-20:00'],
['Mi', '08:00-20:00'],
['Do', '08:00-20:00'],
['Fr', '08:00-20:00'],
['Sa', '10:00-18:00'],
['So', '10:00-18:00'],
],
};
const station = {
type: 'station',
id: '8011155',
name: 'Berlin Alexanderplatz',
location: {
type: 'location',
id: '8011155',
latitude: 52.521526,
longitude: 13.411088,
},
products: {
nationalExpress: false,
national: false,
regionalExpress: false,
regional: true,
suburban: true,
bus: true,
ferry: false,
subway: true,
tram: true,
taxi: false,
},
transitAuthority: 'VBB',
ids: {
dhid: 'de:11000:900100003',
VBB: '900100003',
},
facilities,
reisezentrumOpeningHours,
};
const dbStop = {
...station,
stops: [{
type: 'stop',
id: '372948',
ids: {
dhid: 'de:11000:900100731',
VBB: '900100731',
},
name: 'Alexanderpl (S+U)/Memhardstr.[4-5], Berlin',
location: {
type: 'location',
id: '372948',
latitude: 52.523513,
longitude: 13.411366,
},
products: {
nationalExpress: false,
national: false,
regionalExpress: false,
regional: true,
suburban: true,
bus: true,
ferry: false,
subway: true,
tram: true,
taxi: false,
},
station,
transitAuthority: 'VBB',
facilities,
reisezentrumOpeningHours,
}, {
type: 'stop',
id: '727273',
ids: {
dhid: 'de:11000:900100026',
VBB: '900100026',
},
name: 'Alexanderplatz Bahnhof (S+U)/Gontardstr., Berlin',
location: {
type: 'location',
id: '727273',
latitude: 52.52087,
longitude: 13.411609,
},
products: {
nationalExpress: false,
national: false,
regionalExpress: false,
regional: true,
suburban: true,
bus: true,
ferry: false,
subway: true,
tram: true,
taxi: false,
},
station,
transitAuthority: 'VBB',
facilities,
reisezentrumOpeningHours,
}, {
type: 'stop',
id: '727460',
ids: {
dhid: 'de:11000:900100024',
VBB: '900100024',
},
name: 'Alexanderplatz Bahnhof (S+U)/Dircksenstr., Berlin',
location: {
type: 'location',
id: '727460',
latitude: 52.521967,
longitude: 13.41116,
},
products: {
nationalExpress: false,
national: false,
regionalExpress: false,
regional: true,
suburban: true,
bus: true,
ferry: false,
subway: true,
tram: true,
taxi: false,
},
station,
transitAuthority: 'VBB',
facilities,
reisezentrumOpeningHours,
}, {
type: 'stop',
id: '727484',
ids: {
dhid: 'de:11000:900100031',
VBB: '900100031',
},
name: 'Alexanderplatz Bahnhof (S+U)/Memhardstr., Berlin',
location: {
type: 'location',
id: '727484',
latitude: 52.522722,
longitude: 13.410288,
},
products: {
nationalExpress: false,
national: false,
regionalExpress: false,
regional: true,
suburban: true,
bus: true,
ferry: false,
subway: true,
tram: true,
taxi: false,
},
station,
transitAuthority: 'VBB',
facilities,
reisezentrumOpeningHours,
}, {
type: 'stop',
id: '728658',
ids: {
dhid: 'de:11000:900100707',
VBB: '900100707',
},
name: 'Alexanderplatz [Bus] (U), Berlin',
location: {
type: 'location',
id: '728658',
latitude: 52.52318,
longitude: 13.413946,
},
products: {
nationalExpress: false,
national: false,
regionalExpress: false,
regional: true,
suburban: true,
bus: true,
ferry: false,
subway: true,
tram: true,
taxi: false,
},
station,
transitAuthority: 'VBB',
facilities,
}, {
type: 'stop',
id: '728659',
ids: {
dhid: 'de:11000:900100703',
VBB: '900100703',
},
name: 'Alexanderplatz [U2] (S+U), Berlin',
location: {
type: 'location',
id: '728659',
latitude: 52.521742,
longitude: 13.414045,
},
products: {
nationalExpress: false,
national: false,
regionalExpress: false,
regional: true,
suburban: true,
bus: true,
ferry: false,
subway: true,
tram: true,
taxi: false,
},
station,
transitAuthority: 'VBB',
facilities,
reisezentrumOpeningHours,
}, {
type: 'stop',
id: '728660',
ids: {
dhid: 'de:11000:900100704',
VBB: '900100704',
},
name: 'Alexanderplatz [U5] (S+U), Berlin',
location: {
type: 'location',
id: '728660',
latitude: 52.521661,
longitude: 13.414045,
},
products: {
nationalExpress: false,
national: false,
regionalExpress: false,
regional: true,
suburban: true,
bus: true,
ferry: false,
subway: true,
tram: true,
taxi: false,
},
station,
transitAuthority: 'VBB',
facilities,
reisezentrumOpeningHours,
}, {
type: 'stop',
id: '728735',
ids: {
dhid: 'de:11000:900100712',
VBB: '900100712',
},
name: 'Alexanderpl. (S+U)/Grunerstr. [Alexanderstr.], Ber',
location: {
type: 'location',
id: '728735',
latitude: 52.520322,
longitude: 13.415708,
},
products: {
nationalExpress: false,
national: false,
regionalExpress: false,
regional: true,
suburban: true,
bus: true,
ferry: false,
subway: true,
tram: true,
taxi: false,
},
station,
transitAuthority: 'VBB',
facilities,
}, {
type: 'stop',
id: '732533',
ids: {
dhid: 'de:11000:900100705',
VBB: '900100705',
},
name: 'Alexanderplatz [U8] (S+U), Berlin',
location: {
type: 'location',
id: '732533',
latitude: 52.521023,
longitude: 13.412661,
},
products: {
nationalExpress: false,
national: false,
regionalExpress: false,
regional: true,
suburban: true,
bus: true,
ferry: false,
subway: true,
tram: true,
taxi: false,
},
station,
transitAuthority: 'VBB',
facilities,
reisezentrumOpeningHours,
}, {
type: 'stop',
id: '732535',
ids: {
dhid: 'de:11000:900100005',
VBB: '900100005',
},
name: 'Alexanderplatz [Tram] (U), Berlin',
location: {
type: 'location',
id: '732535',
latitude: 52.522119,
longitude: 13.414683,
},
products: {
nationalExpress: false,
national: false,
regionalExpress: false,
regional: true,
suburban: true,
bus: true,
ferry: false,
subway: true,
tram: true,
taxi: false,
},
station,
transitAuthority: 'VBB',
facilities,
}, {
type: 'stop',
id: '732536',
ids: {
dhid: 'de:11000:900100711',
VBB: '900100711',
},
name: 'Alexanderplatz (S+U)/Grunerstr., Berlin',
location: {
type: 'location',
id: '732536',
latitude: 52.520825,
longitude: 13.414926,
},
products: {
nationalExpress: false,
national: false,
regionalExpress: false,
regional: true,
suburban: true,
bus: true,
ferry: false,
subway: true,
tram: true,
taxi: false,
},
station,
transitAuthority: 'VBB',
facilities,
}, {
type: 'stop',
id: '8089001',
ids: {
dhid: 'de:11000:900100003',
VBB: '900100003',
},
name: 'Berlin Alexanderplatz (S)',
location: {
type: 'location',
id: '8089001',
latitude: 52.521643,
longitude: 13.411097,
},
products: {
nationalExpress: false,
national: false,
regionalExpress: false,
regional: true,
suburban: true,
bus: true,
ferry: false,
subway: true,
tram: true,
taxi: false,
},
transitAuthority: 'VBB',
station,
facilities,
reisezentrumOpeningHours,
}, {
type: 'stop',
id: '732594',
ids: {
VBB: '900100517',
},
name: 'Otto-Braun-Str./Alexanderplatz, Berlin',
location: {
type: 'location',
id: '732594',
latitude: 52.522066,
longitude: 13.41658,
},
products: {
nationalExpress: false,
national: false,
regionalExpress: false,
regional: false,
suburban: false,
bus: false,
ferry: false,
subway: false,
tram: false,
taxi: false,
},
transitAuthority: 'VBB',
}],
entrances: [{
type: 'location', id: '608011155',
latitude: 52.521814, longitude: 13.411456,
}, {
type: 'location', id: '718011155',
latitude: 52.521373, longitude: 13.413317,
}, {
type: 'location', id: '708011155',
latitude: 52.522317, longitude: 13.412895,
}, {
type: 'location', id: '698011155',
latitude: 52.520852, longitude: 13.412274,
}, {
type: 'location', id: '688011155',
latitude: 52.521176, longitude: 13.412463,
}, {
type: 'location', id: '678011155',
latitude: 52.520933, longitude: 13.41285,
}, {
type: 'location', id: '668011155',
latitude: 52.520798, longitude: 13.411717,
}, {
type: 'location', id: '658011155',
latitude: 52.52096, longitude: 13.414908,
}, {
type: 'location', id: '648011155',
latitude: 52.521724, longitude: 13.41027,
}, {
type: 'location', id: '638011155',
latitude: 52.52211, longitude: 13.410881,
}, {
type: 'location', id: '628011155',
latitude: 52.522119, longitude: 13.414647,
}, {
type: 'location', id: '618011155',
latitude: 52.521409, longitude: 13.410728,
}, {
type: 'location', id: '8089001',
latitude: 52.521643, longitude: 13.411097,
}, {
type: 'location', id: '608089001',
latitude: 52.521409, longitude: 13.410728,
}, {
type: 'location', id: '718089001',
latitude: 52.521373, longitude: 13.413317,
}, {
type: 'location', id: '708089001',
latitude: 52.522317, longitude: 13.412895,
}, {
type: 'location', id: '698089001',
latitude: 52.520852, longitude: 13.412274,
}, {
type: 'location', id: '688089001',
latitude: 52.521176, longitude: 13.412463,
}, {
type: 'location', id: '678089001',
latitude: 52.520933, longitude: 13.41285,
}, {
type: 'location', id: '668089001',
latitude: 52.520798, longitude: 13.411717,
}, {
type: 'location', id: '658089001',
latitude: 52.52096, longitude: 13.414908,
}, {
type: 'location', id: '648089001',
latitude: 52.521724, longitude: 13.41027,
}, {
type: 'location', id: '638089001',
latitude: 52.52211, longitude: 13.410881,
}, {
type: 'location', id: '628089001',
latitude: 52.522119, longitude: 13.414647,
}, {
type: 'location', id: '618089001',
latitude: 52.521814, longitude: 13.411456,
}, {
type: 'location', id: '600732533',
latitude: 52.520933, longitude: 13.41285,
}, {
type: 'location', id: '710732533',
latitude: 52.522317, longitude: 13.412895,
}, {
type: 'location', id: '700732533',
latitude: 52.520852, longitude: 13.412274,
}, {
type: 'location', id: '690732533',
latitude: 52.520798, longitude: 13.411717,
}, {
type: 'location', id: '680732533',
latitude: 52.52096, longitude: 13.414908,
}, {
type: 'location', id: '670732533',
latitude: 52.521724, longitude: 13.41027,
}, {
type: 'location', id: '660732533',
latitude: 52.52211, longitude: 13.410881,
}, {
type: 'location', id: '650732533',
latitude: 52.521409, longitude: 13.410728,
}, {
type: 'location', id: '640732533',
latitude: 52.521814, longitude: 13.411456,
}, {
type: 'location', id: '630732533',
latitude: 52.522119, longitude: 13.414647,
}, {
type: 'location', id: '620732533',
latitude: 52.521373, longitude: 13.413317,
}, {
type: 'location', id: '610732533',
latitude: 52.521176, longitude: 13.412463,
}, {
type: 'location', id: '600728660',
latitude: 52.521373, longitude: 13.413317,
}, {
type: 'location', id: '710728660',
latitude: 52.520852, longitude: 13.412274,
}, {
type: 'location', id: '700728660',
latitude: 52.521176, longitude: 13.412463,
}, {
type: 'location', id: '690728660',
latitude: 52.520933, longitude: 13.41285,
}, {
type: 'location', id: '680728660',
latitude: 52.520798, longitude: 13.411717,
}, {
type: 'location', id: '670728660',
latitude: 52.521724, longitude: 13.41027,
}, {
type: 'location', id: '660728660',
latitude: 52.52211, longitude: 13.410881,
}, {
type: 'location', id: '650728660',
latitude: 52.521409, longitude: 13.410728,
}, {
type: 'location', id: '640728660',
latitude: 52.521814, longitude: 13.411456,
}, {
type: 'location', id: '630728660',
latitude: 52.522317, longitude: 13.412895,
}, {
type: 'location', id: '620728660',
latitude: 52.522119, longitude: 13.414647,
}, {
type: 'location', id: '610728660',
latitude: 52.52096, longitude: 13.414908,
}, {
type: 'location', id: '600728659',
latitude: 52.522119, longitude: 13.414647,
}, {
type: 'location', id: '710728659',
latitude: 52.520852, longitude: 13.412274,
}, {
type: 'location', id: '700728659',
latitude: 52.521176, longitude: 13.412463,
}, {
type: 'location', id: '690728659',
latitude: 52.520933, longitude: 13.41285,
}, {
type: 'location', id: '680728659',
latitude: 52.520798, longitude: 13.411717,
}, {
type: 'location', id: '670728659',
latitude: 52.521724, longitude: 13.41027,
}, {
type: 'location', id: '660728659',
latitude: 52.52211, longitude: 13.410881,
}, {
type: 'location', id: '650728659',
latitude: 52.521409, longitude: 13.410728,
}, {
type: 'location', id: '640728659',
latitude: 52.521814, longitude: 13.411456,
}, {
type: 'location', id: '630728659',
latitude: 52.521373, longitude: 13.413317,
}, {
type: 'location', id: '620728659',
latitude: 52.52096, longitude: 13.414908,
}, {
type: 'location', id: '610728659',
latitude: 52.522317, longitude: 13.412895,
}],
};
export {
dbStop,
};

File diff suppressed because it is too large Load diff

View file

@ -9,6 +9,7 @@ const profile = {
name: 'InterCityExpress', name: 'InterCityExpress',
short: 'ICE', short: 'ICE',
vendo: 'ICE', vendo: 'ICE',
ris: 'HIGH_SPEED_TRAIN',
default: true, default: true,
}, },
{ {
@ -17,6 +18,7 @@ const profile = {
name: 'Bus', name: 'Bus',
short: 'B', short: 'B',
vendo: 'BUS', vendo: 'BUS',
ris: 'BUS',
default: true, default: true,
}, },
], ],
@ -55,7 +57,7 @@ tap.test('parses ICE leg correctly', (t) => {
}; };
const expected = { const expected = {
type: 'line', type: 'line',
id: 'foo', id: 'ice-229',
fahrtNr: 229, fahrtNr: 229,
name: 'ICE 229', name: 'ICE 229',
public: true, public: true,
@ -86,7 +88,7 @@ tap.test('parses Bus trip correctly', (t) => {
}; };
const expected = { const expected = {
type: 'line', type: 'line',
id: undefined, id: '',
fahrtNr: undefined, fahrtNr: undefined,
name: 'Bus 807', name: 'Bus 807',
public: true, public: true,
@ -127,7 +129,7 @@ tap.test('parses Bus leg correctly', (t) => {
}; };
const expected = { const expected = {
type: 'line', type: 'line',
id: 'foo', id: 'bus-807',
fahrtNr: '807', fahrtNr: '807',
name: 'Bus 807', name: 'Bus 807',
public: true, public: true,
@ -140,3 +142,35 @@ tap.test('parses Bus leg correctly', (t) => {
t.same(parse(ctx, input), expected); t.same(parse(ctx, input), expected);
t.end(); t.end();
}); });
tap.test('parses ris entry correctly', (t) => {
const input = {
"journeyID": "20241207-79693bf3-2ed5-325f-8a99-154bad5f5cf3",
"transport": {
"type": "HIGH_SPEED_TRAIN",
"journeyDescription": "RB 51 (15538)",
"label": "",
"category": "RB",
"categoryInternal": "RB",
"number": 15538,
"line": "51",
"replacementTransport": null,
}
};
const expected = {
type: 'line',
id: 'rb-51-15538',
fahrtNr: 15538,
name: 'RB 51 (15538)',
public: true,
product: 'nationalExpress',
productName: 'RB',
mode: 'train',
operator: null
};
t.same(parse(ctx, input), expected);
t.end();
});

View file

@ -118,3 +118,75 @@ tap.test('parses zugattribute correctly', (t) => {
t.same(parse(ctx, input), expected); t.same(parse(ctx, input), expected);
t.end(); t.end();
}); });
tap.test('parses board disruptions correctly', (t) => {
const input = { disruptions: [
{
"disruptionID": "9aee61d6-700e-3c19-aaa0-019f5612df4c",
"disruptionCommunicationID": null,
"displayPriority": 25,
"descriptions": {
"DE": {
"text": "Eine Reparatur an einem Signal verzögert den Zugverkehr",
"textShort": "Verzögerungen durch Reparatur an einem Signal"
}
}
}
]};
const expected = [{
"code": undefined,
"summary": "Verzögerungen durch Reparatur an einem Signal",
"text": "Eine Reparatur an einem Signal verzögert den Zugverkehr",
"type": "warning",
}];
t.same(parse(ctx, input), expected);
t.end();
});
tap.test('parses board messages correctly', (t) => {
const input = { messages: [
{
"code": "80",
"type": "QUALITY_VARIATION",
"displayPriority": null,
"category": null,
"text": "Andere Reihenfolge der Wagen",
"textShort": null
}
]};
const expected = [{
"code": 80,
"summary": "Andere Reihenfolge der Wagen",
"text": "Andere Reihenfolge der Wagen",
"type": "status",
}];
t.same(parse(ctx, input), expected);
t.end();
});
tap.test('parses ris attributes correctly', (t) => {
const input = { attributes: [
{
"displayPriority": null,
"displayPriorityDetail": null,
"code": "CK",
"text": "Komfort Check-in verfügbar - wenn möglich bitte einchecken",
"textShort": null
}
]};
const expected = [{
//"code": "komfort-checkin",
"code": "CK",
//"summary": "Komfort-Checkin available",
"summary": "Komfort Check-in verfügbar - wenn möglich bitte einchecken",
"text": "Komfort Check-in verfügbar - wenn möglich bitte einchecken",
"type": "hint",
}];
t.same(parse(ctx, input), expected);
t.end();
});