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 dvbjsand 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" |
