update schedule data

This commit is contained in:
cjdenio committed 2025-08-18 09:47:28 -06:00
1 parent dd09f701f1
commit a9aa861931
2 files changed
+26 -30

No files matched your search

+26 -30
View File
@@ -2,15 +2,12 @@ package main
import ( import (
"database/sql" "database/sql"
"encoding/csv"
"fmt" "fmt"
"io" "io"
"log" "log"
"math" "math"
"net/http" "net/http"
"os" "os"
"slices"
"strconv"
pb "github.com/cjdenio/uta-trax-api/proto" pb "github.com/cjdenio/uta-trax-api/proto"
"google.golang.org/protobuf/proto" "google.golang.org/protobuf/proto"
@@ -93,6 +90,8 @@ func getVehicles() ([]*pb.VehiclePosition, error) {
return nil, err return nil, err
} }
log.Printf("Found %d vehicles...", len(feed.Entity))
vehicles := make([]*pb.VehiclePosition, 0, len(feed.Entity)) vehicles := make([]*pb.VehiclePosition, 0, len(feed.Entity))
for _, v := range feed.Entity { for _, v := range feed.Entity {
if v.Vehicle != nil { if v.Vehicle != nil {
@@ -112,46 +111,42 @@ type TripInfo struct {
var trips = make(map[string]*TripInfo) var trips = make(map[string]*TripInfo)
func loadTrips() error { func loadTrips() error {
f, err := os.Open("gtfs/trips.txt") rows, err := scheduleDb.Query("SELECT route_id, trip_id, trip_headsign, direction_id FROM trips;")
if err != nil { if err != nil {
return err return err
} }
r := csv.NewReader(f)
header, err := r.Read()
if err != nil {
return err
}
route_id := slices.Index(header, "route_id")
trip_id := slices.Index(header, "trip_id")
direction_id := slices.Index(header, "direction_id")
trip_headsign := slices.Index(header, "trip_headsign")
for { for {
if record, err := r.Read(); err == nil { if next := rows.Next(); next {
trip_info := new(TripInfo) trip_info := new(TripInfo)
trip_info.Headsign = record[trip_headsign]
direction, err := strconv.ParseInt(record[direction_id], 10, 32) var route_id string
if err == nil { var trip_id string
trip_info.Direction = int32(direction) var trip_headsign string
var direction_id int32
err = rows.Scan(&route_id, &trip_id, &trip_headsign, &direction_id)
if err != nil {
continue
} }
switch record[route_id] { trip_info.Headsign = trip_headsign
trip_info.Direction = direction_id
switch route_id {
case "8246": case "8246":
trip_info.Line = pb.VehicleFeed_RED trip_info.Line = pb.VehicleFeed_RED
trips[record[trip_id]] = trip_info trips[trip_id] = trip_info
case "39020": case "39020":
trip_info.Line = pb.VehicleFeed_GREEN trip_info.Line = pb.VehicleFeed_GREEN
trips[record[trip_id]] = trip_info trips[trip_id] = trip_info
case "5907": case "5907":
trip_info.Line = pb.VehicleFeed_BLUE trip_info.Line = pb.VehicleFeed_BLUE
trips[record[trip_id]] = trip_info trips[trip_id] = trip_info
case "45389": case "45389":
trip_info.Line = pb.VehicleFeed_STREETCAR trip_info.Line = pb.VehicleFeed_STREETCAR
trips[record[trip_id]] = trip_info trips[trip_id] = trip_info
// case "41065": // case "41065":
// trip_info.Line = pb.VehicleFeed_FRONTRUNNER // trip_info.Line = pb.VehicleFeed_FRONTRUNNER
// trips[record[trip_id]] = trip_info // trips[record[trip_id]] = trip_info
@@ -170,6 +165,7 @@ func feedifyVehicles(vehicles []*pb.VehiclePosition) pb.VehicleFeed {
for _, vehicle := range vehicles { for _, vehicle := range vehicles {
trip, ok := trips[*vehicle.Trip.TripId] trip, ok := trips[*vehicle.Trip.TripId]
if !ok { if !ok {
log.Printf("No matching trip '%s', skipping...", *vehicle.Trip.TripId)
continue continue
} }
@@ -190,15 +186,15 @@ func feedifyVehicles(vehicles []*pb.VehiclePosition) pb.VehicleFeed {
} }
func main() { func main() {
if err := loadTrips(); err != nil {
log.Fatalln(err)
}
_db, err := sql.Open("sqlite3", "uta-gtfs.db") _db, err := sql.Open("sqlite3", "uta-gtfs.db")
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
scheduleDb = _db scheduleDb = _db
if err := loadTrips(); err != nil {
log.Fatalln(err)
}
// vehicles, err := getVehicles() // vehicles, err := getVehicles()
// if err != nil { // if err != nil {
BIN
View File
Binary file not shown.