87 lines
2.1 KiB
JavaScript
87 lines
2.1 KiB
JavaScript
const debug = require('debug')('gtfs');
|
|
const GtfsRealtimeBindings = require('gtfs-realtime-bindings');
|
|
|
|
function decode(buffer){
|
|
debug('decode...');
|
|
|
|
var feed = GtfsRealtimeBindings.transit_realtime.FeedMessage.decode(buffer);
|
|
if(feed){
|
|
debug('feed: %s',feed)
|
|
let header=feed.header;
|
|
if(header){
|
|
debug('header: %s',header)
|
|
let gtfsRealtimeVersion=header.gtfsRealtimeVersion;
|
|
if(gtfsRealtimeVersion){
|
|
debug('gtfsRealtimeVersion: %s',gtfsRealtimeVersion)
|
|
}
|
|
}
|
|
feed.entity.forEach(function(entity) {
|
|
if (entity.tripUpdate) {
|
|
debug('tripUpdate')
|
|
const tripUpdate=entity.tripUpdate;
|
|
if(tripUpdate.trip){
|
|
debug('TripDescriptor')
|
|
const trip=tripUpdate.trip
|
|
if(trip.tripId){
|
|
debug('trip_id: %s',trip.tripId)
|
|
}
|
|
if(trip.routeId){
|
|
debug('route_id: %s',trip.routeId)
|
|
}
|
|
if(trip.directionId){
|
|
debug('direction_id: %s',trip.directionId)
|
|
}
|
|
if(trip.startTime){
|
|
debug('start_time: %s',trip.startTime)
|
|
}
|
|
if(trip.startDate){
|
|
debug('start_date: %s',trip.startDate)
|
|
}
|
|
if(trip.scheduleRelationship){
|
|
debug('schedule_relationship: %s',trip.scheduleRelationship)
|
|
}
|
|
}
|
|
if(tripUpdate.vehicle){
|
|
debug('VehicleDescriptor')
|
|
}
|
|
if(tripUpdate.timestamp){
|
|
debug('timestamp: %s',tripUpdate.timestamp)
|
|
}
|
|
}else if(entity.vehicle){
|
|
const vehPos=entity.vehicle;
|
|
debug('vehiclePosition')
|
|
if(vehPos.position){
|
|
const pos=vehPos.position;
|
|
debug('position')
|
|
if(pos.latitude){
|
|
const lat=pos.latitude;
|
|
debug('lat: %s',lat)
|
|
}
|
|
if(pos.longitude){
|
|
const lon=pos.longitude;
|
|
debug('lon: %s',lon)
|
|
}
|
|
}
|
|
}else if(entity.alert){
|
|
debug('alert')
|
|
}else{
|
|
debug('entity unknown')
|
|
}
|
|
});
|
|
// Verify the payload if necessary (i.e. when possibly incomplete or invalid)
|
|
let errMsg = GtfsRealtimeBindings.transit_realtime.FeedMessage.verify(feed);
|
|
if (errMsg){
|
|
debug('msg invalid')
|
|
throw Error(errMsg);
|
|
}else{
|
|
debug('msg valid')
|
|
}
|
|
}else{
|
|
debug('feed unavailable')
|
|
}
|
|
debug('...done.')
|
|
return feed;
|
|
}
|
|
module.exports = {decode}
|
|
|