@Override public EdgeIteratorState setDistance(double dist) { return edges.get(current).setDistance(dist); }
@Override public EdgeIteratorState edge(int a, int b, double distance, boolean bothDirection) { return edge(a, b).setDistance(distance).setFlags(encodingManager.flagsDefault(true, bothDirection)); }
private void setEdgeTypeAndClearDistance(EdgeIteratorState edge, GtfsStorage.EdgeType edgeType) { edge.setDistance(0.0); edge.setFlags(encoder.setEdgeType(edge.getFlags(), edgeType)); }
@Override public EdgeIteratorState detach(boolean reverse) { if (reverse) { reverseEdge.setFlags(getFlags()); reverseEdge.setName(getName()); reverseEdge.setDistance(getDistance()); return reverseEdge; } else { return this; } }
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)); }
/** * @return to */ EdgeIteratorState copyProperties(CommonEdgeIterator from, EdgeIteratorState to) { to.setDistance(from.getDistance()). setName(from.getName()). setFlags(from.getDirectFlags()). setWayGeometry(from.fetchWayGeometry(0)); if (E_ADDITIONAL >= 0) to.setAdditionalField(from.getAdditionalField()); return to; }
@Test public void test0SpeedButUnblocked_Issue242() { GraphHopperStorage graph = createGHStorage(false); long flags = carEncoder.setAccess(carEncoder.setSpeed(0, 0), true, true); graph.edge(0, 1).setFlags(flags).setDistance(10); graph.edge(1, 2).setFlags(flags).setDistance(10); RoutingAlgorithm algo = createAlgo(graph); try { Path p = algo.calcPath(0, 2); assertTrue(false); } catch (Exception ex) { assertTrue(ex.getMessage(), ex.getMessage().startsWith("Speed cannot be 0")); } }
@Test public void testFootMix() { graph = createGHStorage(); graph.edge(0, 1).setDistance(10).setFlags(footEncoder.setProperties(10, true, true)); graph.edge(0, 2).setDistance(10).setFlags(carEncoder.setProperties(10, true, true)); graph.edge(0, 3).setDistance(10).setFlags(footEncoder.setProperties(10, true, true) | carEncoder.setProperties(10, true, true)); EdgeExplorer footOutExplorer = graph.createEdgeExplorer(DefaultEdgeFilter.outEdges(footEncoder)); assertEquals(GHUtility.asSet(3, 1), GHUtility.getNeighbors(footOutExplorer.setBaseNode(0))); assertEquals(GHUtility.asSet(3, 2), GHUtility.getNeighbors(carOutExplorer.setBaseNode(0))); }
@Test public void testEdgeReturn() { graph = createGHStorage(); EdgeIteratorState iter = graph.edge(4, 10).setDistance(100).setFlags(carEncoder.setProperties(10, true, false)); assertEquals(4, iter.getBaseNode()); assertEquals(10, iter.getAdjNode()); iter = graph.edge(14, 10).setDistance(100).setFlags(carEncoder.setProperties(10, true, false)); assertEquals(14, iter.getBaseNode()); assertEquals(10, iter.getAdjNode()); }
@Test public void testGraph() { Graph g = new GraphBuilder(encodingManager).create(); g.edge(0, 1).setDistance(10).setFlags(footEncoder.setProperties(10, true, true)); g.edge(0, 2).setDistance(10).setFlags(footEncoder.setProperties(5, true, true)); g.edge(1, 3).setDistance(10).setFlags(footEncoder.setProperties(10, true, true)); EdgeExplorer out = g.createEdgeExplorer(DefaultEdgeFilter.outEdges(footEncoder)); assertEquals(GHUtility.asSet(1, 2), GHUtility.getNeighbors(out.setBaseNode(0))); assertEquals(GHUtility.asSet(0, 3), GHUtility.getNeighbors(out.setBaseNode(1))); assertEquals(GHUtility.asSet(0), GHUtility.getNeighbors(out.setBaseNode(2))); }
@Test public void testFlags() { graph = createGHStorage(); graph.edge(0, 1).setDistance(10).setFlags(carEncoder.setProperties(100, true, true)); graph.edge(2, 3).setDistance(10).setFlags(carEncoder.setProperties(10, true, false)); EdgeIterator iter = carAllExplorer.setBaseNode(0); assertTrue(iter.next()); assertEquals(carEncoder.setProperties(100, true, true), iter.getFlags()); iter = carAllExplorer.setBaseNode(2); assertTrue(iter.next()); assertEquals(carEncoder.setProperties(10, true, false), iter.getFlags()); try { graph.edge(0, 1).setDistance(-1); assertTrue(false); } catch (IllegalArgumentException ex) { } }
@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))); }
GraphHopperStorage createSubnetworkTestStorage2(EncodingManager em) { GraphHopperStorage g = createStorage(em); // large network g.edge(0, 1, 1, true); g.edge(1, 3, 1, true); g.edge(0, 2, 1, true); g.edge(2, 3, 1, true); g.edge(3, 7, 1, true); g.edge(7, 8, 1, true); // connecting both but do not allow CAR! g.edge(3, 4).setDistance(1); // small network g.edge(4, 5, 1, true); g.edge(5, 6, 1, true); g.edge(4, 6, 1, true); return g; }
private Graph initExampleGraph() { GraphHopperStorage gs = new GraphHopperStorage(new RAMDirectory(), em, true, new GraphExtension.NoOpExtension()).create(1000); NodeAccess na = gs.getNodeAccess(); // 50--(0.0001)-->49--(0.0004)-->55--(0.0005)-->60 na.setNode(0, 51.1, 12.001, 50); na.setNode(1, 51.1, 12.002, 60); EdgeIteratorState edge = gs.edge(0, 1). setWayGeometry(Helper.createPointList3D(51.1, 12.0011, 49, 51.1, 12.0015, 55)); edge.setDistance(100); edge.setFlags(encoder.setReverseSpeed(encoder.setProperties(10, true, true), 15)); return gs; }
private Graph initExampleGraph() { GraphHopperStorage gs = new GraphHopperStorage(new RAMDirectory(), em, true, new GraphExtension.NoOpExtension()).create(1000); NodeAccess na = gs.getNodeAccess(); // 50--(0.0001)-->49--(0.0004)-->55--(0.0005)-->60 na.setNode(0, 51.1, 12.001, 50); na.setNode(1, 51.1, 12.002, 60); EdgeIteratorState edge = gs.edge(0, 1). setWayGeometry(Helper.createPointList3D(51.1, 12.0011, 49, 51.1, 12.0015, 55)); edge.setDistance(100); edge.setFlags(encoder.setReverseSpeed(encoder.setProperties(10, true, true), 15)); return gs; }
@Test public void testRoutingFailsWithInvalidGraph_issue665() { GraphHopperStorage graph = new GraphHopperStorage( new RAMDirectory(), em, true, new GraphExtension.NoOpExtension()); graph.create(100); ReaderWay way = new ReaderWay(0); way.setTag("route", "ferry"); long includeWay = em.acceptWay(way); long relationFlags = 0; long wayFlags = em.handleWayTags(way, includeWay, relationFlags); graph.edge(0, 1).setDistance(247).setFlags(wayFlags); assertTrue(isGraphValid(graph, encoder)); }
@Test public void testUTurns() { GraphHopperStorage g = createStorage(createEncodingManager(true)); initGraph(g); TurnCostExtension tcs = (TurnCostExtension) g.getExtension(); long tflags = carEncoder.getTurnFlags(true, 0); // force u-turn via lowering the cost for it EdgeIteratorState e3_6 = getEdge(g, 3, 6); e3_6.setDistance(0.1); getEdge(g, 3, 2).setDistance(864); getEdge(g, 1, 0).setDistance(864); tcs.addTurnInfo(getEdge(g, 7, 6).getEdge(), 6, getEdge(g, 6, 5).getEdge(), tflags); tcs.addTurnInfo(getEdge(g, 4, 3).getEdge(), 3, e3_6.getEdge(), tflags); AlgorithmOptions opts = AlgorithmOptions.start(). weighting(createWeighting(carEncoder, tcs, 50)). traversalMode(TraversalMode.EDGE_BASED_2DIR_UTURN).build(); Path p = createAlgo(g, opts).calcPath(7, 5); assertEquals(IntArrayList.from(new int[]{7, 6, 3, 6, 5}), p.calcNodes()); // no u-turn for 6-3 opts = AlgorithmOptions.start(). weighting(createWeighting(carEncoder, tcs, 100)). traversalMode(TraversalMode.EDGE_BASED_2DIR_UTURN).build(); tcs.addTurnInfo(getEdge(g, 6, 3).getEdge(), 3, getEdge(g, 3, 6).getEdge(), tflags); p = createAlgo(g, opts).calcPath(7, 5); assertEquals(IntArrayList.from(new int[]{7, 6, 3, 2, 5}), p.calcNodes()); }
protected GraphHopperStorage createTestStorage() { GraphHopperStorage graph = createGHStorage(false); graph.edge(0, 1, 7, true); graph.edge(0, 4, 6, true); graph.edge(1, 4, 2, true); graph.edge(1, 5, 8, true); graph.edge(1, 2, 2, true); graph.edge(2, 5, 5, true); graph.edge(2, 3, 2, true); graph.edge(3, 5, 2, true); graph.edge(3, 7, 10, true); graph.edge(4, 6, 4, true); graph.edge(4, 5, 7, true); graph.edge(5, 6, 2, true); graph.edge(5, 7, 1, true); EdgeIteratorState edge6_7 = graph.edge(6, 7, 5, true); updateDistancesFor(graph, 0, 0.0010, 0.00001); updateDistancesFor(graph, 1, 0.0008, 0.0000); updateDistancesFor(graph, 2, 0.0005, 0.0001); updateDistancesFor(graph, 3, 0.0006, 0.0002); updateDistancesFor(graph, 4, 0.0009, 0.0001); updateDistancesFor(graph, 5, 0.0007, 0.0001); updateDistancesFor(graph, 6, 0.0009, 0.0002); updateDistancesFor(graph, 7, 0.0008, 0.0003); edge6_7.setDistance(5 * edge6_7.getDistance()); return graph; }
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 testBasicTurnCosts() { GraphHopperStorage g = createStorage(createEncodingManager(false)); initGraph(g); TurnCostExtension tcs = (TurnCostExtension) g.getExtension(); Path p = createAlgo(g, AlgorithmOptions.start(). weighting(createWeighting(carEncoder, tcs, 40)). traversalMode(TraversalMode.EDGE_BASED_1DIR).build()). calcPath(5, 1); // no restriction and costs EdgeIteratorState e3_6 = getEdge(g, 5, 6); e3_6.setDistance(2); assertEquals(IntArrayList.from(new int[]{5, 2, 3, 1}), p.calcNodes()); // now introduce some turn costs long tflags = carEncoder.getTurnFlags(false, 2); tcs.addTurnInfo(getEdge(g, 5, 2).getEdge(), 2, getEdge(g, 2, 3).getEdge(), tflags); p = createAlgo(g, AlgorithmOptions.start(). weighting(createWeighting(carEncoder, tcs, 40)). traversalMode(TraversalMode.EDGE_BASED_1DIR).build()). calcPath(5, 1); assertEquals(IntArrayList.from(new int[]{5, 6, 3, 1}), p.calcNodes()); }