From 57126c44be1c424dcdfd28b29b8c9b189faa46b9 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 25 Nov 2021 11:53:01 +0100 Subject: [PATCH] Make sure that the original shape is calculated for flex trips --- .../ext/flex/ScheduledDeviatedTripTest.java | 16 +++++++++++++--- .../geometry/GeometryAndBlockProcessor.java | 4 +++- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/ext-test/java/org/opentripplanner/ext/flex/ScheduledDeviatedTripTest.java b/src/ext-test/java/org/opentripplanner/ext/flex/ScheduledDeviatedTripTest.java index 04384c69b43..f633b4565c3 100644 --- a/src/ext-test/java/org/opentripplanner/ext/flex/ScheduledDeviatedTripTest.java +++ b/src/ext-test/java/org/opentripplanner/ext/flex/ScheduledDeviatedTripTest.java @@ -2,6 +2,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.opentripplanner.PolylineAssert.assertThatPolylinesAreEqual; import java.net.URISyntaxException; import java.time.OffsetDateTime; @@ -12,11 +13,13 @@ import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.locationtech.jts.geom.Coordinate; +import org.opentripplanner.PolylineAssert; import org.opentripplanner.ext.flex.trip.FlexTrip; import org.opentripplanner.ext.flex.trip.ScheduledDeviatedTrip; import org.opentripplanner.model.FeedScopedId; import org.opentripplanner.model.FlexStopLocation; import org.opentripplanner.model.GenericLocation; +import org.opentripplanner.model.StopTime; import org.opentripplanner.model.plan.Itinerary; import org.opentripplanner.routing.algorithm.raptor.router.TransitRouter; import org.opentripplanner.routing.api.request.RoutingRequest; @@ -161,12 +164,19 @@ public void flexTripInTransitMode() { var itin = itineraries.get(0); var leg = itin.legs.get(0); + + assertEquals("cujv", leg.from.stop.getId().getId()); + assertEquals("yz85", leg.to.stop.getId().getId()); + var intermediateStops = leg.intermediateStops; assertEquals(1, intermediateStops.size()); assertEquals("zone_1", intermediateStops.get(0).place.stop.getId().getId()); - assertEquals("cujv", leg.from.stop.getId().getId()); - assertEquals("yz85", leg.to.stop.getId().getId()); + assertThatPolylinesAreEqual( + leg.legGeometry.getPoints(), + "kfsmEjojcOa@eBRKfBfHR|ALjBBhVArMG|OCrEGx@OhAKj@a@tAe@hA]l@MPgAnAgw@nr@cDxCm@t@c@t@c@x@_@~@]pAyAdIoAhG}@lE{AzHWhAtt@t~Aj@tAb@~AXdBHn@FlBC`CKnA_@nC{CjOa@dCOlAEz@E|BRtUCbCQ~CWjD??qBvXBl@kBvWOzAc@dDOx@sHv]aIG?q@@c@ZaB\\mA" + ); + } /** @@ -187,7 +197,7 @@ public void shouldNotInterpolateFlexTimes() { var tripTimes = pattern.getScheduledTimetable().getTripTimes(0); var arrivalTime = tripTimes.getArrivalTime(1); - assertEquals(-999, arrivalTime); + assertEquals(StopTime.MISSING_VALUE, arrivalTime); } private static List getItineraries( diff --git a/src/main/java/org/opentripplanner/graph_builder/module/geometry/GeometryAndBlockProcessor.java b/src/main/java/org/opentripplanner/graph_builder/module/geometry/GeometryAndBlockProcessor.java index 8dd0000c176..dba6286f11f 100644 --- a/src/main/java/org/opentripplanner/graph_builder/module/geometry/GeometryAndBlockProcessor.java +++ b/src/main/java/org/opentripplanner/graph_builder/module/geometry/GeometryAndBlockProcessor.java @@ -17,6 +17,7 @@ import org.opentripplanner.common.geometry.PackedCoordinateSequence; import org.opentripplanner.common.geometry.SphericalDistanceLibrary; import org.opentripplanner.common.model.P2; +import org.opentripplanner.ext.flex.trip.FlexTrip; import org.opentripplanner.graph_builder.DataImportIssueStore; import org.opentripplanner.graph_builder.issues.BogusShapeDistanceTraveled; import org.opentripplanner.graph_builder.issues.BogusShapeGeometry; @@ -351,6 +352,7 @@ private LineString[] getGeometriesByShape( } private List getLinearLocations(List stopTimes, LineString shape) { + var isFlexTrip = FlexTrip.isFlexTrip(stopTimes); // This trip does not have shape_dist in stop_times, but does have an associated shape. ArrayList segments = new ArrayList<>(); for (int i = 0 ; i < shape.getNumPoints() - 1; ++i) { @@ -374,7 +376,7 @@ private List getLinearLocations(List stopTimes, LineSt continue; } double distance = segment.distance(coord); - if (distance < maxStopToShapeSnapDistance) { + if (distance < maxStopToShapeSnapDistance || isFlexTrip) { stopSegments.add(segment); maxSegmentIndex = index; if (minSegmentIndexForThisStop == -1)