This is an unofficial node module, giving you a few options to query Dresden's public transport system for current bus- and tramstop data.
Want something like this for another language, look no further π
Install the module using npm or yarn
$ npm install dvbjs
or
$ yarn add dvbjs
and require it in your project
import * as dvb from "dvbjs";
HTTP request are handled by axios that supports all modern browsers. See packages/react-example for a browser departure monitor example.
import * as dvb from "dvbjs"; // OR const dvb = require("dvbjs");
dvb.findStop("zellesch").then((data) => {
console.dir({ data }, { depth: 7, maxArrayLength: 2 });
});
{
data: [
{
city: 'Dresden',
coords: [ 13.745859050200034, 51.0283698098441 ],
name: 'Zellescher Weg',
id: '33000312',
type: 'Stop'
},
{
city: 'Clausthal-Zellerfeld',
coords: [ 10.347333308428196, 51.80899839555576 ],
name: 'Eschenbacher StraΓe',
id: '26005221',
type: 'Stop'
}
]
}
import * as dvb from "dvbjs"; // OR const dvb = require("dvbjs");
const stopID = "33000037"; // Postplatz
const timeOffset = 5;
const numResults = 2;
dvb.monitor(stopID, timeOffset, numResults).then((data) => {
console.dir(data, { depth: 7, maxArrayLength: 2 });
});
[
{
arrivalTime: 2020-08-28T17:47:00.000Z,
scheduledTime: 2020-08-28T17:47:00.000Z,
id: 'voe:11012: :R:j20',
line: '12',
direction: 'Striesen',
platform: { name: '3', type: 'Platform' },
arrivalTimeRelative: 5,
scheduledTimeRelative: 5,
delayTime: 0,
state: 'InTime',
mode: {
title: 'StraΓenbahn',
name: 'Tram',
iconUrl: 'https://www.dvb.de/assets/img/trans-icon/transport-tram.svg'
},
diva: { number: 11012, network: 'voe' }
},
{
arrivalTime: 2020-08-28T17:48:00.000Z,
scheduledTime: 2020-08-28T17:48:00.000Z,
id: 'voe:11002: :H:j20',
line: '2',
direction: 'Gorbitz',
platform: { name: '2', type: 'Platform' },
arrivalTimeRelative: 6,
scheduledTimeRelative: 6,
delayTime: 0,
state: 'InTime',
mode: {
title: 'StraΓenbahn',
name: 'Tram',
iconUrl: 'https://www.dvb.de/assets/img/trans-icon/transport-tram.svg'
},
diva: { number: 11002, network: 'voe' }
}
]
import * as dvb from "dvbjs"; // OR const dvb = require("dvbjs");
const origin = "33000742"; // HelmholtzstraΓe
const destination = "33000037"; // Postplatz
const startTime = new Date();
const isArrivalTime = false;
dvb.route(origin, destination, startTime, isArrivalTime).then((data) => {
console.dir(data, { depth: 7, maxArrayLength: 2 });
});
{
origin: {
id: '33000742',
name: 'HelmholtzstraΓe',
city: 'Dresden',
coords: [ 13.725468471273134, 51.0255443264448 ]
},
destination: {
id: '33000037',
name: 'Postplatz',
city: 'Dresden',
coords: [ 13.733543221907427, 51.05055101347277 ]
},
trips: [
{
nodes: [
{
stops: [
{
id: '33000742',
name: 'HelmholtzstraΓe',
city: 'Dresden',
type: 'Stop',
platform: { name: '1', type: 'Platform' },
coords: [ 13.725468471273134, 51.0255443264448 ],
arrival: 2020-08-28T18:05:00.000Z,
departure: 2020-08-28T18:05:00.000Z
},
{
id: '33000512',
name: 'StadtgutstraΓe',
city: 'Dresden',
type: 'Stop',
platform: { name: '1', type: 'Platform' },
coords: [ 13.736249024095288, 51.02412604112871 ],
arrival: 2020-08-28T18:07:00.000Z,
departure: 2020-08-28T18:07:00.000Z
},
... 1 more item
],
departure: {
id: '33000742',
name: 'HelmholtzstraΓe',
city: 'Dresden',
platform: { name: '1', type: 'Platform' },
time: 2020-08-28T18:05:00.000Z,
coords: [ 13.725468471273134, 51.0255443264448 ],
type: 'Stop'
},
arrival: {
id: '33000313',
name: 'RΓ€cknitzhΓΆhe',
city: 'Dresden',
platform: { name: '1', type: 'Platform' },
time: 2020-08-28T18:08:00.000Z,
coords: [ 13.742469696952984, 51.02352100754019 ],
type: 'Stop'
},
mode: {
title: 'Bus',
name: 'CityBus',
iconUrl: 'https://www.dvb.de/assets/img/trans-icon/transport-bus.svg'
},
line: '85',
direction: 'Striesen',
diva: { number: 21085, network: 'voe' },
duration: 3,
path: [
[ 13.725453890767993, 51.025535552078374 ],
[ 13.725722912293, 51.02548662985169 ],
... 18 more items
]
},
{
stops: [
{
id: '33000313',
name: 'RΓ€cknitzhΓΆhe',
city: 'Dresden',
type: 'Stop',
platform: { name: '1', type: 'Platform' },
coords: [ 13.742469696952984, 51.02352100754019 ],
arrival: 2020-08-28T18:13:00.000Z,
departure: 2020-08-28T18:13:00.000Z
},
{
id: '33000312',
name: 'Zellescher Weg',
city: 'Dresden',
type: 'Stop',
platform: { name: '1', type: 'Platform' },
coords: [ 13.7457515521668, 51.02816465242123 ],
arrival: 2020-08-28T18:15:00.000Z,
departure: 2020-08-28T18:15:00.000Z
},
... 8 more items
],
departure: {
id: '33000313',
name: 'RΓ€cknitzhΓΆhe',
city: 'Dresden',
platform: { name: '1', type: 'Platform' },
time: 2020-08-28T18:13:00.000Z,
coords: [ 13.742469696952984, 51.02352100754019 ],
type: 'Stop'
},
arrival: {
id: '33000037',
name: 'Postplatz',
city: 'Dresden',
platform: { name: '4', type: 'Platform' },
time: 2020-08-28T18:28:00.000Z,
coords: [ 13.733543221907427, 51.05055101347277 ],
type: 'Stop'
},
mode: {
title: 'StraΓenbahn',
name: 'Tram',
iconUrl: 'https://www.dvb.de/assets/img/trans-icon/transport-tram.svg'
},
line: '11',
direction: 'BΓΌhlau',
diva: { number: 11011, network: 'voe' },
duration: 15,
path: [
[ 13.742470033873689, 51.023529992249884 ],
[ 13.742485627673174, 51.023565718598725 ],
... 122 more items
]
}
],
departure: {
id: '33000742',
name: 'HelmholtzstraΓe',
city: 'Dresden',
platform: { name: '1', type: 'Platform' },
time: 2020-08-28T18:05:00.000Z,
coords: [ 13.725468471273134, 51.0255443264448 ],
type: 'Stop'
},
arrival: {
id: '33000037',
name: 'Postplatz',
city: 'Dresden',
platform: { name: '4', type: 'Platform' },
time: 2020-08-28T18:28:00.000Z,
coords: [ 13.733543221907427, 51.05055101347277 ],
type: 'Stop'
},
duration: 23,
interchanges: 1
},
{
nodes: [
{
stops: [
{
id: '33000742',
name: 'HelmholtzstraΓe',
city: 'Dresden',
type: 'Stop',
platform: { name: '2', type: 'Platform' },
coords: [ 13.725468471273134, 51.0255443264448 ],
arrival: 2020-08-28T18:09:00.000Z,
departure: 2020-08-28T18:09:00.000Z
},
{
id: '33000513',
name: 'Regensburger StraΓe',
city: 'Dresden',
type: 'Stop',
platform: { name: '2', type: 'Platform' },
coords: [ 13.720554082747958, 51.02640790159258 ],
arrival: 2020-08-28T18:10:00.000Z,
departure: 2020-08-28T18:10:00.000Z
},
... 1 more item
],
departure: {
id: '33000742',
name: 'HelmholtzstraΓe',
city: 'Dresden',
platform: { name: '2', type: 'Platform' },
time: 2020-08-28T18:09:00.000Z,
coords: [ 13.725468471273134, 51.0255443264448 ],
type: 'Stop'
},
arrival: {
id: '33000135',
name: 'Plauen NΓΆthnitzer StraΓe',
city: 'Dresden',
platform: { name: '6', type: 'Platform' },
time: 2020-08-28T18:10:00.000Z,
coords: [ 13.716530789023206, 51.02708737506858 ],
type: 'Stop'
},
mode: {
title: 'Bus',
name: 'CityBus',
iconUrl: 'https://www.dvb.de/assets/img/trans-icon/transport-bus.svg'
},
line: '85',
direction: 'LΓΆbtau SΓΌd',
diva: { number: 21085, network: 'voe' },
duration: 1,
path: [
[ 13.725453890767993, 51.025535552078374 ],
[ 13.72528426308308, 51.02557401614769 ],
... 9 more items
]
},
{
stops: [],
departure: undefined,
arrival: undefined,
mode: {
title: 'Fussweg',
name: 'Footpath',
iconUrl: 'https://m.dvb.de/img/walk.svg'
},
line: '',
direction: '',
diva: undefined,
duration: 2,
path: [
[ 13.716530789023206, 51.02708737506858 ],
[ 13.716516209687736, 51.02707859957728 ],
... 14 more items
]
},
... 3 more items
],
departure: {
id: '33000742',
name: 'HelmholtzstraΓe',
city: 'Dresden',
platform: { name: '2', type: 'Platform' },
time: 2020-08-28T18:09:00.000Z,
coords: [ 13.725468471273134, 51.0255443264448 ],
type: 'Stop'
},
arrival: {
id: '33000037',
name: 'Postplatz',
city: 'Dresden',
platform: { name: '2', type: 'Platform' },
time: 2020-08-28T18:39:00.000Z,
coords: [ 13.733966669186017, 51.05081442107084 ],
type: 'Stop'
},
duration: 30,
interchanges: 2
},
... 2 more items
]
}
Find the coordinates for a given POI id.
function coords(id: string, timeout: number = 5000): Promise<number[]>;
Parameters
Name | Type | Default value | Description |
---|---|---|---|
id | string | the POI ID | |
timeout | number | 5000 | the timeout of the request |
Return type
Promise<number[] | undefined>
Lookup address and nearby stops by coordinate.
function findAddress(lng: number, lat: number, timeout: number = 5000): Promise<IAddress>;
Parameters
Name | Type | Default value | Description |
---|---|---|---|
lng | number | longitude of the coordinate | |
lat | number | latitude of the coordinate | |
timeout | number | 5000 | the timeout of the request |
Return type
Promise<IAddress | undefined>
Search for POI in the network of the DVB.
function findPOI(searchString: string, timeout: number = 5000): Promise<IPoint[]>;
Parameters
Name | Type | Default value | Description |
---|---|---|---|
searchString | string | the name of the stop | |
timeout | number | 5000 | the timeout of the request |
Return type
Promise<IPoint[]>
Search for a single stop in the network of the DVB.
function findStop(searchString: string, timeout: number = 5000): Promise<IPoint[]>;
Parameters
Name | Type | Default value | Description |
---|---|---|---|
searchString | string | the name of the stop | |
timeout | number | 5000 | the timeout of the request |
Return type
Promise<IPoint[]>
get a list of availible tram/bus lines for a stop.
function lines(stopID: string, timeout: number = 5000): Promise<ILine[]>;
Parameters
Name | Type | Default value | Description |
---|---|---|---|
stopID | string | the stop ID | |
timeout | number | 5000 | the timeout of the request |
Return type
Promise<ILine[]>
Monitor a single stop to see every bus or tram leaving this stop after the specified time offset.
function monitor(stopID: string, offset: number = 0, amount: number = 0, timeout: number = 5000): Promise<IMonitor[]>;
Parameters
Name | Type | Default value | Description |
---|---|---|---|
stopID | string | ID of the stop | |
offset | number | 0 | how many minutes in the future, 0 for now |
amount | number | 0 | number of results |
timeout | number | 5000 | the timeout of the request |
Return type
Promise<IMonitor[]>
Search for different kinds of POIs inside a given bounding box.
function pins(swlng: number, swlat: number, nelng: number, nelat: number, pinTypes: PIN_TYPE[] = [PIN_TYPE.stop], timeout: number = 5000): Promise<IPin[]>;
Parameters
Name | Type | Default value | Description |
---|---|---|---|
swlng | number | the longitude of the south west coordinate | |
swlat | number | the latitude of the south west coordinate | |
nelng | number | the longitude of the north east coordinate | |
nelat | number | the latitude of the north east coordinate | |
pinTypes | PIN_TYPE[] | [PIN_TYPE.stop] | array of pin types |
timeout | number | 5000 | the timeout of the request |
Return type
Promise<IPin[]>
Query the server for possible routes from one stop to another.
function route(originID: string, destinationID: string, time: Date = new Date(), isArrivalTime: boolean = true, timeout: number = 15000, via?: string): Promise<IRoute>;
Parameters
Name | Type | Default value | Description |
---|---|---|---|
originID | string | the id of the origin stop | |
destinationID | string | the id of the destination stop | |
time | Date | new Date() | starting at what time |
isArrivalTime | boolean | true | is time the arrival time |
timeout | number | 15000 | the timeout of the request |
via | string | the id of a third stop |
Return type
Promise<IRoute>
interface IDiva {
number: number;
network?: string;
}
Properties
Name | Type | Optional |
---|---|---|
number | number | false |
network | string | true |
interface IPlatform {
name: string;
type: string;
}
Properties
Name | Type | Optional |
---|---|---|
name | string | false |
type | string | false |
- The id for PIN_TYPE.platform is always an empty string.
- PIN_TYPE.platform conatins platform_nr.
- PIN_TYPE.stop contains connections.
- PIN_TYPE.parkandride contains info.
interface IPin {
id: string;
type: PIN_TYPE;
name: string;
coords: Array<number>;
platformNr?: string;
connections?: IConnection[];
info?: string;
}
Properties
Name | Type | Optional |
---|---|---|
id | string | false |
type | PIN_TYPE | false |
name | string | false |
coords | Array | false |
platformNr | string | true |
connections | IConnection[] | true |
info | string | true |
interface IConnection {
line: string;
mode?: IMode;
}
Properties
Name | Type | Optional |
---|---|---|
line | string | false |
mode | IMode | true |
interface IMode {
title: string;
name: string;
iconUrl?: string;
}
Properties
Name | Type | Optional |
---|---|---|
title | string | false |
name | string | false |
iconUrl | string | true |
interface IAddress extends IPoint {
stops: IPoint[];
}
Extends
Properties
Name | Type | Optional |
---|---|---|
stops | IPoint[] | false |
interface ILine {
name: string;
mode?: IMode;
diva?: IDiva;
directions: string[];
}
Properties
Name | Type | Optional |
---|---|---|
name | string | false |
mode | IMode | true |
diva | IDiva | true |
directions | string[] | false |
interface IMonitor {
arrivalTime: Date;
scheduledTime: Date;
id: string;
line: string;
direction: string;
platform?: IPlatform;
arrivalTimeRelative: number;
scheduledTimeRelative: number;
delayTime: number;
state: string;
mode?: IMode;
diva?: IDiva;
}
Properties
Name | Type | Optional |
---|---|---|
arrivalTime | Date | false |
scheduledTime | Date | false |
id | string | false |
line | string | false |
direction | string | false |
platform | IPlatform | true |
arrivalTimeRelative | number | false |
scheduledTimeRelative | number | false |
delayTime | number | false |
state | string | false |
mode | IMode | true |
diva | IDiva | true |
interface ILocation {
id: string;
name: string;
city: string;
coords: Array<number>;
}
Properties
Name | Type | Optional |
---|---|---|
id | string | false |
name | string | false |
city | string | false |
coords | Array | false |
interface IPoint extends ILocation {
type: POI_TYPE;
}
Extends
Properties
Name | Type | Optional |
---|---|---|
type | POI_TYPE | false |
interface IStop extends ILocation {
type: string;
platform?: IPlatform;
arrival: Date;
departure: Date;
}
Extends
Properties
Name | Type | Optional |
---|---|---|
type | string | false |
platform | IPlatform | true |
arrival | Date | false |
departure | Date | false |
interface IStopLocation extends ILocation {
platform?: IPlatform;
time: Date;
type: string;
}
Extends
Properties
Name | Type | Optional |
---|---|---|
platform | IPlatform | true |
time | Date | false |
type | string | false |
interface INode {
stops: IStop[];
departure?: IStopLocation;
arrival?: IStopLocation;
mode?: IMode;
line: string;
direction: string;
diva?: IDiva;
duration: number;
path: Array<number>[];
}
Properties
Name | Type | Optional |
---|---|---|
stops | IStop[] | false |
departure | IStopLocation | true |
arrival | IStopLocation | true |
mode | IMode | true |
line | string | false |
direction | string | false |
diva | IDiva | true |
duration | number | false |
path | Array[] | false |
interface ITrip {
departure?: IStopLocation;
arrival?: IStopLocation;
duration: number;
interchanges: number;
nodes: INode[];
}
Properties
Name | Type | Optional |
---|---|---|
departure | IStopLocation | true |
arrival | IStopLocation | true |
duration | number | false |
interchanges | number | false |
nodes | INode[] | false |
interface IRoute {
origin?: ILocation;
destination?: ILocation;
trips: ITrip[];
}
Properties
Name | Type | Optional |
---|---|---|
origin | ILocation | true |
destination | ILocation | true |
trips | ITrip[] | false |
WGS84 coordinates [lng, lat]
type coord = number[];
Type
number[]
enum POI_TYPE {
Address = "Address",
Coords = "Coords",
POI = "POI",
Stop = "Stop"
}
Members
Name | Value |
---|---|
Address | "Address" |
Coords | "Coords" |
POI | "POI" |
Stop | "Stop" |
enum PIN_TYPE {
stop = "stop",
platform = "platform",
poi = "poi",
rentabike = "rentabike",
ticketmachine = "ticketmachine",
carsharing = "carsharing",
parkandride = "parkandride",
unknown = "unknown"
}
Members
Name | Value |
---|---|
stop | "stop" |
platform | "platform" |
poi | "poi" |
rentabike | "rentabike" |
ticketmachine | "ticketmachine" |
carsharing | "carsharing" |
parkandride | "parkandride" |
unknown | "unknown" |