use of org.onebusaway.gtfs.model.ShapePoint in project onebusaway-gtfs-modules by OneBusAway.
the class ShapePointArray method add.
/****
* {@link List} Interface
****/
@Override
public boolean add(ShapePoint shapePoint) {
int index = size;
size++;
ensureCapacity(size);
shapeIds[index] = shapePoint.getShapeId();
sequences[index] = shapePoint.getSequence();
lats[index] = shapePoint.getLat();
lons[index] = shapePoint.getLon();
distTraveled[index] = shapePoint.getDistTraveled();
return true;
}
use of org.onebusaway.gtfs.model.ShapePoint in project onebusaway-gtfs-modules by OneBusAway.
the class GtfsRelationalDaoImplTest method testBart.
@Test
public void testBart() throws IOException {
GtfsRelationalDaoImpl dao = new GtfsRelationalDaoImpl();
GtfsTestData.readGtfs(dao, GtfsTestData.getBartGtfs(), "BART");
List<String> tripAgencyIds = dao.getTripAgencyIdsReferencingServiceId(new AgencyAndId("BART", "WKDY"));
assertEquals(1, tripAgencyIds.size());
assertEquals("BART", tripAgencyIds.get(0));
Agency agency = dao.getAgencyForId("BART");
List<Route> routes = dao.getRoutesForAgency(agency);
assertEquals(10, routes.size());
agency = dao.getAgencyForId("AirBART");
routes = dao.getRoutesForAgency(agency);
assertEquals(1, routes.size());
Route route = dao.getRouteForId(new AgencyAndId("BART", "01"));
List<Trip> trips = dao.getTripsForRoute(route);
assertEquals(225, trips.size());
Trip trip = dao.getTripForId(new AgencyAndId("BART", "15PB1"));
List<StopTime> stopTimes = dao.getStopTimesForTrip(trip);
assertEquals(12, stopTimes.size());
// Ensure the stopTimes are in stop sequence order
for (int i = 0; i < stopTimes.size() - 1; i++) assertTrue(stopTimes.get(i).getStopSequence() < stopTimes.get(i + 1).getStopSequence());
Stop stop = dao.getStopForId(new AgencyAndId("BART", "DBRK"));
stopTimes = dao.getStopTimesForStop(stop);
assertEquals(584, stopTimes.size());
List<ShapePoint> shapePoints = dao.getShapePointsForShapeId(new AgencyAndId("BART", "airbart-dn.csv"));
assertEquals(50, shapePoints.size());
for (int i = 0; i < shapePoints.size() - 1; i++) assertTrue(shapePoints.get(i).getSequence() < shapePoints.get(i + 1).getSequence());
trip = dao.getTripForId(new AgencyAndId("AirBART", "M-FSAT1DN"));
List<Frequency> frequencies = dao.getFrequenciesForTrip(trip);
assertEquals(1, frequencies.size());
Frequency frequency = frequencies.get(0);
assertEquals(5 * 60 * 60, frequency.getStartTime());
assertEquals(6 * 60 * 60, frequency.getEndTime());
assertEquals(trip, frequency.getTrip());
assertEquals(1200, frequency.getHeadwaySecs());
ServiceCalendar calendar = dao.getCalendarForServiceId(new AgencyAndId("BART", "WKDY"));
assertEquals(new ServiceDate(2007, 1, 1), calendar.getStartDate());
List<ServiceCalendarDate> calendarDates = dao.getCalendarDatesForServiceId(new AgencyAndId("BART", "WKDY"));
assertEquals(7, calendarDates.size());
}
use of org.onebusaway.gtfs.model.ShapePoint 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.ShapePoint in project onebusaway-gtfs-modules by OneBusAway.
the class SubsectionTripTransformStrategy method updateShape.
private void updateShape(GtfsMutableRelationalDao dao, Trip trip, List<StopTime> stopTimes, Set<AgencyAndId> newShapeIds) {
if (stopTimes.size() < 2) {
trip.setShapeId(null);
return;
}
AgencyAndId shapeId = trip.getShapeId();
if (shapeId == null || !shapeId.hasValues()) {
return;
}
List<ShapePoint> points = dao.getShapePointsForShapeId(shapeId);
if (points.isEmpty()) {
return;
}
Stop firstStop = stopTimes.get(0).getStop();
Stop lastStop = stopTimes.get(stopTimes.size() - 1).getStop();
String id = shapeId.getId() + "-" + firstStop.getId().getId() + "-" + lastStop.getId().getId();
AgencyAndId newShapeId = new AgencyAndId("1", id);
trip.setShapeId(newShapeId);
if (!newShapeIds.add(newShapeId)) {
return;
}
int shapePointFrom = getClosestShapePointToStop(points, firstStop);
int shapePointTo = getClosestShapePointToStop(points, lastStop);
for (int index = shapePointFrom; index <= shapePointTo; ++index) {
ShapePoint point = new ShapePoint(points.get(index));
point.setId(0);
point.setShapeId(newShapeId);
dao.saveEntity(point);
}
}
use of org.onebusaway.gtfs.model.ShapePoint in project onebusaway-gtfs-modules by OneBusAway.
the class TrimTripTransformStrategy method run.
@Override
public void run(TransformContext context, GtfsMutableRelationalDao dao) {
List<Trip> tripsToAdd = new ArrayList<Trip>();
List<StopTime> stopTimesToAdd = new ArrayList<StopTime>();
List<Trip> tripsToRemove = new ArrayList<Trip>();
List<StopTime> stopTimesToRemove = new ArrayList<StopTime>();
Set<AgencyAndId> newShapeIds = new HashSet<AgencyAndId>();
for (Trip trip : dao.getAllTrips()) {
List<TrimOperation> operations = getMatchingOperations(trip);
if (operations.isEmpty()) {
continue;
}
List<StopTime> stopTimes = dao.getStopTimesForTrip(trip);
Map<String, Integer> stopToIndex = getStopIndices(stopTimes);
boolean removeOriginalTrip = false;
for (TrimOperation operation : operations) {
Integer preIndex = stopToIndex.get(operation.getToStopId());
Integer postIndex = stopToIndex.get(operation.getFromStopId());
if (postIndex == null && preIndex == null) {
continue;
}
removeOriginalTrip = true;
Trip newTrip = new Trip(trip);
String id = newTrip.getId().getId();
if (preIndex != null) {
id += "-" + operation.getToStopId();
}
if (postIndex != null) {
id += "-" + operation.getFromStopId();
}
if (preIndex == null) {
preIndex = 0;
} else {
preIndex++;
}
if (postIndex == null) {
postIndex = stopTimes.size() - 1;
} else {
postIndex--;
}
newTrip.setId(new AgencyAndId(trip.getId().getAgencyId(), id));
List<StopTime> newStopTimes = new ArrayList<StopTime>();
for (int i = preIndex; i <= postIndex; ++i) {
StopTime stopTime = new StopTime(stopTimes.get(i));
stopTime.setId(0);
stopTime.setTrip(newTrip);
newStopTimes.add(stopTime);
}
/**
* If the entire trip was trimmed, we just drop it.
*/
if (newStopTimes.isEmpty()) {
continue;
}
updateShape(dao, newTrip, newStopTimes, newShapeIds);
tripsToAdd.add(newTrip);
stopTimesToAdd.addAll(newStopTimes);
}
if (removeOriginalTrip) {
tripsToRemove.add(trip);
stopTimesToRemove.addAll(stopTimes);
}
}
for (StopTime stopTime : stopTimesToRemove) {
dao.removeEntity(stopTime);
}
for (Trip trip : tripsToRemove) {
dao.removeEntity(trip);
}
for (Trip trip : tripsToAdd) {
dao.saveEntity(trip);
}
for (StopTime stopTime : stopTimesToAdd) {
dao.saveEntity(stopTime);
}
UpdateLibrary.clearDaoCache(dao);
Set<AgencyAndId> shapeIds = new HashSet<AgencyAndId>(dao.getAllShapeIds());
for (Trip trip : dao.getAllTrips()) {
shapeIds.remove(trip.getShapeId());
}
for (AgencyAndId shapeId : shapeIds) {
for (ShapePoint point : dao.getShapePointsForShapeId(shapeId)) {
dao.removeEntity(point);
}
}
}
Aggregations