From 0dee7ab1e491ad35b47e0a8bb79d3028a28c909e Mon Sep 17 00:00:00 2001 From: Michael Zilske Date: Sun, 6 Oct 2019 14:52:24 -0700 Subject: [PATCH] Stop using FlagEncoder for Pt --- .../java/com/graphhopper/util/Parameters.java | 10 -- .../dropwizard/RealtimeFeedLoadingCache.java | 9 +- .../reader/gtfs/GraphExplorer.java | 12 ++- .../reader/gtfs/GraphHopperGtfs.java | 60 +++++------ .../graphhopper/reader/gtfs/GtfsReader.java | 41 +++---- .../com/graphhopper/reader/gtfs/Label.java | 4 +- .../gtfs/MultiCriteriaLabelSetting.java | 4 +- .../reader/gtfs/PtEncodedValues.java | 73 +++++++++++++ .../reader/gtfs/PtFlagEncoder.java | 100 ------------------ .../graphhopper/reader/gtfs/RealtimeFeed.java | 5 +- .../reader/gtfs/TripFromLabel.java | 2 +- .../java/com/graphhopper/AnotherAgencyIT.java | 12 ++- .../com/graphhopper/GraphHopperGtfsIT.java | 13 +-- .../graphhopper/GraphHopperMultimodalIT.java | 10 +- .../com/graphhopper/PtRouteResourceIT.java | 18 ++-- .../test/java/com/graphhopper/RealtimeIT.java | 12 +-- .../reader/gtfs/GraphExplorerTest.java | 6 +- .../reader/gtfs/WrapperGraphTest.java | 7 +- .../graphhopper/http/GraphHopperBundle.java | 8 +- .../resources/PtIsochroneResource.java | 13 ++- .../graphhopper/http/cli/ImportCommand.java | 7 +- .../isochrone/PtIsochroneResourceTest.java | 10 +- .../graphhopper/http/resources/GtfsTest.java | 74 +++++++++++++ 23 files changed, 260 insertions(+), 250 deletions(-) create mode 100644 reader-gtfs/src/main/java/com/graphhopper/reader/gtfs/PtEncodedValues.java delete mode 100644 reader-gtfs/src/main/java/com/graphhopper/reader/gtfs/PtFlagEncoder.java create mode 100644 web/src/test/java/com/graphhopper/http/resources/GtfsTest.java diff --git a/api/src/main/java/com/graphhopper/util/Parameters.java b/api/src/main/java/com/graphhopper/util/Parameters.java index b8b92d0c810..ae7aec96208 100644 --- a/api/src/main/java/com/graphhopper/util/Parameters.java +++ b/api/src/main/java/com/graphhopper/util/Parameters.java @@ -214,14 +214,4 @@ public static final class Details { public static final String DISTANCE = "distance"; } - public static final class PT { - public static final String EARLIEST_DEPARTURE_TIME = "pt.earliest_departure_time"; - public static final String PROFILE_QUERY = "pt.profile"; - public static final String ARRIVE_BY = "pt.arrive_by"; - public static final String IGNORE_TRANSFERS = "pt.ignore_transfers"; - public static final String WALK_SPEED = "pt.walk_speed"; - public static final String MAX_WALK_DISTANCE_PER_LEG = "pt.max_walk_distance_per_leg"; - public static final String LIMIT_SOLUTIONS = "pt.limit_solutions"; - public static final String BLOCKED_ROUTE_TYPES = "pt.blocked_route_types"; - } } diff --git a/reader-gtfs/src/main/java/com/graphhopper/gtfs/dropwizard/RealtimeFeedLoadingCache.java b/reader-gtfs/src/main/java/com/graphhopper/gtfs/dropwizard/RealtimeFeedLoadingCache.java index b1c0634243d..0bf961b704b 100644 --- a/reader-gtfs/src/main/java/com/graphhopper/gtfs/dropwizard/RealtimeFeedLoadingCache.java +++ b/reader-gtfs/src/main/java/com/graphhopper/gtfs/dropwizard/RealtimeFeedLoadingCache.java @@ -25,7 +25,7 @@ import com.google.common.util.concurrent.ListenableFutureTask; import com.google.transit.realtime.GtfsRealtime; import com.graphhopper.reader.gtfs.GtfsStorage; -import com.graphhopper.reader.gtfs.PtFlagEncoder; +import com.graphhopper.reader.gtfs.PtEncodedValues; import com.graphhopper.reader.gtfs.RealtimeFeed; import com.graphhopper.storage.GraphHopperStorage; import org.apache.http.client.HttpClient; @@ -33,7 +33,6 @@ import org.glassfish.hk2.api.Factory; import javax.inject.Inject; -import javax.inject.Singleton; import java.io.IOException; import java.net.URISyntaxException; import java.util.HashMap; @@ -48,16 +47,14 @@ public class RealtimeFeedLoadingCache implements Factory { private final HttpClient httpClient; private final GraphHopperStorage graphHopperStorage; private final GtfsStorage gtfsStorage; - private final PtFlagEncoder ptFlagEncoder; private final RealtimeBundleConfiguration bundleConfiguration; private final ExecutorService executor = Executors.newSingleThreadExecutor(); private final LoadingCache cache; @Inject - RealtimeFeedLoadingCache(GraphHopperStorage graphHopperStorage, GtfsStorage gtfsStorage, PtFlagEncoder ptFlagEncoder, HttpClient httpClient, RealtimeBundleConfiguration bundleConfiguration) { + RealtimeFeedLoadingCache(GraphHopperStorage graphHopperStorage, GtfsStorage gtfsStorage, HttpClient httpClient, RealtimeBundleConfiguration bundleConfiguration) { this.graphHopperStorage = graphHopperStorage; this.gtfsStorage = gtfsStorage; - this.ptFlagEncoder = ptFlagEncoder; this.bundleConfiguration = bundleConfiguration; this.httpClient = httpClient; this.cache = CacheBuilder.newBuilder() @@ -102,7 +99,7 @@ private RealtimeFeed fetchFeedsAndCreateGraph() { throw new RuntimeException(e); } } - return RealtimeFeed.fromProtobuf(graphHopperStorage, gtfsStorage, ptFlagEncoder, feedMessageMap); + return RealtimeFeed.fromProtobuf(graphHopperStorage, gtfsStorage, PtEncodedValues.fromEncodingManager(graphHopperStorage.getEncodingManager()), feedMessageMap); } } diff --git a/reader-gtfs/src/main/java/com/graphhopper/reader/gtfs/GraphExplorer.java b/reader-gtfs/src/main/java/com/graphhopper/reader/gtfs/GraphExplorer.java index 978b5770d4c..71aa09970b6 100644 --- a/reader-gtfs/src/main/java/com/graphhopper/reader/gtfs/GraphExplorer.java +++ b/reader-gtfs/src/main/java/com/graphhopper/reader/gtfs/GraphExplorer.java @@ -29,7 +29,9 @@ import java.time.Instant; import java.time.ZoneId; import java.time.temporal.ChronoUnit; -import java.util.*; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.Spliterators; import java.util.function.Consumer; import java.util.function.Predicate; import java.util.stream.Stream; @@ -38,7 +40,7 @@ public final class GraphExplorer { private final EdgeExplorer edgeExplorer; - private final PtFlagEncoder flagEncoder; + private final PtEncodedValues flagEncoder; private final GtfsStorage gtfsStorage; private final RealtimeFeed realtimeFeed; private final boolean reverse; @@ -47,12 +49,12 @@ public final class GraphExplorer { private double walkSpeedKmH; - public GraphExplorer(Graph graph, Weighting accessEgressWeighting, PtFlagEncoder flagEncoder, GtfsStorage gtfsStorage, RealtimeFeed realtimeFeed, boolean reverse, boolean walkOnly, double walkSpeedKmh) { + public GraphExplorer(Graph graph, Weighting accessEgressWeighting, PtEncodedValues flagEncoder, GtfsStorage gtfsStorage, RealtimeFeed realtimeFeed, boolean reverse, boolean walkOnly, double walkSpeedKmh) { this.accessEgressWeighting = accessEgressWeighting; DefaultEdgeFilter accessEgressIn = DefaultEdgeFilter.inEdges(accessEgressWeighting.getFlagEncoder()); DefaultEdgeFilter accessEgressOut = DefaultEdgeFilter.outEdges(accessEgressWeighting.getFlagEncoder()); - DefaultEdgeFilter ptIn = DefaultEdgeFilter.inEdges(flagEncoder); - DefaultEdgeFilter ptOut = DefaultEdgeFilter.outEdges(flagEncoder); + DefaultEdgeFilter ptIn = DefaultEdgeFilter.inEdges(flagEncoder.getAccessEnc()); + DefaultEdgeFilter ptOut = DefaultEdgeFilter.outEdges(flagEncoder.getAccessEnc()); EdgeFilter in = edgeState -> accessEgressIn.accept(edgeState) || ptIn.accept(edgeState); EdgeFilter out = edgeState -> accessEgressOut.accept(edgeState) || ptOut.accept(edgeState); this.edgeExplorer = graph.createEdgeExplorer(reverse ? in : out); diff --git a/reader-gtfs/src/main/java/com/graphhopper/reader/gtfs/GraphHopperGtfs.java b/reader-gtfs/src/main/java/com/graphhopper/reader/gtfs/GraphHopperGtfs.java index 71a2d22ad9c..b0fe7a9e9db 100644 --- a/reader-gtfs/src/main/java/com/graphhopper/reader/gtfs/GraphHopperGtfs.java +++ b/reader-gtfs/src/main/java/com/graphhopper/reader/gtfs/GraphHopperGtfs.java @@ -60,13 +60,13 @@ public final class GraphHopperGtfs { public static class Factory { private final TranslationMap translationMap; - private final PtFlagEncoder flagEncoder; + private final PtEncodedValues ptEncodedValues; private final GraphHopperStorage graphHopperStorage; private final LocationIndex locationIndex; private final GtfsStorage gtfsStorage; - private Factory(PtFlagEncoder flagEncoder, TranslationMap translationMap, GraphHopperStorage graphHopperStorage, LocationIndex locationIndex, GtfsStorage gtfsStorage) { - this.flagEncoder = flagEncoder; + private Factory(TranslationMap translationMap, GraphHopperStorage graphHopperStorage, LocationIndex locationIndex, GtfsStorage gtfsStorage) { + this.ptEncodedValues = PtEncodedValues.fromEncodingManager(graphHopperStorage.getEncodingManager()); this.translationMap = translationMap; this.graphHopperStorage = graphHopperStorage; this.locationIndex = locationIndex; @@ -76,20 +76,20 @@ private Factory(PtFlagEncoder flagEncoder, TranslationMap translationMap, GraphH public GraphHopperGtfs createWith(GtfsRealtime.FeedMessage realtimeFeed) { Map realtimeFeeds = new HashMap<>(); realtimeFeeds.put("gtfs_0", realtimeFeed); - return new GraphHopperGtfs(flagEncoder, translationMap, graphHopperStorage, locationIndex, gtfsStorage, RealtimeFeed.fromProtobuf(graphHopperStorage, gtfsStorage, flagEncoder, realtimeFeeds)); + return new GraphHopperGtfs(translationMap, graphHopperStorage, locationIndex, gtfsStorage, RealtimeFeed.fromProtobuf(graphHopperStorage, gtfsStorage, ptEncodedValues, realtimeFeeds)); } public GraphHopperGtfs createWithoutRealtimeFeed() { - return new GraphHopperGtfs(flagEncoder, translationMap, graphHopperStorage, locationIndex, gtfsStorage, RealtimeFeed.empty(gtfsStorage)); + return new GraphHopperGtfs(translationMap, graphHopperStorage, locationIndex, gtfsStorage, RealtimeFeed.empty(gtfsStorage)); } } - public static Factory createFactory(PtFlagEncoder flagEncoder, TranslationMap translationMap, GraphHopperStorage graphHopperStorage, LocationIndex locationIndex, GtfsStorage gtfsStorage) { - return new Factory(flagEncoder, translationMap, graphHopperStorage, locationIndex, gtfsStorage); + public static Factory createFactory(TranslationMap translationMap, GraphHopperStorage graphHopperStorage, LocationIndex locationIndex, GtfsStorage gtfsStorage) { + return new Factory(translationMap, graphHopperStorage, locationIndex, gtfsStorage); } private final TranslationMap translationMap; - private final PtFlagEncoder flagEncoder; + private final PtEncodedValues ptEncodedValues; private final Weighting accessEgressWeighting; private final GraphHopperStorage graphHopperStorage; private final LocationIndex locationIndex; @@ -193,8 +193,8 @@ private QueryResult findClosest(GHPoint point, int indexForErrorMessage) { if (!source.isValid()) { throw new PointNotFoundException("Cannot find point: " + point, indexForErrorMessage); } - if (source.getClosestEdge().get(flagEncoder.getTypeEnc()) != GtfsStorage.EdgeType.HIGHWAY) { - throw new RuntimeException(source.getClosestEdge().get(flagEncoder.getTypeEnc()).name()); + if (source.getClosestEdge().get(ptEncodedValues.getTypeEnc()) != GtfsStorage.EdgeType.HIGHWAY) { + throw new RuntimeException(source.getClosestEdge().get(ptEncodedValues.getTypeEnc()).name()); } return source; } @@ -214,10 +214,10 @@ private void parseSolutionsAndAddToResponse(List> solutio private List> findPaths(int startNode, int destNode) { StopWatch stopWatch = new StopWatch().start(); - final GraphExplorer accessEgressGraphExplorer = new GraphExplorer(queryGraph, accessEgressWeighting, flagEncoder, gtfsStorage, realtimeFeed, !arriveBy, true, walkSpeedKmH); + final GraphExplorer accessEgressGraphExplorer = new GraphExplorer(queryGraph, accessEgressWeighting, ptEncodedValues, gtfsStorage, realtimeFeed, !arriveBy, true, walkSpeedKmH); boolean reverse = !arriveBy; GtfsStorage.EdgeType edgeType = reverse ? GtfsStorage.EdgeType.EXIT_PT : GtfsStorage.EdgeType.ENTER_PT; - MultiCriteriaLabelSetting stationRouter = new MultiCriteriaLabelSetting(accessEgressGraphExplorer, flagEncoder, reverse, maxWalkDistancePerLeg, false, false, false, maxVisitedNodesForRequest, new ArrayList<>()); + MultiCriteriaLabelSetting stationRouter = new MultiCriteriaLabelSetting(accessEgressGraphExplorer, ptEncodedValues, reverse, maxWalkDistancePerLeg, false, false, false, maxVisitedNodesForRequest, new ArrayList<>()); stationRouter.setBetaWalkTime(betaWalkTime); Iterator