package org.opentripplanner.routing.edgetype; import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.GeometryFactory; import com.vividsolutions.jts.geom.LineString; import org.opentripplanner.common.geometry.GeometryUtils; import org.opentripplanner.routing.core.RoutingRequest; import org.opentripplanner.routing.core.State; import org.opentripplanner.routing.core.StateEditor; import org.opentripplanner.routing.core.TraverseMode; import org.opentripplanner.routing.graph.Edge; import org.opentripplanner.routing.vertextype.OsmVertex; import org.opentripplanner.routing.vertextype.TransitStop; import java.util.Locale; /** * This links transit stops to OSM vertices (rather than splitter vertices). It apears to only be * used in org.opentripplanner.graph_builder.linking.SampleStopLinker which is itself unused at this point. */ public class IntersectionTransitLink extends Edge { private static final long serialVersionUID = 1L; private int length_mm; public IntersectionTransitLink(TransitStop tstop, OsmVertex intersection, int lengthMeters) { super(tstop, intersection); length_mm = lengthMeters * 1000; } public IntersectionTransitLink(OsmVertex intersection, TransitStop tstop, int lengthMeters) { super(intersection, tstop); length_mm = lengthMeters * 1000; } @Override public State traverse(State s0) { RoutingRequest options = s0.getOptions(); StateEditor s1 = s0.edit(this); boolean cycling = options.modes.contains(TraverseMode.BICYCLE) && !options.walkingBike; double speed = cycling ? options.bikeSpeed : options.walkSpeed; // speed in m/s, length in mm, so we get milliseconds s1.incrementTimeInMilliseconds((long) (length_mm / speed)); if (!cycling) s1.incrementWalkDistance(length_mm / 1000d); return s1.makeState(); } @Override public String getName() { return "Intersection transit link: " + fromv.getName() + " -> " + tov.getName(); } @Override public LineString getGeometry () { GeometryFactory gf = GeometryUtils.getGeometryFactory(); // TODO hack so these appear in paths and the visualizer. return gf.createLineString(new Coordinate[] { fromv.getCoordinate(), tov.getCoordinate()}); } @Override public String getName(Locale locale) { return this.getName(); } }