sandbox-node/pbf/index.js

74 lines
2.0 KiB
JavaScript

require('dotenv').config();
const fs = require('fs');
const debug=require('debug')('debug');
const gtfsRt=require('../../proto2js/js/gtfs-rt.js');
const Pbf = require('pbf');
const file=process.env.file||'file';
debug('file: '+file)
run().catch(err => {
debug('run: error');
console.log(err)
});
async function run() {
debug('run started...');
const FeedMessage = gtfsRt.FeedMessage;
debug('read gtfs-rt feed from file');
const buffer=fs.readFileSync(file);
if(buffer instanceof Buffer){
debug('buffer is instance of Buffer');
debug('read buffer and create pbf');
const pbf = new Pbf(buffer);
debug('create feed');
const feed = FeedMessage.read(pbf);
debug('use feed');
if('header' in feed){
debug('feed has header');
}else{
debug('feed has header NOT');
}
let entityCount=0;
let entityVhclCount=0;
let entityTrpCount=0;
let entityAlrtCount=0;
let entityTbdCount=0;
feed.entity.forEach(entity => {
//debug('feed has entity at index: '+entityCount);
entityCount++;
const vehiclePos = entity.vehicle;
const tripUpdate=entity.trip_update;
const alert=entity.alert;
if (vehiclePos) {
entityVhclCount++;
debug('entity has vehicle position');
const { trip, position, vehicle } = vehiclePos;
if (trip && position && vehicle) {
debug('vehiclePos has either trip, position or vehicle');
const latitude = position.latitude;
if(latitude){
debug('position has latitude: '+latitude);
}
}else{
debug('vehiclePos misses either trip, latitude or vehicle');
}
}else if(tripUpdate){
entityTrpCount++;
}else if(alert){
entityAlrtCount++;
}else{
entityTbdCount++;
}
});
debug('entityCount: '+entityCount);
debug('entityVhclCount: '+entityVhclCount);
debug('entityTrpCount: '+entityTrpCount);
debug('entityAlrtCount: '+entityAlrtCount);
debug('entityTbdCount: '+entityTbdCount);
}else{
debug('buffer is NOT instance of Buffer');
}
debug('run done.');
}