@Override public double getWeight() { // will be called only from PreparationWeighting and if isShortcut is true return ((CHEdgeIteratorState) edges.get(current)).getWeight(); }
@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); }
assertTrue(sc1.isShortcut()); sc1.setWeight(2.001); assertEquals(2.001, sc1.getWeight(), 1e-3); sc1.setWeight(100.123); assertEquals(100.123, sc1.getWeight(), 1e-3); sc1.setWeight(Double.MAX_VALUE); assertTrue(Double.isInfinite(sc1.getWeight())); assertEquals(100.123, sc1.getWeight(), 1e-3); assertTrue(sc1.isForward(carEncoder)); assertTrue(sc1.isBackward(carEncoder)); sc1.setFlags(flags); sc1.setWeight(100.123); assertEquals(100.123, sc1.getWeight(), 1e-3); assertFalse(sc1.isForward(carEncoder)); assertTrue(sc1.isBackward(carEncoder)); assertEquals(1e-3, sc1.getWeight(), 1e-10);
@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); }
tmpEdgeId = sc0_2.getEdge(); CHEdgeIteratorState sc0_3 = g.shortcut(0, 3); sc0_3.setWeight(sc0_2.getWeight() + w.calcWeight(edgeState23, false, x)).setDistance(3 * dist).setFlags(oneDirFlags); sc0_3.setSkippedEdges(tmpEdgeId, edgeState23.getEdge()); tmpEdgeId = sc0_3.getEdge(); CHEdgeIteratorState sc0_4 = g.shortcut(0, 4); sc0_4.setWeight(sc0_3.getWeight() + w.calcWeight(edgeState34, false, x)).setDistance(4).setFlags(oneDirFlags); sc0_4.setSkippedEdges(tmpEdgeId, edgeState34.getEdge()); tmpEdgeId = sc0_4.getEdge(); CHEdgeIteratorState sc0_5 = g.shortcut(0, 5); sc0_5.setWeight(sc0_4.getWeight() + w.calcWeight(edgeState45, false, x)).setDistance(5).setFlags(oneDirFlags); sc0_5.setSkippedEdges(tmpEdgeId, edgeState45.getEdge()); tmpEdgeId = sc0_5.getEdge(); CHEdgeIteratorState sc0_6 = g.shortcut(0, 6); sc0_6.setWeight(sc0_5.getWeight() + w.calcWeight(edgeState56, false, x)).setDistance(6).setFlags(oneDirFlags); sc0_6.setSkippedEdges(tmpEdgeId, edgeState56.getEdge()); g.setLevel(0, 10);
@Override public double getWeight() { // will be called only from PreparationWeighting and if isShortcut is true return ((CHEdgeIteratorState) edges.get(current)).getWeight(); }
@Override public double getWeight() { // will be called only from PreparationWeighting and if isShortcut is true return ((CHEdgeIteratorState) edges.get(current)).getWeight(); }
@Override public double getWeight() { // will be called only from PreparationWeighting and if isShortcut is true return ((CHEdgeIteratorState) edges.get(current)).getWeight(); }
@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); }