public Collection<TurnCostTableEntry> analyzeTurnRelation(FlagEncoder encoder, OSMTurnRelation turnRelation) { if (!encoder.supports(TurnWeighting.class)) return Collections.emptyList(); EdgeExplorer edgeOutExplorer = outExplorerMap.get(encoder); EdgeExplorer edgeInExplorer = inExplorerMap.get(encoder); if (edgeOutExplorer == null || edgeInExplorer == null) { edgeOutExplorer = graph.createEdgeExplorer(DefaultEdgeFilter.outEdges(encoder)); outExplorerMap.put(encoder, edgeOutExplorer); edgeInExplorer = graph.createEdgeExplorer(DefaultEdgeFilter.inEdges(encoder)); inExplorerMap.put(encoder, edgeInExplorer); } return turnRelation.getRestrictionAsEntries(encoder, edgeOutExplorer, edgeInExplorer, this); }
@Override public void initFromGraph() { inEdgeExplorer = prepareGraph.createEdgeExplorer(DefaultEdgeFilter.inEdges(encoder)); outEdgeExplorer = prepareGraph.createEdgeExplorer(DefaultEdgeFilter.outEdges(encoder)); maxLevel = prepareGraph.getNodes(); maxEdgesCount = prepareGraph.getOriginalEdges(); }
/** * @param graph specifies the graph where this algorithm will run on * @param weighting set the used weight calculation (e.g. fastest, shortest). * @param traversalMode how the graph is traversed e.g. if via nodes or edges. */ public AbstractRoutingAlgorithm(Graph graph, Weighting weighting, TraversalMode traversalMode) { this.weighting = weighting; this.flagEncoder = weighting.getFlagEncoder(); this.traversalMode = traversalMode; this.graph = graph; this.nodeAccess = graph.getNodeAccess(); outEdgeExplorer = graph.createEdgeExplorer(DefaultEdgeFilter.outEdges(flagEncoder)); inEdgeExplorer = graph.createEdgeExplorer(DefaultEdgeFilter.inEdges(flagEncoder)); }
private int findPlatformNode(int stationNode, GtfsStorageI.PlatformDescriptor platformDescriptor, GtfsStorage.EdgeType edgeType) { DefaultEdgeFilter filter; if (edgeType == GtfsStorage.EdgeType.ENTER_PT) { filter = DefaultEdgeFilter.outEdges(encoder); } else if (edgeType == GtfsStorage.EdgeType.EXIT_PT) { filter = DefaultEdgeFilter.inEdges(encoder); } else { throw new RuntimeException(); } EdgeIterator i = graph.getBaseGraph().createEdgeExplorer(filter).setBaseNode(stationNode); while (i.next()) { if (encoder.getEdgeType(i.getFlags()) == edgeType) { if (platformDescriptor.equals(gtfsStorage.getRoutes().get(i.getEdge()))) { return i.getAdjNode(); } } } return -1; }
public GraphExplorer(Graph graph, Weighting accessEgressWeighting, PtFlagEncoder flagEncoder, GtfsStorage gtfsStorage, RealtimeFeed realtimeFeed, boolean reverse, List<VirtualEdgeIteratorState> extraEdges, boolean walkOnly, double walkSpeedKmh) { this.graph = graph; 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); 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); this.flagEncoder = flagEncoder; this.gtfsStorage = gtfsStorage; this.realtimeFeed = realtimeFeed; this.reverse = reverse; this.extraEdges.addAll(extraEdges); for (VirtualEdgeIteratorState extraEdge : extraEdges) { if (extraEdge == null) { throw new RuntimeException(); } extraEdgesBySource.put(extraEdge.getBaseNode(), extraEdge); extraEdgesByDestination.put(extraEdge.getAdjNode(), new VirtualEdgeIteratorState(extraEdge.getOriginalTraversalKey(), extraEdge.getEdge(), extraEdge.getAdjNode(), extraEdge.getBaseNode(), extraEdge.getDistance(), extraEdge.getFlags(), extraEdge.getName(), extraEdge.fetchWayGeometry(3))); } this.walkOnly = walkOnly; this.walkSpeedKmH = walkSpeedKmh; }
@Test public void testIteration_Issue163() { EdgeFilter outEdgeFilter = DefaultEdgeFilter.outEdges(encodingManager.getEncoder("car")); EdgeFilter inEdgeFilter = DefaultEdgeFilter.inEdges(encodingManager.getEncoder("car")); EdgeExplorer inExplorer = g.createEdgeExplorer(inEdgeFilter); EdgeExplorer outExplorer = g.createEdgeExplorer(outEdgeFilter);
@Test public void testExtract2() { Graph g = createGraph(); g.edge(1, 2, 10, false); g.edge(2, 3, 20, false); EdgeExplorer explorer = g.createEdgeExplorer(carOutEdges); EdgeIterator iter = explorer.setBaseNode(1); iter.next(); PathBidirRef pw = new PathBidirRef(g, new FastestWeighting(carEncoder)); pw.sptEntry = new SPTEntry(iter.getEdge(), 2, 10); pw.sptEntry.parent = new SPTEntry(EdgeIterator.NO_EDGE, 1, 0); explorer = g.createEdgeExplorer(DefaultEdgeFilter.inEdges(carEncoder)); iter = explorer.setBaseNode(3); iter.next(); pw.edgeTo = new SPTEntry(iter.getEdge(), 2, 20); pw.edgeTo.parent = new SPTEntry(EdgeIterator.NO_EDGE, 3, 0); Path p = pw.extract(); assertEquals(IntArrayList.from(new int[]{1, 2, 3}), p.calcNodes()); assertEquals(30, p.getDistance(), 1e-4); } }
/** * @param graph specifies the graph where this algorithm will run on * @param weighting set the used weight calculation (e.g. fastest, shortest). * @param traversalMode how the graph is traversed e.g. if via nodes or edges. */ public AbstractRoutingAlgorithm(Graph graph, Weighting weighting, TraversalMode traversalMode) { this.weighting = weighting; this.flagEncoder = weighting.getFlagEncoder(); this.traversalMode = traversalMode; this.graph = graph; this.nodeAccess = graph.getNodeAccess(); outEdgeExplorer = graph.createEdgeExplorer(DefaultEdgeFilter.outEdges(flagEncoder)); inEdgeExplorer = graph.createEdgeExplorer(DefaultEdgeFilter.inEdges(flagEncoder)); }
@Override public void initFromGraph() { inEdgeExplorer = prepareGraph.createEdgeExplorer(DefaultEdgeFilter.inEdges(encoder)); outEdgeExplorer = prepareGraph.createEdgeExplorer(DefaultEdgeFilter.outEdges(encoder)); maxLevel = prepareGraph.getNodes(); maxEdgesCount = ghStorage.getAllEdges().length(); }