116 lines
3.4 KiB
JavaScript
116 lines
3.4 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 entityTrpTrpCount=0;
|
|
let entityTrpTrpTrpIdCount=0;
|
|
let entityTrpTrpRtIdCount=0;
|
|
let entityTrpTrpRtId_Count=0;
|
|
let entityTrpVhclCount=0;
|
|
let entityTrpStuCount=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++;
|
|
const {trip,vehicle,stop_time_update,timestamp,delay,trip_properties}=tripUpdate;
|
|
if(trip){
|
|
entityTrpTrpCount++;
|
|
const {trip_id,route_id,direction_id,start_time,start_date,schedule_relationship}=trip;
|
|
if(trip_id){
|
|
entityTrpTrpTrpIdCount++;
|
|
if(entityTrpTrpTrpIdCount % 100 == 0){
|
|
debug('route_id: '+route_id);
|
|
debug('trip_id: '+trip_id);
|
|
}
|
|
}
|
|
if(route_id){
|
|
entityTrpTrpRtIdCount++;
|
|
if(!/[^a-z]/i.test(route_id)){
|
|
debug('This is ODD!');
|
|
debug('route_id: '+route_id);
|
|
debug('trip_id: '+trip_id);
|
|
}else if(route_id.includes("_")){
|
|
entityTrpTrpRtId_Count++;
|
|
}
|
|
}
|
|
}
|
|
if(vehicle){
|
|
entityTrpVhclCount++;
|
|
const {id,label,license_plate}=vehicle;
|
|
}
|
|
if(stop_time_update){
|
|
entityTrpStuCount++;
|
|
const {stop_sequence,stop_id,arrival,departure,departure_occupancy_status,schedule_relationship,stop_time_properties}=stop_time_update;
|
|
}
|
|
}else if(alert){
|
|
entityAlrtCount++;
|
|
}else{
|
|
entityTbdCount++;
|
|
}
|
|
});
|
|
debug('entityCount: '+entityCount);
|
|
debug('entityVhclCount: '+entityVhclCount);
|
|
debug('entityTrpCount: '+entityTrpCount);
|
|
debug('entityTrpTrpCount: '+entityTrpTrpCount);
|
|
debug('entityTrpTrpTrpIdCount: '+entityTrpTrpTrpIdCount);
|
|
debug('entityTrpTrpRtIdCount: '+entityTrpTrpRtIdCount);
|
|
debug('entityTrpTrpRtId_Count: '+entityTrpTrpRtId_Count);
|
|
debug('entityTrpVhclCount: '+entityTrpVhclCount);
|
|
debug('entityTrpStuCount: '+entityTrpStuCount);
|
|
debug('entityAlrtCount: '+entityAlrtCount);
|
|
debug('entityTbdCount: '+entityTbdCount);
|
|
}else{
|
|
debug('buffer is NOT instance of Buffer');
|
|
}
|
|
debug('run done.');
|
|
}
|