Skip to content

Commit

Permalink
Merge 0146949 into 64b332e
Browse files Browse the repository at this point in the history
  • Loading branch information
ronhippler committed Jan 21, 2016
2 parents 64b332e + 0146949 commit 3ca3694
Show file tree
Hide file tree
Showing 18 changed files with 903 additions and 554 deletions.
33 changes: 22 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
# dvbjs

[![travis-ci](http://img.shields.io/travis/kiliankoe/dvbjs.svg?style=flat)](https://travis-ci.org/kiliankoe/dvbjs)
[![Coverage Status](https://coveralls.io/repos/kiliankoe/dvbjs/badge.svg?branch=master&service=github)](https://coveralls.io/github/kiliankoe/dvbjs?branch=master)
[![npmversion](http://img.shields.io/npm/v/dvbjs.svg?style=flat)](https://www.npmjs.org/package/dvbjs)
[![travis-ci](http://img.shields.io/travis/kiliankoe/dvbjs.svg?style=flat)](https://travis-ci.org/kiliankoe/dvbjs) [![Coverage Status](https://coveralls.io/repos/kiliankoe/dvbjs/badge.svg?branch=master&service=github)](https://coveralls.io/github/kiliankoe/dvbjs?branch=master) [![npmversion](http://img.shields.io/npm/v/dvbjs.svg?style=flat)](https://www.npmjs.org/package/dvbjs)

This is an unofficial node module, giving you a few options to query Dresden's public transport system for current bus- and tramstop data.

Expand Down Expand Up @@ -176,8 +174,17 @@ var nelat = 51.04615;
var nelng = 13.71368;

var pinType = dvb.pins.type.STOP; // type of the Pins
// or
var pinType = [dvb.pins.type.STOP, dvb.pins.type.PLATFORM]; // for multiple types

// options for stops
var options = {
showLines: true, // show connections. default: true
groupByType: true, // group lines by transport type. default: false
fullLineType: true // show type name, title and icon_url or only the name. default: false
};

dvb.pins(swlat, swlng, nelat, nelng, pinType, function (err, data) {
dvb.pins(swlat, swlng, nelat, nelng, pinType, options, function (err, data) {
if (err) throw err;
console.log(JSON.stringify(data, null, 4));
});
Expand All @@ -194,14 +201,18 @@ Output:
51.043733606562675,
13.706279792263878
],
"type": "stop",
"connections": [
{
"line": "7",
"type": "1"
},
{
"line": "8",
"type": "1"
"type": {
"title": "Straßenbahn",
"name": "tram",
"icon_url": "https://www.dvb.de/assets/img/trans-icon/transport-tram.svg"
},
"lines": [
"8",
"1"
]
},
{...}
]
Expand All @@ -211,7 +222,7 @@ Output:

```

The default pin type is `STOP`, other posible types are:
The default pin type is `STOP and POI`, other posible types are:

```js
pins.type = {
Expand Down
3 changes: 2 additions & 1 deletion lib/monitor.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ var monitor = function monitor(stop, offset, amount, callback) {
hst: stop,
vz: offset,
lim: amount
}
},
timeout: 10000
};

var now = new Date();
Expand Down
168 changes: 153 additions & 15 deletions lib/pins.js
Original file line number Diff line number Diff line change
@@ -1,25 +1,22 @@
'use strict';

var requestP = require('request-promise');
var _ = require('lodash');
var utils = require('./utils');

var pins = function pins(swlat, swlng, nelat, nelng, pinType, callback) {
var pins = function pins(swlat, swlng, nelat, nelng, pinTypes, options, callback) {
var sw = utils.WGS84toGK4(swlat, swlng);
var ne = utils.WGS84toGK4(nelat, nelng);

var options = {
url: 'https://www.dvb.de/apps/map/pins',
qs: {
showLines: 'true',
swlat: sw[1],
swlng: sw[0],
nelat: ne[1],
nelng: ne[0],
pintypes: pinType
}
};

return requestP(options)
if (options == null) {
options = {};
}
options.showLines = options.showLines != false;

pinTypes = Array.isArray(pinTypes) ? pinTypes.join("&pintypes=") : pinTypes;
var uri = 'https://www.dvb.de/apps/map/pins?showLines=' + options.showLines + '&swlat=' + sw[1] + '&swlng=' + sw[0] + '&nelat=' + ne[1] + '&nelng=' + ne[0] + '&pintypes=' + pinTypes;

return requestP(uri)
.then(function (data) {
if (!data) {
return [];
Expand All @@ -30,7 +27,7 @@ var pins = function pins(swlat, swlng, nelat, nelng, pinType, callback) {
return data.slice(2, data.length - 2).split('\",\"');
})
.map(function (elem) {
return utils.parsePin(elem, pinType);
return parsePin(elem, options);
}).nodeify(callback);
};

Expand All @@ -44,4 +41,145 @@ pins.type = {
PARK_AND_RIDE: 'parkandride'
};

pins.connection_type = [
{
title: "Straßenbahn",
name: "tram",
icon_url: "https://www.dvb.de/assets/img/trans-icon/transport-tram.svg"
},
{
title: "Stadtbus",
name: "citybus",
icon_url: "https://www.dvb.de/assets/img/trans-icon/transport-bus.svg"
},
{
title: "Regionalbus",
name: "regiobus",
icon_url: "https://www.dvb.de/assets/img/trans-icon/transport-bus.svg"
},
{
title: "S-Bahn",
name: "metropolitan",
icon_url: "https://www.dvb.de/assets/img/trans-icon/transport-metropolitan.svg"
},
{
title: "Seilbahn",
name: "lift",
icon_url: "https://www.dvb.de/assets/img/trans-icon/transport-lift.svg"
},
{
title: "Fähre",
name: "ferry",
icon_url: "https://www.dvb.de/assets/img/trans-icon/transport-ferry.svg"
},
{
title: "Anrufsammeltaxi (AST)/ Rufbus",
name: "ast",
icon_url: "https://www.dvb.de/assets/img/trans-icon/transport-alita.svg"
},
{
title: "Train",
name: "train",
icon_url: "https://www.dvb.de/assets/img/trans-icon/transport-train.svg"
}
];

function parsePin(dataAsString, options) {
var data = dataAsString.split('|');
var coords = utils.GK4toWGS84(data[4], data[5]);
var pinType = parsePinType(data[1]);

if (pinType === 'platform') {
return {
name: data[3],
coords: coords,
platform_nr: data[6],
type: pinType
};
} else if (_.contains(['poi', 'rentabike', 'ticketmachine', 'carsharing', 'parkandride'], pinType)) {
return {
id: data[0],
name: data[3],
coords: coords,
type: pinType
};
}

// 'stop' id default

if (options.showLines) {
return {
id: data[0],
name: data[3],
coords: coords,
type: pinType,
connections: parseConnections(data[7], options)
};
} else {
return {
id: data[0],
name: data[3],
coords: coords,
type: pinType
};
}
}

function parsePinType(pinID) {
switch (pinID) {
case "t":
return pins.type.TICKET_MACHINE;
case "pf":
return pins.type.PLATFORM;
case "c":
return pins.type.CAR_SHARING;
case "r":
return pins.type.RENT_A_BIKE;
case "pr":
return pins.type.PARK_AND_RIDE;
case "p":
return pins.type.POI;
default:
return pins.type.STOP;
}
}

function parseConnections(data, options) {
if (!data) return [];

var connections = [];

if (options.groupByType == true) {
connections = data.split('#').map(function (types) {
types = types.split(":");
return {
type: parseConnectionType(types[0],options),
lines: types[1].split("~").map(function (line) {
return line;
})
}
});
} else {
data.split('#').forEach(function (types) {
types = types.split(":");
connections = connections.concat(types[1].split("~").map(function (line) {
return {
line: line,
type: parseConnectionType(types[0],options)
}
}));
});
}

return connections;
}

function parseConnectionType(id, options) {
if (options.fullLineType == true) {
return pins.connection_type[id - 1]
} else {
return pins.connection_type[id - 1].name;
}
}

module.exports = pins;
46 changes: 0 additions & 46 deletions lib/utils.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
'use strict';

var _ = require('lodash');
var utils = {};
var proj4 = require('proj4');

Expand Down Expand Up @@ -33,49 +32,4 @@ utils.convertStop = function convertStop(point) {
};
};

utils.parsePin = function parsePin(dataAsString, pinType) {
var data = dataAsString.split('|');
var coords = utils.GK4toWGS84(data[4], data[5]);

if (pinType === 'platform') {
return {
name: data[3],
coords: coords,
platform_nr: data[6]
};
} else if (_.contains(['poi', 'rentabike', 'ticketmachine', 'carsharing', 'parkandride'], pinType)) {
return {
id: data[0],
name: data[3],
coords: coords
};
}

// 'stop' id default
return {
id: data[0],
name: data[3],
coords: coords,
connections: parseConnections(data[7])
};
};

function parseConnections(data) {
if (!data) return [];

var connections = [];

data.split('#').forEach(function (types) {
types = types.split(":");
connections = connections.concat(types[1].split("~").map(function (line) {
return {
line: line,
type: types[0]
}
}));
});

return connections;
}

module.exports = utils;
45 changes: 45 additions & 0 deletions test/address.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
'use strict';

var dvb = require('../index');
var utils = require('./utils');
var assert = require('assert');

describe('dvb.address', function () {
describe('dvb.address "51.025451, 13.722943"', function () {
utils.mockRequest('address-51-13.json');

it('should resolve into an object with city and address properties', function (done) {
dvb.address(51.025451, 13.722943)
.then(function (data) {
assert.strictEqual("Nöthnitzer Straße 46", data.address);
assert.strictEqual("Dresden", data.city);
done()
})
.catch(function (err) {
done(err);
});
});

it('should return a Promise but still accept a callback', function (done) {
dvb.address(51.025451, 13.722943, function (err, data) {
assert(data);
done();
}).then(assert);
});
});

describe('dvb.address "0, 0"', function () {
utils.mockRequest('empty.json');

it('should return null', function (done) {
dvb.address(0, 0)
.then(function (data) {
assert.equal(null, data);
done();
})
.catch(function (err) {
done(err);
});
});
});
});
Loading

0 comments on commit 3ca3694

Please sign in to comment.