use of org.onebusaway.gtfs.model.Route in project onebusaway-application-modules by camsys.
the class StopTimeEntriesFactoryTest method testDuplicateRemoval.
@Test
public void testDuplicateRemoval() {
TransitGraphImpl graph = new TransitGraphImpl();
Stop stopA = new Stop();
stopA.setId(aid("stopA"));
graph.putStopEntry(stop("stopA", 47.672207391799056, -122.387855896286));
Stop stopB = new Stop();
stopB.setId(aid("stopB"));
graph.putStopEntry(stop("stopB", 47.66852277218285, -122.3853882639923));
Stop stopC = new Stop();
stopC.setId(aid("stopC"));
graph.putStopEntry(stop("stopC", 47.66847942216854, -122.37545336180114));
graph.refreshStopMapping();
Agency agency = new Agency();
agency.setId("1");
agency.setTimezone("America/Los_Angeles");
Route route = new Route();
route.setAgency(agency);
Trip trip = new Trip();
trip.setRoute(route);
trip.setServiceId(aid("serviceId"));
TripEntryImpl tripEntry = trip("trip");
StopTime stA = new StopTime();
stA.setId(100);
stA.setArrivalTime(time(9, 00));
stA.setDepartureTime(time(9, 05));
stA.setStopSequence(100);
stA.setStop(stopA);
stA.setTrip(trip);
StopTime stB = new StopTime();
stB.setId(101);
stB.setArrivalTime(time(9, 00));
stB.setDepartureTime(time(9, 05));
stB.setStopSequence(101);
stB.setStop(stopB);
stB.setTrip(trip);
StopTime stC = new StopTime();
stC.setId(102);
stC.setArrivalTime(time(10, 00));
stC.setDepartureTime(time(10, 05));
stC.setStopSequence(102);
stC.setStop(stopC);
stC.setTrip(trip);
StopTimeEntriesFactory factory = new StopTimeEntriesFactory();
factory.setDistanceAlongShapeLibrary(new DistanceAlongShapeLibrary());
List<StopTime> stopTimes = Arrays.asList(stA, stB, stC);
ShapePointsFactory shapePointsFactory = new ShapePointsFactory();
shapePointsFactory.addPoint(47.673840100841396, -122.38756621771239);
shapePointsFactory.addPoint(47.668667271970484, -122.38756621771239);
shapePointsFactory.addPoint(47.66868172192725, -122.3661729186096);
ShapePoints shapePoints = shapePointsFactory.create();
List<StopTimeEntryImpl> entries = factory.processStopTimes(graph, stopTimes, tripEntry, shapePoints);
assertEquals(stopTimes.size(), entries.size());
StopTimeEntryImpl entry = entries.get(0);
assertEquals(0, entry.getAccumulatedSlackTime());
assertEquals(time(9, 00), entry.getArrivalTime());
assertEquals(time(9, 05), entry.getDepartureTime());
assertEquals(0, entry.getSequence());
assertEquals(181.5, entry.getShapeDistTraveled(), 0.1);
assertEquals(5 * 60, entry.getSlackTime());
entry = entries.get(1);
assertEquals(5 * 60, entry.getAccumulatedSlackTime());
assertEquals(time(9, 28, 31), entry.getArrivalTime());
assertEquals(time(9, 28, 31), entry.getDepartureTime());
assertEquals(1, entry.getSequence());
assertEquals(738.7, entry.getShapeDistTraveled(), 0.1);
assertEquals(0, entry.getSlackTime());
entry = entries.get(2);
assertEquals(5 * 60, entry.getAccumulatedSlackTime());
assertEquals(time(10, 00), entry.getArrivalTime());
assertEquals(time(10, 05), entry.getDepartureTime());
assertEquals(2, entry.getSequence());
assertEquals(1484.5, entry.getShapeDistTraveled(), 0.1);
assertEquals(5 * 60, entry.getSlackTime());
}
use of org.onebusaway.gtfs.model.Route in project onebusaway-application-modules by camsys.
the class StopTimeEntriesFactoryTest method test.
@Test
public void test() {
TransitGraphImpl graph = new TransitGraphImpl();
Stop stopA = new Stop();
stopA.setId(aid("stopA"));
graph.putStopEntry(stop("stopA", 47.672207391799056, -122.387855896286));
Stop stopB = new Stop();
stopB.setId(aid("stopB"));
graph.putStopEntry(stop("stopB", 47.66852277218285, -122.3853882639923));
Stop stopC = new Stop();
stopC.setId(aid("stopC"));
graph.putStopEntry(stop("stopC", 47.66847942216854, -122.37545336180114));
graph.refreshStopMapping();
Agency agency = new Agency();
agency.setId("1");
agency.setTimezone("America/Los_Angeles");
Route route = new Route();
route.setAgency(agency);
Trip trip = new Trip();
trip.setRoute(route);
trip.setServiceId(aid("serviceId"));
TripEntryImpl tripEntry = trip("trip");
StopTime stA = new StopTime();
stA.setId(100);
stA.setArrivalTime(time(9, 00));
stA.setDepartureTime(time(9, 05));
stA.setStopSequence(100);
stA.setStop(stopA);
stA.setTrip(trip);
StopTime stB = new StopTime();
stB.setId(101);
stB.setStopSequence(101);
stB.setStop(stopB);
stB.setTrip(trip);
StopTime stC = new StopTime();
stC.setId(102);
stC.setArrivalTime(time(10, 00));
stC.setDepartureTime(time(10, 05));
stC.setStopSequence(102);
stC.setStop(stopC);
stC.setTrip(trip);
StopTimeEntriesFactory factory = new StopTimeEntriesFactory();
factory.setDistanceAlongShapeLibrary(new DistanceAlongShapeLibrary());
List<StopTime> stopTimes = Arrays.asList(stA, stB, stC);
ShapePointsFactory shapePointsFactory = new ShapePointsFactory();
shapePointsFactory.addPoint(47.673840100841396, -122.38756621771239);
shapePointsFactory.addPoint(47.668667271970484, -122.38756621771239);
shapePointsFactory.addPoint(47.66868172192725, -122.3661729186096);
ShapePoints shapePoints = shapePointsFactory.create();
List<StopTimeEntryImpl> entries = factory.processStopTimes(graph, stopTimes, tripEntry, shapePoints);
assertEquals(stopTimes.size(), entries.size());
StopTimeEntryImpl entry = entries.get(0);
assertEquals(0, entry.getAccumulatedSlackTime());
assertEquals(time(9, 00), entry.getArrivalTime());
assertEquals(time(9, 05), entry.getDepartureTime());
assertEquals(0, entry.getSequence());
assertEquals(181.5, entry.getShapeDistTraveled(), 0.1);
assertEquals(5 * 60, entry.getSlackTime());
entry = entries.get(1);
assertEquals(5 * 60, entry.getAccumulatedSlackTime());
assertEquals(time(9, 28, 31), entry.getArrivalTime());
assertEquals(time(9, 28, 31), entry.getDepartureTime());
assertEquals(1, entry.getSequence());
assertEquals(738.7, entry.getShapeDistTraveled(), 0.1);
assertEquals(0, entry.getSlackTime());
entry = entries.get(2);
assertEquals(5 * 60, entry.getAccumulatedSlackTime());
assertEquals(time(10, 00), entry.getArrivalTime());
assertEquals(time(10, 05), entry.getDepartureTime());
assertEquals(2, entry.getSequence());
assertEquals(1484.5, entry.getShapeDistTraveled(), 0.1);
assertEquals(5 * 60, entry.getSlackTime());
}
use of org.onebusaway.gtfs.model.Route in project onebusaway-application-modules by camsys.
the class TripEntriesFactory method processTrips.
public void processTrips(TransitGraphImpl graph) {
Collection<Route> routes = _gtfsDao.getAllRoutes();
int routeIndex = 0;
for (Route route : routes) {
_log.info("route processed: " + routeIndex + "/" + routes.size());
routeIndex++;
List<Trip> tripsForRoute = _gtfsDao.getTripsForRoute(route);
int tripCount = tripsForRoute.size();
int logInterval = LoggingIntervalUtil.getAppropriateLoggingInterval(tripCount);
_log.info("trips to process: " + tripCount);
int tripIndex = 0;
RouteEntryImpl routeEntry = graph.getRouteForId(route.getId());
ArrayList<TripEntry> tripEntries = new ArrayList<TripEntry>();
for (Trip trip : tripsForRoute) {
tripIndex++;
if (tripIndex % logInterval == 0)
_log.info("trips processed: " + tripIndex + "/" + tripsForRoute.size());
TripEntryImpl tripEntry = processTrip(graph, trip);
if (tripEntry != null) {
tripEntry.setRoute(routeEntry);
tripEntries.add(tripEntry);
}
}
tripEntries.trimToSize();
routeEntry.setTrips(tripEntries);
}
if (_stopTimeEntriesFactory.getInvalidStopToShapeMappingExceptionCount() > 0 && _throwExceptionOnInvalidStopToShapeMappingException) {
throw new IllegalStateException("Multiple instances of InvalidStopToShapeMappingException thrown: count=" + _stopTimeEntriesFactory.getInvalidStopToShapeMappingExceptionCount() + ". For more information on errors of this kind, see:\n" + " https://github.com/OneBusAway/onebusaway-application-modules/wiki/Stop-to-Shape-Matching");
}
graph.refreshTripMapping();
}
use of org.onebusaway.gtfs.model.Route in project onebusaway-gtfs-modules by OneBusAway.
the class AgencyMergeStrategyTest method testRenameAllAgencyIdReferences.
@Test
public void testRenameAllAgencyIdReferences() {
GtfsRelationalDaoImpl sourceA = new GtfsRelationalDaoImpl();
Agency agencyA = new Agency();
agencyA.setId("1");
agencyA.setName("Metro");
agencyA.setUrl("http://metro.gov/");
sourceA.saveEntity(agencyA);
GtfsRelationalDaoImpl sourceB = new GtfsRelationalDaoImpl();
Agency agencyB = new Agency();
agencyB.setId("1");
agencyA.setName("Metra");
agencyA.setUrl("http://metra.gov/");
sourceB.saveEntity(agencyB);
Route route = new Route();
route.setAgency(agencyB);
route.setId(new AgencyAndId("1", "routeId"));
sourceB.saveEntity(route);
Trip trip = new Trip();
trip.setRoute(route);
trip.setId(new AgencyAndId("1", "tripId"));
trip.setServiceId(new AgencyAndId("1", "serviceId"));
trip.setShapeId(new AgencyAndId("1", "shapeId"));
sourceB.saveEntity(trip);
FareAttribute fare = new FareAttribute();
fare.setId(new AgencyAndId("1", "fareId"));
sourceB.saveEntity(fare);
Stop stop = new Stop();
stop.setId(new AgencyAndId("1", "stopId"));
sourceB.saveEntity(stop);
ServiceCalendar calendar = new ServiceCalendar();
calendar.setServiceId(new AgencyAndId("1", "serviceId"));
sourceB.saveEntity(calendar);
ServiceCalendarDate calendarDate = new ServiceCalendarDate();
calendarDate.setServiceId(new AgencyAndId("1", "serviceId"));
sourceB.saveEntity(calendarDate);
ShapePoint point = new ShapePoint();
point.setShapeId(new AgencyAndId("1", "shapeId"));
sourceB.saveEntity(point);
_strategy.merge(context(sourceA, _target, "a-"));
_strategy.merge(context(sourceB, _target, "b-"));
Collection<Agency> agencies = _target.getAllAgencies();
assertEquals(2, agencies.size());
assertSame(agencyA, _target.getAgencyForId("1"));
assertSame(agencyB, _target.getAgencyForId("b-1"));
assertEquals("b-1", route.getId().getAgencyId());
assertEquals("b-1", trip.getId().getAgencyId());
assertEquals("b-1", trip.getServiceId().getAgencyId());
assertEquals("b-1", trip.getShapeId().getAgencyId());
assertEquals("b-1", fare.getId().getAgencyId());
assertEquals("b-1", stop.getId().getAgencyId());
assertEquals("b-1", calendar.getServiceId().getAgencyId());
assertEquals("b-1", calendarDate.getServiceId().getAgencyId());
assertEquals("b-1", point.getShapeId().getAgencyId());
}
use of org.onebusaway.gtfs.model.Route in project onebusaway-gtfs-modules by OneBusAway.
the class GtfsMergerTest method testRenameStrategy.
@Test
public void testRenameStrategy() throws IOException {
// lowest priority feed (first) to highest priority feed (last)
_oldGtfs.putLines("agency.txt", "agency_id,agency_name,agency_url,agency_timezone", "3,Pierce,http://p.us/,America/Los_Angeles");
_oldGtfs.putLines("routes.txt", "route_id,route_short_name,route_long_name,route_type", "R10,10,The Pierce Ten,3");
_oldGtfs.putLines("stops.txt", "stop_id,stop_name,stop_lat,stop_lon", "100,The Stop,47.654403,-122.305211", "200,Pierce Other Stop,47.668594,-122.298859", "400,Pierce Only Stop,47.669563,-122.305420");
_oldGtfs.putLines("calendars.txt", "service_id,monday,tuesday,wednesday,thursday,friday,saturday,sunday,start_date,end_date", "sid0,1,1,1,1,1,0,0,20110101,20111231");
_oldGtfs.putLines("trips.txt", "route_id,service_id,trip_id", "R10,sid0,T10-0", "R10,sid0,T10-1");
// stop conflict only
_oldGtfs.putStopTimes("T10-0", "100,200");
_oldGtfs.putStopTimes("T10-1", "100,400");
_oldGtfs.putLines("stop_times.txt", "trip_id,stop_id,stop_sequence,arrival_time,departure_time", "T10-0,100,0,08:00:00,08:00:00", "T10-0,200,1,09:00:00,09:00:00", "T10-1,100,1,08:00:00,08:00:00", "T10-1,400,1,09:00:00,09:00:00");
_newGtfs.putLines("agency.txt", "agency_id,agency_name,agency_url,agency_timezone", "1,Metro,http://metro.gov/,America/Los_Angeles", "3,Pierce,http://p.us/,America/Los_Angeles");
_newGtfs.putLines("routes.txt", "agency_id,route_id,route_short_name,route_long_name,route_type", "1,R10,10,The KCM Ten,3");
_newGtfs.putLines("stops.txt", "stop_id,stop_name,stop_lat,stop_lon", "100,The Stop,47.654403,-122.305211", "200,The Other Stop,47.656303,-122.315436", "300,The Third Stop,47.668575,-122.283653");
_newGtfs.putCalendars(1, "mask=1111100", "start_date=20120504", "end_date=20120608");
_newGtfs.putLines("trips.txt", "route_id,service_id,trip_id", "R10,sid0,T10-0");
_newGtfs.putLines("stop_times.txt", "trip_id,stop_id,stop_sequence,arrival_time,departure_time", "T10-0,100,0,08:00:00,08:00:00", "T10-0,200,1,09:00:00,09:00:00", "T10-0,300,1,10:00:00,10:00:00");
_pugetGtfs = MockGtfs.create();
_pugetGtfs.putLines("agency.txt", "agency_id,agency_name,agency_url,agency_timezone", "0,Puget Sound Region,http://puget-sound.gov/,America/Los_Angeles");
_pugetGtfs.putLines("routes.txt", "route_id,route_short_name,route_long_name,route_type", "");
_pugetGtfs.putLines("stops.txt", "stop_id,stop_name,stop_lat,stop_lon", "");
_pugetGtfs.putLines("calendars.txt", "service_id,monday,tuesday,wednesday,thursday,friday,saturday,sunday,start_date,end_date", "");
_pugetGtfs.putCalendars(1, "mask=1111100", "start_date=20120504", "end_date=20120608");
_pugetGtfs.putLines("trips.txt", "route_id,service_id,trip_id", "");
_pugetGtfs.putLines("stop_times.txt", "trip_id,stop_id,stop_sequence,arrival_time,departure_time", "");
AgencyMergeStrategy agencyStrategy = new AgencyMergeStrategy();
agencyStrategy.setDuplicateDetectionStrategy(EDuplicateDetectionStrategy.FUZZY);
_merger.setAgencyStrategy(agencyStrategy);
TripMergeStrategy tripStrategy = new TripMergeStrategy();
tripStrategy.setDuplicateDetectionStrategy(EDuplicateDetectionStrategy.FUZZY);
tripStrategy.setDuplicateRenamingStrategy(EDuplicateRenamingStrategy.AGENCY);
_merger.setTripStrategy(tripStrategy);
StopMergeStrategy stopStrategy = new StopMergeStrategy();
stopStrategy.setDuplicateDetectionStrategy(EDuplicateDetectionStrategy.FUZZY);
stopStrategy.setDuplicateRenamingStrategy(EDuplicateRenamingStrategy.AGENCY);
stopStrategy.setLogDuplicatesStrategy(ELogDuplicatesStrategy.WARNING);
_merger.setStopStrategy(stopStrategy);
RouteMergeStrategy routeStrategy = new RouteMergeStrategy();
routeStrategy.setDuplicateDetectionStrategy(EDuplicateDetectionStrategy.FUZZY);
routeStrategy.setDuplicateRenamingStrategy(EDuplicateRenamingStrategy.AGENCY);
_merger.setRouteStrategy(routeStrategy);
ServiceCalendarMergeStrategy serviceStrategy = new ServiceCalendarMergeStrategy();
serviceStrategy.setDuplicateDetectionStrategy(EDuplicateDetectionStrategy.FUZZY);
serviceStrategy.setDuplicateRenamingStrategy(EDuplicateRenamingStrategy.AGENCY);
_merger.setServiceCalendarStrategy(serviceStrategy);
GtfsRelationalDao dao = merge();
// pierce is included twice, it should not show up as a duplicate
assertTrue(dao.getAllAgencies().size() == 3);
for (Trip trip : dao.getAllTrips()) {
String tripId = trip.getId().getId();
// AGENCY renaming strategy
assertTrue(!tripId.matches("^[a-j]-.*"));
assertTrue(dao.getStopTimesForTrip(trip).size() > 0);
}
boolean pugetStopFound = false;
for (Stop stop : dao.getAllStops()) {
if ("0".equals(stop.getId().getAgencyId())) {
pugetStopFound = true;
}
String stopId = stop.getId().getId();
// AGENCY renaming strategy
assertTrue(!stopId.matches("^[a-j]-.*"));
}
for (Route route : dao.getAllRoutes()) {
String routeId = route.getId().getId();
// AGENCY renaming strategy
assertTrue(!routeId.matches("^[a-j]-.*"));
}
for (ServiceCalendar service : dao.getAllCalendars()) {
String serviceId = service.getServiceId().getId();
assertTrue(!serviceId.matches("^[a-j]-.*"));
}
assertTrue("b-sid0".matches("[a-j]-.*"));
assertTrue("expect a puget stop", pugetStopFound);
}
Aggregations