Skip to content

Commit

Permalink
Merged in flex direct transfer work
Browse files Browse the repository at this point in the history
  • Loading branch information
dbenoff committed Mar 10, 2017
1 parent 71f81e6 commit b69d79c
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 16 deletions.
Expand Up @@ -418,15 +418,15 @@ private TObjectDoubleMap<Vertex> streetSearch (RoutingRequest rr, boolean fromTa
new PatternArriveVertex(graph, temporaryTripPattern, stopIndex, flagStop); new PatternArriveVertex(graph, temporaryTripPattern, stopIndex, flagStop);
rr.rctx.temporaryVertices.add(patternArriveVertex); rr.rctx.temporaryVertices.add(patternArriveVertex);


TemporaryPatternHop forwardSearchPatternHop = findShortenedPatternHops(originalPatternHop); TemporaryPatternHop reverseSearchPatternHop = findShortenedPatternHops(originalPatternHop);
if(forwardSearchPatternHop != null){ if(reverseSearchPatternHop != null){
//processed by forward search already, use the trimmed geometry //processed by forward search already, use the trimmed geometry
LineString preStopHopGeometry = getShortenedPatternHopGeometryForFlagStop(forwardSearchPatternHop.getGeometry().getCoordinates(), v.getCoordinate(), fromTarget); LineString preStopHopGeometry = getShortenedPatternHopGeometryForFlagStop(reverseSearchPatternHop.getGeometry().getCoordinates(), v.getCoordinate(), fromTarget);
double originalHopGeometryLength = GeometryUtils.getLengthInMeters(forwardSearchPatternHop.originalPatternHop.getGeometry()); double originalHopGeometryLength = GeometryUtils.getLengthInMeters(reverseSearchPatternHop.originalPatternHop.getGeometry());
double shortenedHopGeometryLength = GeometryUtils.getLengthInMeters(preStopHopGeometry); double shortenedHopGeometryLength = GeometryUtils.getLengthInMeters(preStopHopGeometry);
double distanceRatio = shortenedHopGeometryLength/originalHopGeometryLength; double distanceRatio = shortenedHopGeometryLength/originalHopGeometryLength;
forwardSearchPatternHop.distanceRatio = distanceRatio; reverseSearchPatternHop.distanceRatio = distanceRatio;
forwardSearchPatternHop.setGeometry(preStopHopGeometry); reverseSearchPatternHop.setGeometry(preStopHopGeometry);
}else{ }else{
//haven't seen this patternHop, create a flex one //haven't seen this patternHop, create a flex one
LineString preStopHopGeometry = getShortenedPatternHopGeometryForFlagStop(originalPatternHop.getGeometry().getCoordinates(), v.getCoordinate(), fromTarget); LineString preStopHopGeometry = getShortenedPatternHopGeometryForFlagStop(originalPatternHop.getGeometry().getCoordinates(), v.getCoordinate(), fromTarget);
Expand All @@ -435,14 +435,14 @@ private TObjectDoubleMap<Vertex> streetSearch (RoutingRequest rr, boolean fromTa
double originalHopGeometryLength = GeometryUtils.getLengthInMeters(originalPatternHop.getGeometry()); double originalHopGeometryLength = GeometryUtils.getLengthInMeters(originalPatternHop.getGeometry());
double shortenedHopGeometryLength = GeometryUtils.getLengthInMeters(preStopHopGeometry); double shortenedHopGeometryLength = GeometryUtils.getLengthInMeters(preStopHopGeometry);
double distanceRatio = shortenedHopGeometryLength/originalHopGeometryLength; double distanceRatio = shortenedHopGeometryLength/originalHopGeometryLength;
TemporaryPatternHop temporaryPatternHop = new TemporaryPatternHop(originalPatternHop, patternArriveVertex, flagStop, distanceRatio); reverseSearchPatternHop = new TemporaryPatternHop(originalPatternHop, patternArriveVertex, flagStop, distanceRatio);
temporaryPatternHop.setGeometry(preStopHopGeometry); reverseSearchPatternHop.setGeometry(preStopHopGeometry);
rr.rctx.temporaryEdges.add(temporaryPatternHop); rr.rctx.temporaryEdges.add(reverseSearchPatternHop);
} }


/** Alighting constructor (PatternStopVertex --> TransitStopArrive) */ /** Alighting constructor (PatternStopVertex --> TransitStopArrive) */
TemporaryTransitBoardAlight transitBoardAlight = TemporaryTransitBoardAlight transitBoardAlight =
new TemporaryTransitBoardAlight(patternArriveVertex, transitStopArrive, originalPatternHop.getStopIndex(), TraverseMode.BUS); new TemporaryTransitBoardAlight(patternArriveVertex, transitStopArrive, originalPatternHop.getStopIndex(), TraverseMode.BUS, reverseSearchPatternHop.distanceRatio);
rr.rctx.temporaryEdges.add(transitBoardAlight); rr.rctx.temporaryEdges.add(transitBoardAlight);




Expand Down Expand Up @@ -483,16 +483,16 @@ private TObjectDoubleMap<Vertex> streetSearch (RoutingRequest rr, boolean fromTa
double originalHopGeometryLength = GeometryUtils.getLengthInMeters(originalPatternHop.getGeometry()); double originalHopGeometryLength = GeometryUtils.getLengthInMeters(originalPatternHop.getGeometry());
double shortenedHopGeometryLength = GeometryUtils.getLengthInMeters(postStopHopGeometry); double shortenedHopGeometryLength = GeometryUtils.getLengthInMeters(postStopHopGeometry);
double distanceRatio = shortenedHopGeometryLength/originalHopGeometryLength; double distanceRatio = shortenedHopGeometryLength/originalHopGeometryLength;
TemporaryPatternHop temporaryPatternHop = new TemporaryPatternHop(originalPatternHop, patternDepartVertex, flagStop, distanceRatio); TemporaryPatternHop forwardSearchPatternHop = new TemporaryPatternHop(originalPatternHop, patternDepartVertex, flagStop, distanceRatio);
temporaryPatternHop.setGeometry(postStopHopGeometry); forwardSearchPatternHop.setGeometry(postStopHopGeometry);


rr.rctx.temporaryEdges.add(temporaryPatternHop); rr.rctx.temporaryEdges.add(forwardSearchPatternHop);






/** TransitBoardAlight: Boarding constructor (TransitStopDepart, PatternStopVertex) */ /** TransitBoardAlight: Boarding constructor (TransitStopDepart, PatternStopVertex) */
TemporaryTransitBoardAlight transitBoardAlight = TemporaryTransitBoardAlight transitBoardAlight =
new TemporaryTransitBoardAlight(transitStopDepart, patternDepartVertex, originalPatternHop.getStopIndex(), TraverseMode.BUS); new TemporaryTransitBoardAlight(transitStopDepart, patternDepartVertex, originalPatternHop.getStopIndex(), TraverseMode.BUS, forwardSearchPatternHop.distanceRatio);
rr.rctx.temporaryEdges.add(transitBoardAlight); rr.rctx.temporaryEdges.add(transitBoardAlight);
} }
} }
Expand Down
@@ -1,8 +1,13 @@
package org.opentripplanner.routing.edgetype.flex; package org.opentripplanner.routing.edgetype.flex;


import org.opentripplanner.routing.core.RoutingRequest;
import org.opentripplanner.routing.core.ServiceDay;
import org.opentripplanner.routing.core.State;
import org.opentripplanner.routing.core.TraverseMode; import org.opentripplanner.routing.core.TraverseMode;
import org.opentripplanner.routing.edgetype.TemporaryEdge; import org.opentripplanner.routing.edgetype.TemporaryEdge;
import org.opentripplanner.routing.edgetype.Timetable;
import org.opentripplanner.routing.edgetype.TransitBoardAlight; import org.opentripplanner.routing.edgetype.TransitBoardAlight;
import org.opentripplanner.routing.trippattern.TripTimes;
import org.opentripplanner.routing.vertextype.PatternStopVertex; import org.opentripplanner.routing.vertextype.PatternStopVertex;
import org.opentripplanner.routing.vertextype.TransitStopArrive; import org.opentripplanner.routing.vertextype.TransitStopArrive;
import org.opentripplanner.routing.vertextype.TransitStopDepart; import org.opentripplanner.routing.vertextype.TransitStopDepart;
Expand All @@ -12,19 +17,42 @@
*/ */
public class TemporaryTransitBoardAlight extends TransitBoardAlight implements TemporaryEdge { public class TemporaryTransitBoardAlight extends TransitBoardAlight implements TemporaryEdge {


double distanceRatio;

public TemporaryTransitBoardAlight(TransitStopDepart fromStopVertex, PatternStopVertex toPatternVertex, public TemporaryTransitBoardAlight(TransitStopDepart fromStopVertex, PatternStopVertex toPatternVertex,
int stopIndex, TraverseMode mode) { int stopIndex, TraverseMode mode, double distanceRatio) {
super(fromStopVertex, toPatternVertex, stopIndex, mode); super(fromStopVertex, toPatternVertex, stopIndex, mode);
this.distanceRatio = distanceRatio;
} }


public TemporaryTransitBoardAlight(PatternStopVertex fromPatternStop, TransitStopArrive toStationVertex, public TemporaryTransitBoardAlight(PatternStopVertex fromPatternStop, TransitStopArrive toStationVertex,
int stopIndex, TraverseMode mode) { int stopIndex, TraverseMode mode, double distanceRatio) {
super(fromPatternStop, toStationVertex, stopIndex, mode); super(fromPatternStop, toStationVertex, stopIndex, mode);
this.distanceRatio = distanceRatio;
} }


@Override @Override
public void dispose() { public void dispose() {
fromv.removeOutgoing(this); fromv.removeOutgoing(this);
tov.removeIncoming(this); tov.removeIncoming(this);
} }


@Override
public TripTimes getNextTrip(State s0, ServiceDay sd) {
RoutingRequest options = s0.getOptions();
Timetable timetable = getPattern().getUpdatedTimetable(options, sd);
TripTimes tripTimes = timetable.getNextTrip(s0, sd, getStopIndex(), boarding, distanceRatio);
return tripTimes;
}

@Override
public int calculateWait(State s0, ServiceDay sd, TripTimes tripTimes) {
int stopIndex = getStopIndex();
int adjustment = (int) (distanceRatio * (tripTimes.getRunningTime(stopIndex)));
// we need to fudge this by two seconds so that we can optimize later on.
return boarding ?
(int)(sd.time(tripTimes.getDepartureTime(stopIndex) + adjustment) - s0.getTimeSeconds()) + 2:
(int)(s0.getTimeSeconds() - sd.time(tripTimes.getArrivalTime(stopIndex) + adjustment));
}
} }

0 comments on commit b69d79c

Please sign in to comment.