protected void initFootVsCar(Graph graph) { graph.edge(0, 1).setDistance(7000).setFlags(footEncoder.setProperties(5, true, true) | carEncoder.setProperties(10, true, false)); graph.edge(0, 4).setDistance(5000).setFlags(footEncoder.setProperties(5, true, true) | carEncoder.setProperties(20, true, false)); graph.edge(1, 4).setDistance(7000).setFlags(carEncoder.setProperties(10, true, true)); graph.edge(1, 5).setDistance(7000).setFlags(carEncoder.setProperties(10, true, true)); graph.edge(1, 2).setDistance(20000).setFlags(footEncoder.setProperties(5, true, true) | carEncoder.setProperties(10, true, true)); graph.edge(5, 2).setDistance(5000).setFlags(carEncoder.setProperties(10, true, false)); graph.edge(2, 3).setDistance(5000).setFlags(footEncoder.setProperties(5, true, true) | carEncoder.setProperties(10, true, false)); graph.edge(5, 3).setDistance(11000).setFlags(carEncoder.setProperties(20, true, false)); graph.edge(3, 7).setDistance(7000).setFlags(footEncoder.setProperties(5, true, true) | carEncoder.setProperties(10, true, false)); graph.edge(4, 6).setDistance(5000).setFlags(carEncoder.setProperties(20, true, false)); graph.edge(5, 4).setDistance(7000).setFlags(footEncoder.setProperties(5, true, true) | carEncoder.setProperties(10, true, false)); graph.edge(5, 6).setDistance(7000).setFlags(carEncoder.setProperties(10, true, false)); graph.edge(7, 5).setDistance(5000).setFlags(footEncoder.setProperties(5, true, true) | carEncoder.setProperties(20, true, false)); graph.edge(6, 7).setDistance(5000).setFlags(carEncoder.setProperties(20, true, true)); }
@Test public void testSpeed0() { Weighting instance = new FastestWeighting(encoder); assertEquals(1.0 / 0, instance.calcWeight(createMockedEdgeIteratorState(10, encoder.setProperties(0, true, true)), false, EdgeIterator.NO_EDGE), 1e-8); // 0 / 0 returns NaN but calcWeight should not return NaN! assertEquals(1.0 / 0, instance.calcWeight(createMockedEdgeIteratorState(0, encoder.setProperties(0, true, true)), false, EdgeIterator.NO_EDGE), 1e-8); }
protected void initDirectedAndDiffSpeed(Graph graph, FlagEncoder enc) { graph.edge(0, 1).setFlags(enc.setProperties(10, true, false)); graph.edge(0, 4).setFlags(enc.setProperties(100, true, false)); graph.edge(1, 4).setFlags(enc.setProperties(10, true, true)); graph.edge(1, 5).setFlags(enc.setProperties(10, true, true)); EdgeIteratorState edge12 = graph.edge(1, 2).setFlags(enc.setProperties(10, true, true)); graph.edge(5, 2).setFlags(enc.setProperties(10, true, false)); graph.edge(2, 3).setFlags(enc.setProperties(10, true, false)); EdgeIteratorState edge53 = graph.edge(5, 3).setFlags(enc.setProperties(20, true, false)); graph.edge(3, 7).setFlags(enc.setProperties(10, true, false)); graph.edge(4, 6).setFlags(enc.setProperties(100, true, false)); graph.edge(5, 4).setFlags(enc.setProperties(10, true, false)); graph.edge(5, 6).setFlags(enc.setProperties(10, true, false)); graph.edge(7, 5).setFlags(enc.setProperties(100, true, false)); graph.edge(6, 7).setFlags(enc.setProperties(100, true, true)); updateDistancesFor(graph, 0, 0.002, 0); updateDistancesFor(graph, 1, 0.002, 0.001); updateDistancesFor(graph, 2, 0.002, 0.002); updateDistancesFor(graph, 3, 0.002, 0.003); updateDistancesFor(graph, 4, 0.0015, 0); updateDistancesFor(graph, 5, 0.0015, 0.001); updateDistancesFor(graph, 6, 0, 0); updateDistancesFor(graph, 7, 0.001, 0.003); edge12.setDistance(edge12.getDistance() * 2); edge53.setDistance(edge53.getDistance() * 2); }
@Test public void testMinWeightHasSameUnitAs_getWeight() { Weighting instance = new FastestWeighting(encoder); long flags = encoder.setProperties(encoder.getMaxSpeed(), true, true); assertEquals(instance.getMinWeight(10), instance.calcWeight(createMockedEdgeIteratorState(10, flags), false, EdgeIterator.NO_EDGE), 1e-8); }
@Test public void testShort() { EdgeIteratorState edge = createEdge(10, encoder.setProperties(50, true, true)); Weighting instance = new ShortFastestWeighting(encoder, 0.03); assertEquals(1.02, instance.calcWeight(edge, false, EdgeIterator.NO_EDGE), 1e-8); // more influence from distance instance = new ShortFastestWeighting(encoder, 0.1); assertEquals(1.72, instance.calcWeight(edge, false, EdgeIterator.NO_EDGE), 1e-8); }
na.setNode(2, 2.0, 0.1); EdgeIteratorState edge1 = g.edge(0, 1).setDistance(1000).setFlags(encoder.setProperties(10, true, true)); edge1.setWayGeometry(Helper.createPointList(8, 1, 9, 1)); EdgeIteratorState edge2 = g.edge(2, 1).setDistance(2000).setFlags(encoder.setProperties(50, true, true)); edge2.setWayGeometry(Helper.createPointList(11, 1, 10, 1)); EdgeIteratorState edge3 = g.edge(1, 3).setDistance(1000).setFlags(encoder.setProperties(10, true, true));
edge.setFlags(list.get(0).setProperties(99.123, true, true)); assertEquals(99.123, list.get(0).getSpeed(edge.getFlags()), 1e-3); EdgeIteratorState edgeIter = GHUtility.getEdge(graph, 1, 0); assertTrue(edgeIter.isBackward(list.get(0))); edge = graph.edge(2, 3); edge.setFlags(list.get(1).setProperties(44.123, true, false)); assertEquals(44.123, list.get(1).getSpeed(edge.getFlags()), 1e-3);
@Test public void testWeightingConsistence() { // create an indifferent problem: shortest weighting can pass the speed==0 edge but fastest cannot (?) ghStorage.edge(0, 1, 10, true); ghStorage.edge(1, 2).setDistance(10).setFlags(encoder.setProperties(0.9, true, true)); ghStorage.edge(2, 3, 10, true); LandmarkStorage storage = new LandmarkStorage(ghStorage, new RAMDirectory(), new FastestWeighting(encoder), 2); storage.setMinimumNodes(2); storage.createLandmarks(); assertEquals(2, storage.getSubnetworksWithLandmarks()); assertEquals("[1, 0]", Arrays.toString(storage.getLandmarks(1))); }
graph.edge(0, 1).setDistance(10).setFlags(tmpCar.setProperties(100, true, true) | tmpBike.setProperties(10, true, true)); graph.edge(1, 2).setDistance(10).setFlags(tmpCar.setProperties(100, true, true) | tmpBike.setProperties(10, true, true));
@Test public void testTwoWeightsPerEdge() { FlagEncoder encoder = new Bike2WeightFlagEncoder(); EncodingManager em = new EncodingManager(encoder); AlgorithmOptions opts = AlgorithmOptions.start(). weighting(new FastestWeighting(encoder)).build(); GraphHopperStorage graph = createGHStorage(em, Arrays.asList(opts.getWeighting()), true); initEleGraph(graph); // force the other path GHUtility.getEdge(graph, 0, 3).setFlags(encoder.setProperties(10, false, true)); // for two weights per edge it happened that Path (and also the Weighting) read the wrong side // of the speed and read 0 => infinity weight => overflow of millis => negative millis! Path p = createAlgo(graph, opts). calcPath(0, 10); assertEquals(85124371, p.getTime()); assertEquals(425622, p.getDistance(), 1); assertEquals(85124.4, p.getWeight(), 1); }
setFlags(carEncoder.setProperties(20, true, false)). setWayGeometry(Helper.createPointList(0.001, 0, 0, 0.001));
@Test public void testCombined() { FlagEncoder carEncoder = encodingManager.getEncoder("car"); long fl = footEncoder.setProperties(10, true, true) | carEncoder.setProperties(100, true, false); assertEquals(10, footEncoder.getSpeed(fl), 1e-1); assertTrue(footEncoder.isForward(fl)); assertTrue(footEncoder.isBackward(fl)); assertEquals(100, carEncoder.getSpeed(fl), 1e-1); assertTrue(carEncoder.isForward(fl)); assertFalse(carEncoder.isBackward(fl)); assertEquals(0, carEncoder.getSpeed(footEncoder.setProperties(10, true, true)), 1e-1); }
EdgeIteratorState edge1 = g.edge(0, 1).setDistance(1000).setFlags(encoder.setProperties(50, true, true)); edge1.setWayGeometry(Helper.createPointList()); edge1.setName("Street 1"); EdgeIteratorState edge2 = g.edge(1, 2).setDistance(1000).setFlags(encoder.setProperties(50, true, true)); edge2.setWayGeometry(Helper.createPointList()); edge2.setName("Street 2"); EdgeIteratorState edge3 = g.edge(2, 3).setDistance(1000).setFlags(encoder.setProperties(50, true, true)); edge3.setWayGeometry(Helper.createPointList()); edge3.setName("Street 3"); EdgeIteratorState edge4 = g.edge(3, 4).setDistance(500).setFlags(encoder.setProperties(50, true, true)); edge4.setWayGeometry(Helper.createPointList()); edge4.setName("Street 4"); g.edge(1, 5).setDistance(10000).setFlags(encoder.setProperties(50, true, true)); g.edge(2, 5).setDistance(10000).setFlags(encoder.setProperties(50, true, true)); g.edge(3, 5).setDistance(100000).setFlags(encoder.setProperties(50, true, true));
@Test public void testMultipleVehicles_issue548() { FastestWeighting footWeighting = new FastestWeighting(footEncoder); AlgorithmOptions footOptions = AlgorithmOptions.start(). weighting(footWeighting).build(); FastestWeighting carWeighting = new FastestWeighting(carEncoder); AlgorithmOptions carOptions = AlgorithmOptions.start(). weighting(carWeighting).build(); GraphHopperStorage ghStorage = createGHStorage(encodingManager, Arrays.asList(footOptions.getWeighting(), carOptions.getWeighting()), false); initFootVsCar(ghStorage); // normal path would be 0-4-6-7 but block 4-6 GHUtility.getEdge(ghStorage, 4, 6).setFlags(carEncoder.setProperties(20, false, false)); RoutingAlgorithm algoFoot = createFactory(ghStorage, footOptions). createAlgo(getGraph(ghStorage, footWeighting), footOptions); RoutingAlgorithm algoCar = createFactory(ghStorage, carOptions). createAlgo(getGraph(ghStorage, carWeighting), carOptions); Path p1 = algoCar.calcPath(0, 7); assertEquals(IntArrayList.from(new int[]{0, 1, 5, 6, 7}), p1.calcNodes()); assertEquals(p1.toString(), 26000, p1.getDistance(), 1e-6); }
g2.edge(6, 7, 1, true); EdgeIteratorState iter2_2 = g2.edge(5, 7); iter2_2.setDistance(1.4).setFlags(encoder.setProperties(10, true, false)); iter2_1.setDistance(2.8).setFlags(encoder.setProperties(10, true, false)); iter2_1.setSkippedEdges(iter1_1.getEdge(), iter1_2.getEdge()); CHEdgeIteratorState tmp = g2.shortcut(0, 7); tmp.setDistance(4.2).setFlags(encoder.setProperties(10, true, false)); tmp.setSkippedEdges(iter2_1.getEdge(), iter2_2.getEdge()); g2.setLevel(1, 0);
@Test public void testRemoveSubnetworkWhenMultipleVehicles() { FlagEncoder carEncoder = new CarFlagEncoder(); BikeFlagEncoder bikeEncoder = new BikeFlagEncoder(); EncodingManager em2 = new EncodingManager(carEncoder, bikeEncoder); GraphHopperStorage g = createSubnetworkTestStorage2(em2); GHUtility.getEdge(g, 3, 4).setFlags(carEncoder.setProperties(10, false, false) | bikeEncoder.setProperties(5, true, true)); PrepareRoutingSubnetworks instance = new PrepareRoutingSubnetworks(g, em2.fetchEdgeEncoders()); instance.setMinNetworkSize(5); instance.doWork(); g.optimize(); // remove nothing because of two vehicles with different subnetworks assertEquals(9, g.getNodes()); EdgeExplorer carExplorer = g.createEdgeExplorer(DefaultEdgeFilter.allEdges(carEncoder)); assertEquals(GHUtility.asSet(7, 2, 1), GHUtility.getNeighbors(carExplorer.setBaseNode(3))); EdgeExplorer bikeExplorer = g.createEdgeExplorer(DefaultEdgeFilter.allEdges(bikeEncoder)); assertEquals(GHUtility.asSet(7, 2, 1, 4), GHUtility.getNeighbors(bikeExplorer.setBaseNode(3))); GHUtility.getEdge(g, 3, 4).setFlags(carEncoder.setProperties(10, false, false) | bikeEncoder.setProperties(5, false, false)); instance = new PrepareRoutingSubnetworks(g, em2.fetchEdgeEncoders()); instance.setMinNetworkSize(5); instance.doWork(); g.optimize(); assertEquals(6, g.getNodes()); }
@Test public void testWeightWrongHeading() { Weighting instance = new FastestWeighting(encoder, new PMap(). put(Parameters.Routing.HEADING_PENALTY, "100")); VirtualEdgeIteratorState virtEdge = new VirtualEdgeIteratorState(0, 1, 1, 2, 10, encoder.setProperties(10, true, true), "test", Helper.createPointList(51, 0, 51, 1)); double time = instance.calcWeight(virtEdge, false, 0); virtEdge.setUnfavored(true); // heading penalty on edge assertEquals(time + 100, instance.calcWeight(virtEdge, false, 0), 1e-8); // only after setting it virtEdge.setUnfavored(true); assertEquals(time + 100, instance.calcWeight(virtEdge, true, 0), 1e-8); // but not after releasing it virtEdge.setUnfavored(false); assertEquals(time, instance.calcWeight(virtEdge, true, 0), 1e-8); // test default penalty virtEdge.setUnfavored(true); instance = new FastestWeighting(encoder); assertEquals(time + Routing.DEFAULT_HEADING_PENALTY, instance.calcWeight(virtEdge, false, 0), 1e-8); }
int node = wIndex + hIndex * width; long flags = encoder.setProperties(20 + rand.nextDouble() * 30, true, true);
@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); }
long flags = car.setProperties(60, true, true); CHEdgeIteratorState iter5 = lg.shortcut(0, 2); iter5.setDistance(20).setFlags(flags);