sandbox-node/pbf/index.js

116 lines
3.4 KiB
JavaScript
Raw Normal View History

2023-02-15 14:47:59 +01:00
require('dotenv').config();
2022-05-26 07:54:28 +02:00
const fs = require('fs');
2022-06-23 22:10:08 +02:00
const debug=require('debug')('debug');
2022-05-26 07:23:40 +02:00
const gtfsRt=require('../../proto2js/js/gtfs-rt.js');
const Pbf = require('pbf');
2023-02-15 14:47:59 +01:00
const file=process.env.file||'file';
debug('file: '+file)
2022-05-26 07:06:26 +02:00
run().catch(err => {
2022-05-26 07:23:40 +02:00
debug('run: error');
2022-05-26 07:06:26 +02:00
console.log(err)
});
async function run() {
2022-05-26 07:23:40 +02:00
debug('run started...');
const FeedMessage = gtfsRt.FeedMessage;
2022-05-26 07:54:28 +02:00
debug('read gtfs-rt feed from file');
2023-02-15 14:47:59 +01:00
const buffer=fs.readFileSync(file);
2022-05-26 07:54:28 +02:00
if(buffer instanceof Buffer){
debug('buffer is instance of Buffer');
debug('read buffer and create pbf');
const pbf = new Pbf(buffer);
2022-05-26 08:03:46 +02:00
debug('create feed');
const feed = FeedMessage.read(pbf);
debug('use feed');
if('header' in feed){
debug('feed has header');
2022-05-26 07:54:28 +02:00
}else{
2022-05-26 08:03:46 +02:00
debug('feed has header NOT');
2022-05-26 07:54:28 +02:00
}
2023-02-15 14:47:59 +01:00
let entityCount=0;
let entityVhclCount=0;
let entityTrpCount=0;
2023-02-15 15:05:56 +01:00
let entityTrpTrpCount=0;
2023-02-22 20:44:55 +01:00
let entityTrpTrpTrpIdCount=0;
let entityTrpTrpRtIdCount=0;
let entityTrpTrpRtId_Count=0;
2023-02-15 15:05:56 +01:00
let entityTrpVhclCount=0;
let entityTrpStuCount=0;
2023-02-15 14:47:59 +01:00
let entityAlrtCount=0;
let entityTbdCount=0;
2022-05-26 08:03:46 +02:00
feed.entity.forEach(entity => {
2023-02-15 14:47:59 +01:00
//debug('feed has entity at index: '+entityCount);
entityCount++;
2022-05-26 08:23:13 +02:00
const vehiclePos = entity.vehicle;
2023-02-15 14:47:59 +01:00
const tripUpdate=entity.trip_update;
const alert=entity.alert;
2022-05-26 08:23:13 +02:00
if (vehiclePos) {
2023-02-15 14:47:59 +01:00
entityVhclCount++;
2023-02-15 15:05:56 +01:00
//debug('entity has vehicle position');
2022-05-26 08:23:13 +02:00
const { trip, position, vehicle } = vehiclePos;
if (trip && position && vehicle) {
2023-02-15 15:05:56 +01:00
//debug('vehiclePos has either trip, position or vehicle');
2022-09-08 10:26:12 +02:00
const latitude = position.latitude;
if(latitude){
debug('position has latitude: '+latitude);
}
2022-05-26 08:23:13 +02:00
}else{
2022-09-08 10:26:12 +02:00
debug('vehiclePos misses either trip, latitude or vehicle');
2022-05-26 08:23:13 +02:00
}
2023-02-15 14:47:59 +01:00
}else if(tripUpdate){
entityTrpCount++;
2023-02-15 15:05:56 +01:00
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;
2023-02-22 20:44:55 +01:00
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++;
}
}
2023-02-15 15:05:56 +01:00
}
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;
}
2023-02-15 14:47:59 +01:00
}else if(alert){
entityAlrtCount++;
2022-05-26 08:23:13 +02:00
}else{
2023-02-15 14:47:59 +01:00
entityTbdCount++;
2022-05-26 08:23:13 +02:00
}
2022-05-26 08:03:46 +02:00
});
2023-02-15 14:47:59 +01:00
debug('entityCount: '+entityCount);
debug('entityVhclCount: '+entityVhclCount);
debug('entityTrpCount: '+entityTrpCount);
2023-02-15 15:05:56 +01:00
debug('entityTrpTrpCount: '+entityTrpTrpCount);
2023-02-22 20:44:55 +01:00
debug('entityTrpTrpTrpIdCount: '+entityTrpTrpTrpIdCount);
debug('entityTrpTrpRtIdCount: '+entityTrpTrpRtIdCount);
debug('entityTrpTrpRtId_Count: '+entityTrpTrpRtId_Count);
2023-02-15 15:05:56 +01:00
debug('entityTrpVhclCount: '+entityTrpVhclCount);
debug('entityTrpStuCount: '+entityTrpStuCount);
2023-02-15 14:47:59 +01:00
debug('entityAlrtCount: '+entityAlrtCount);
debug('entityTbdCount: '+entityTbdCount);
2022-05-26 07:54:28 +02:00
}else{
debug('buffer is NOT instance of Buffer');
}
2022-05-26 07:23:40 +02:00
debug('run done.');
2022-05-26 07:06:26 +02:00
}