@Override public boolean isShortcut() { EdgeIteratorState edge = edges.get(current); return edge instanceof CHEdgeIteratorState && ((CHEdgeIteratorState) edge).isShortcut(); }
@Override public double calcWeight(EdgeIteratorState edgeState, boolean reverse, int prevOrNextEdgeId) { CHEdgeIteratorState tmp = (CHEdgeIteratorState) edgeState; if (tmp.isShortcut()) // if a shortcut is in both directions the weight is identical => no need for 'reverse' return tmp.getWeight(); return userWeighting.calcWeight(edgeState, reverse, prevOrNextEdgeId); }
@Override public boolean accept(EdgeIteratorState edgeIterState) { int base = edgeIterState.getBaseNode(); int adj = edgeIterState.getAdjNode(); // always accept virtual edges, see #288 if (base >= maxNodes || adj >= maxNodes) return true; // minor performance improvement: shortcuts in wrong direction are disconnected, so no need to exclude them if (((CHEdgeIteratorState) edgeIterState).isShortcut()) return true; return graph.getLevel(base) <= graph.getLevel(adj); } }
private void expandEdge(CHEdgeIteratorState edge, boolean reverse) { if (!edge.isShortcut()) { distance += edge.getDistance(); time += weighting.calcMillis(edge, reverse, EdgeIterator.NO_EDGE); addEdge(edge.getEdge()); return; } expandSkippedEdges(edge.getSkippedEdge1(), edge.getSkippedEdge2(), edge.getBaseNode(), edge.getAdjNode(), reverse); }
graph = createGHStorage(); CHGraphImpl g = (CHGraphImpl) getGraph(graph); assertFalse(g.edge(0, 1).isShortcut()); assertFalse(g.edge(1, 2).isShortcut()); assertTrue(sc1.isShortcut()); sc1.setWeight(2.001); assertEquals(2.001, sc1.getWeight(), 1e-3);
@Test public void testGetWeightIfAdvancedEncoder() { FlagEncoder customEncoder = new Bike2WeightFlagEncoder(); EncodingManager em = new EncodingManager(customEncoder); FastestWeighting weighting = new FastestWeighting(customEncoder); GraphHopperStorage ghStorage = new GraphBuilder(em).setCHGraph(weighting).create(); ghStorage.edge(0, 2); ghStorage.freeze(); CHGraphImpl lg = (CHGraphImpl) ghStorage.getGraph(CHGraph.class, weighting); CHEdgeIteratorState sc1 = lg.shortcut(0, 1); long flags = customEncoder.setProperties(10, false, true); sc1.setFlags(flags); sc1.setWeight(100.123); assertEquals(100.123, lg.getEdgeIteratorState(sc1.getEdge(), sc1.getAdjNode()).getWeight(), 1e-3); assertEquals(100.123, lg.getEdgeIteratorState(sc1.getEdge(), sc1.getBaseNode()).getWeight(), 1e-3); assertEquals(100.123, ((CHEdgeIteratorState) GHUtility.getEdge(lg, sc1.getBaseNode(), sc1.getAdjNode())).getWeight(), 1e-3); assertEquals(100.123, ((CHEdgeIteratorState) GHUtility.getEdge(lg, sc1.getAdjNode(), sc1.getBaseNode())).getWeight(), 1e-3); sc1 = lg.shortcut(1, 0); assertTrue(sc1.isShortcut()); sc1.setFlags(PrepareEncoder.getScDirMask()); sc1.setWeight(1.011011); assertEquals(1.011011, sc1.getWeight(), 1e-3); }
@Override public boolean isShortcut() { EdgeIteratorState edge = edges.get(current); return edge instanceof CHEdgeIteratorState && ((CHEdgeIteratorState) edge).isShortcut(); }
@Override public boolean isShortcut() { EdgeIteratorState edge = edges.get(current); return edge instanceof CHEdgeIteratorState && ((CHEdgeIteratorState) edge).isShortcut(); }
@Override public boolean isShortcut() { EdgeIteratorState edge = edges.get(current); return edge instanceof CHEdgeIteratorState && ((CHEdgeIteratorState) edge).isShortcut(); }
@Override public double calcWeight(EdgeIteratorState edgeState, boolean reverse, int prevOrNextEdgeId) { CHEdgeIteratorState tmp = (CHEdgeIteratorState) edgeState; if (tmp.isShortcut()) // if a shortcut is in both directions the weight is identical => no need for 'reverse' return tmp.getWeight(); return userWeighting.calcWeight(edgeState, reverse, prevOrNextEdgeId); }
@Override public double calcWeight( EdgeIteratorState edgeState, boolean reverse, int prevOrNextEdgeId ) { CHEdgeIteratorState tmp = (CHEdgeIteratorState) edgeState; if (tmp.isShortcut()) // if a shortcut is in both directions the weight is identical => no need for 'reverse' return tmp.getWeight(); return userWeighting.calcWeight(edgeState, reverse, prevOrNextEdgeId); }
@Override public double calcWeight(EdgeIteratorState edgeState, boolean reverse, int prevOrNextEdgeId) { CHEdgeIteratorState tmp = (CHEdgeIteratorState) edgeState; if (tmp.isShortcut()) // if a shortcut is in both directions the weight is identical => no need for 'reverse' return tmp.getWeight(); return userWeighting.calcWeight(edgeState, reverse, prevOrNextEdgeId); }
@Override public boolean accept(EdgeIteratorState edgeIterState) { int base = edgeIterState.getBaseNode(); int adj = edgeIterState.getAdjNode(); // always accept virtual edges, see #288 if (base >= maxNodes || adj >= maxNodes) return true; // minor performance improvement: shortcuts in wrong direction are disconnected, so no need to exclude them if (((CHEdgeIteratorState) edgeIterState).isShortcut()) return true; return graph.getLevel(base) <= graph.getLevel(adj); } }
@Override public boolean accept(EdgeIteratorState edgeIterState) { int base = edgeIterState.getBaseNode(); int adj = edgeIterState.getAdjNode(); // always accept virtual edges, see #288 if (base >= maxNodes || adj >= maxNodes) return true; // minor performance improvement: shortcuts in wrong direction are disconnected, so no need to exclude them if (((CHEdgeIteratorState) edgeIterState).isShortcut()) return true; return graph.getLevel(base) <= graph.getLevel(adj); } }
@Override public boolean accept( EdgeIteratorState edgeIterState ) { int base = edgeIterState.getBaseNode(); int adj = edgeIterState.getAdjNode(); // always accept virtual edges, see #288 if (base >= maxNodes || adj >= maxNodes) return true; // minor performance improvement: shortcuts in wrong direction are disconnected, so no need to exclude them if (((CHEdgeIteratorState) edgeIterState).isShortcut()) return true; return graph.getLevel(base) <= graph.getLevel(adj); } }
private void expandEdge(CHEdgeIteratorState edge, boolean reverse) { if (!edge.isShortcut()) { distance += edge.getDistance(); time += weighting.calcMillis(edge, reverse, EdgeIterator.NO_EDGE); addEdge(edge.getEdge()); return; } expandSkippedEdges(edge.getSkippedEdge1(), edge.getSkippedEdge2(), edge.getBaseNode(), edge.getAdjNode(), reverse); }
private void expandEdge(CHEdgeIteratorState mainEdgeState, boolean reverse) { if (!mainEdgeState.isShortcut()) { distance += mainEdgeState.getDistance(); time += weighting.calcMillis(mainEdgeState, reverse, EdgeIterator.NO_EDGE);
private void expandEdge( CHEdgeIteratorState mainEdgeState, boolean reverse ) if (!mainEdgeState.isShortcut())