private Graph createSquareGraph() { // simple square // 1 | 0 1 2 // 0 | 7 3 // -1 | 6 5 4 // ---|------ // |-1 0 1 GraphHopperStorage graph = new GraphHopperStorage(new RAMDirectory(), em, false, new GraphExtension.NoOpExtension()); graph.create(1000); for (int i = 0; i < 8; ++i) { graph.edge(i, (i + 1) % 8, 1, true); } updateDistancesFor(graph, 0, 1, -1); updateDistancesFor(graph, 1, 1, 0); updateDistancesFor(graph, 2, 1, 1); updateDistancesFor(graph, 3, 0, 1); updateDistancesFor(graph, 4, -1, 1); updateDistancesFor(graph, 5, -1, 0); updateDistancesFor(graph, 6, -1, -1); updateDistancesFor(graph, 7, 0, -1); return graph; } }
public static Graph initBiGraph(Graph graph) { // distance will be overwritten in second step as we need to calculate it from lat,lon graph.edge(0, 1, 1, true); graph.edge(1, 2, 1, true); graph.edge(2, 3, 1, true); graph.edge(3, 4, 1, true); graph.edge(4, 5, 1, true); graph.edge(5, 6, 1, true); graph.edge(6, 7, 1, true); graph.edge(7, 0, 1, true); graph.edge(3, 8, 1, true); graph.edge(8, 6, 1, true); // we need lat,lon for edge precise queries because the distances of snapped point // to adjacent nodes is calculated from lat,lon of the necessary points updateDistancesFor(graph, 0, 0.001, 0); updateDistancesFor(graph, 1, 0.100, 0.0005); updateDistancesFor(graph, 2, 0.010, 0.0010); updateDistancesFor(graph, 3, 0.001, 0.0011); updateDistancesFor(graph, 4, 0.001, 0.00111); updateDistancesFor(graph, 8, 0.0005, 0.0011); updateDistancesFor(graph, 7, 0, 0); updateDistancesFor(graph, 6, 0, 0.001); updateDistancesFor(graph, 5, 0, 0.004); return graph; }
@Before public void setUp() { encoder = new CarFlagEncoder(); em = new EncodingManager(Arrays.asList(encoder), 8); graph = new GraphBuilder(em).create(); // 0-1 graph.edge(0, 1, 1, true); AbstractRoutingAlgorithmTester.updateDistancesFor(graph, 0, 0.00, 0.00); AbstractRoutingAlgorithmTester.updateDistancesFor(graph, 1, 0.01, 0.01); }
g.edge(9, 8, 9, false); g.edge(10, 9, 10, false); updateDistancesFor(g, 0, 3, 0); updateDistancesFor(g, 3, 2.5, 0); updateDistancesFor(g, 5, 1, 0); updateDistancesFor(g, 8, 0, 0); updateDistancesFor(g, 1, 3, 1); updateDistancesFor(g, 4, 2, 1); updateDistancesFor(g, 6, 1, 1); updateDistancesFor(g, 9, 0, 1); updateDistancesFor(g, 2, 3, 2); updateDistancesFor(g, 11, 2, 2); updateDistancesFor(g, 7, 1, 2); updateDistancesFor(g, 10, 0, 2); return g;
graph.edge(4, 8, 1, true); updateDistancesFor(graph, 5, 0.00, 0.05); updateDistancesFor(graph, 6, 0.00, 0.10); updateDistancesFor(graph, 7, 0.00, 0.15); updateDistancesFor(graph, 8, 0.00, 0.25); updateDistancesFor(graph, 1, 0.05, 0.00); updateDistancesFor(graph, 9, 0.10, 0.05); updateDistancesFor(graph, 2, 0.05, 0.10); updateDistancesFor(graph, 3, 0.05, 0.15); updateDistancesFor(graph, 4, 0.05, 0.25); updateDistancesFor(graph, 10, 0.05, 0.30); return graph;
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; }
graph.edge(10, 11, 1, true); // 12 AbstractRoutingAlgorithmTester.updateDistancesFor(graph, 0, 2, 0); AbstractRoutingAlgorithmTester.updateDistancesFor(graph, 1, 2, 1); AbstractRoutingAlgorithmTester.updateDistancesFor(graph, 2, 2, 2); AbstractRoutingAlgorithmTester.updateDistancesFor(graph, 3, 2, 3); AbstractRoutingAlgorithmTester.updateDistancesFor(graph, 4, 1, 0); AbstractRoutingAlgorithmTester.updateDistancesFor(graph, 5, 1, 1); AbstractRoutingAlgorithmTester.updateDistancesFor(graph, 6, 1, 2); AbstractRoutingAlgorithmTester.updateDistancesFor(graph, 7, 1, 3); AbstractRoutingAlgorithmTester.updateDistancesFor(graph, 8, 0, 0); AbstractRoutingAlgorithmTester.updateDistancesFor(graph, 9, 0, 1); AbstractRoutingAlgorithmTester.updateDistancesFor(graph, 10, 0, 2); AbstractRoutingAlgorithmTester.updateDistancesFor(graph, 11, 0, 3);
@Before public void setUp() { ReaderWay way = new ReaderWay(27l); way.setTag("highway", "primary"); way.setTag("maxspeed", "10"); way.setTag("maxheight", "4.4"); graph = new GraphBuilder(em).create(); // 0-1 graph.edge(0, 1, 1, true); AbstractRoutingAlgorithmTester.updateDistancesFor(graph, 0, 0.00, 0.00); AbstractRoutingAlgorithmTester.updateDistancesFor(graph, 1, 0.01, 0.01); graph.getEdgeIteratorState(0, 1).setFlags(encoder.handleWayTags(way, 1, 0)); }
@Test public void testLoopStreet_Issue151() { // do query at x should result in ignoring only the bottom edge 1-3 not the upper one => getNeighbors are 0, 5, 3 and not only 0, 5 // // 0--1--3--4 // | | // x--- // g.edge(0, 1, 10, true); g.edge(1, 3, 10, true); g.edge(3, 4, 10, true); EdgeIteratorState edge = g.edge(1, 3, 20, true).setWayGeometry(Helper.createPointList(-0.001, 0.001, -0.001, 0.002)); AbstractRoutingAlgorithmTester.updateDistancesFor(g, 0, 0, 0); AbstractRoutingAlgorithmTester.updateDistancesFor(g, 1, 0, 0.001); AbstractRoutingAlgorithmTester.updateDistancesFor(g, 3, 0, 0.002); AbstractRoutingAlgorithmTester.updateDistancesFor(g, 4, 0, 0.003); QueryResult qr = new QueryResult(-0.0005, 0.001); qr.setClosestEdge(edge); qr.setWayIndex(1); qr.calcSnappedPoint(new DistanceCalc2D()); QueryGraph qg = new QueryGraph(g); qg.lookup(Arrays.asList(qr)); EdgeExplorer ee = qg.createEdgeExplorer(); assertEquals(GHUtility.asSet(0, 5, 3), GHUtility.getNeighbors(ee.setBaseNode(1))); }
graph.edge(0, 3, 1, true); graph.edge(1, 4, 1, true); AbstractRoutingAlgorithmTester.updateDistancesFor(graph, 0, 0.01, 0.00); AbstractRoutingAlgorithmTester.updateDistancesFor(graph, 1, 0.01, 0.01); AbstractRoutingAlgorithmTester.updateDistancesFor(graph, 2, 0.01, 0.02); AbstractRoutingAlgorithmTester.updateDistancesFor(graph, 3, 0.00, 0.00); AbstractRoutingAlgorithmTester.updateDistancesFor(graph, 4, 0.00, 0.01);
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 testViaEdges_SpecialCases() { GraphHopperStorage graph = createGHStorage(false); // 0->1\ // | 2 // 4<-3/ graph.edge(0, 1, 7, false); graph.edge(1, 2, 7, true); graph.edge(2, 3, 7, true); graph.edge(3, 4, 7, false); graph.edge(4, 0, 7, true); updateDistancesFor(graph, 4, 0, 0); updateDistancesFor(graph, 0, 0.00010, 0); updateDistancesFor(graph, 1, 0.00010, 0.0001); updateDistancesFor(graph, 2, 0.00005, 0.00015); updateDistancesFor(graph, 3, 0, 0.0001); // 0-1 to 3-4 Path p = calcPathViaQuery(graph, 0.00010, 0.00001, 0, 0.00009); assertEquals(IntArrayList.from(new int[]{5, 1, 2, 3, 6}), p.calcNodes()); assertEquals(p.toString(), 26.81, p.getDistance(), .1); // overlapping edges: 2-3 and 3-2 p = calcPathViaQuery(graph, 0.000049, 0.00014, 0.00001, 0.0001); assertEquals(IntArrayList.from(new int[]{5, 6}), p.calcNodes()); assertEquals(p.toString(), 6.2, p.getDistance(), .1); // 'from' and 'to' edge share one node '2': 1-2 to 3-2 p = calcPathViaQuery(graph, 0.00009, 0.00011, 0.00001, 0.00011); assertEquals(p.toString(), IntArrayList.from(new int[]{6, 2, 5}), p.calcNodes()); assertEquals(p.toString(), 12.57, p.getDistance(), .1); }
graph.edge(0, 3, 1, true); graph.edge(1, 4, 1, true); AbstractRoutingAlgorithmTester.updateDistancesFor(graph, 0, 0.01, 0.00); AbstractRoutingAlgorithmTester.updateDistancesFor(graph, 1, 0.01, 0.01); AbstractRoutingAlgorithmTester.updateDistancesFor(graph, 2, 0.01, 0.02); AbstractRoutingAlgorithmTester.updateDistancesFor(graph, 3, 0.00, 0.00); AbstractRoutingAlgorithmTester.updateDistancesFor(graph, 4, 0.00, 0.01); LocationIndex locationIndex = new LocationIndexTree(graph, new RAMDirectory()).prepareIndex();
@Test public void testDisconnectedAreas() { Graph g = createTestGraph(true, em); // one single disconnected node updateDistancesFor(g, 20, 0.00, -0.01); Weighting weighting = new FastestWeighting(carFE); AlternativeBidirSearch altDijkstra = new AlternativeBidirSearch(g, weighting, traversalMode, 1); Path path = altDijkstra.calcPath(1, 20); assertFalse(path.isFound()); // make sure not the full graph is traversed! assertEquals(3, altDijkstra.getVisitedNodes()); } }
@Test public void testDisabledRoadAttributes() { DataFlagEncoder simpleEncoder = new DataFlagEncoder(); EncodingManager simpleEncodingManager = new EncodingManager(simpleEncoder); Graph simpleGraph = new GraphBuilder(simpleEncodingManager).create(); ReaderWay way = new ReaderWay(27l); way.setTag("highway", "primary"); way.setTag("maxspeed", "10"); way.setTag("maxheight", "4.4"); // 0-1 simpleGraph.edge(0, 1, 1, true); AbstractRoutingAlgorithmTester.updateDistancesFor(simpleGraph, 0, 0.00, 0.00); AbstractRoutingAlgorithmTester.updateDistancesFor(simpleGraph, 1, 0.01, 0.01); simpleGraph.getEdgeIteratorState(0, 1).setFlags(simpleEncoder.handleWayTags(way, 1, 0)); Weighting instance = new GenericWeighting(simpleEncoder, new HintsMap().put(GenericWeighting.HEIGHT_LIMIT, 5.0)); EdgeIteratorState edge = simpleGraph.getEdgeIteratorState(0, 1); assertEquals(edgeWeight, instance.calcWeight(edge, false, EdgeIterator.NO_EDGE), 1e-8); } }
@Test public void testWithCoordinates() { Weighting weighting = new ShortestWeighting(carEncoder); GraphHopperStorage graph = createGHStorage(encodingManager, Arrays.asList(weighting), false); graph.edge(0, 1, 2, true).setWayGeometry(Helper.createPointList(1.5, 1)); graph.edge(2, 3, 2, true).setWayGeometry(Helper.createPointList(0, 1.5)); graph.edge(3, 4, 2, true).setWayGeometry(Helper.createPointList(0, 2)); // duplicate but the second edge is longer graph.edge(0, 2, 1.2, true); graph.edge(0, 2, 1.5, true).setWayGeometry(Helper.createPointList(0.5, 0)); graph.edge(1, 3, 1.3, true).setWayGeometry(Helper.createPointList(0.5, 1.5)); graph.edge(1, 4, 1, true); updateDistancesFor(graph, 0, 1, 0.6); updateDistancesFor(graph, 1, 1, 1.5); updateDistancesFor(graph, 2, 0, 0); updateDistancesFor(graph, 3, 0, 1); updateDistancesFor(graph, 4, 0, 2); AlgorithmOptions opts = new AlgorithmOptions(DIJKSTRA_BI, weighting); RoutingAlgorithmFactory prepare = createFactory(graph, opts); Path p = prepare.createAlgo(getGraph(graph, opts.getWeighting()), opts).calcPath(4, 0); assertEquals(IntArrayList.from(new int[]{4, 1, 0}), p.calcNodes()); assertEquals(Helper.createPointList(0, 2, 1, 1.5, 1.5, 1, 1, 0.6), p.calcPoints()); assertEquals(274128, p.calcPoints().calcDistance(new DistanceCalcEarth()), 1); p = prepare.createAlgo(getGraph(graph, opts.getWeighting()), opts).calcPath(2, 1); assertEquals(IntArrayList.from(new int[]{2, 0, 1}), p.calcNodes()); assertEquals(Helper.createPointList(0, 0, 1, 0.6, 1.5, 1, 1, 1.5), p.calcPoints()); assertEquals(279482, p.calcPoints().calcDistance(new DistanceCalcEarth()), 1); }
AbstractRoutingAlgorithmTester.updateDistancesFor(graph, 0, 0.00, 0.00); AbstractRoutingAlgorithmTester.updateDistancesFor(graph, 1, 0.01, 0.01); graph.getEdgeIteratorState(0, 1).setFlags(carFlagEncoder.handleWayTags(way_0_1, 1, 0)); AbstractRoutingAlgorithmTester.updateDistancesFor(graph, 2, 0.02, 0.02); graph.getEdgeIteratorState(1, 2).setFlags(carFlagEncoder.handleWayTags(way_1_2, 1, 0));
AbstractRoutingAlgorithmTester.updateDistancesFor(graph, 0, 0.00, 0.00); AbstractRoutingAlgorithmTester.updateDistancesFor(graph, 1, 0.01, 0.01); graph.getEdgeIteratorState(0, 1).setFlags(encoder.handleWayTags(way_0_1, 1, 0)); AbstractRoutingAlgorithmTester.updateDistancesFor(graph, 2, 0.02, 0.02); graph.getEdgeIteratorState(1, 2).setFlags(encoder.handleWayTags(way_1_2, 1, 0));
EdgeIteratorState e3 = graph.edge(0, 3, 1, true); EdgeIteratorState e4 = graph.edge(0, 4, 1, true); AbstractRoutingAlgorithmTester.updateDistancesFor(graph, 0, 0.00, 0.00); AbstractRoutingAlgorithmTester.updateDistancesFor(graph, 1, 0.01, 0.01); AbstractRoutingAlgorithmTester.updateDistancesFor(graph, 2, -0.01, -0.01); AbstractRoutingAlgorithmTester.updateDistancesFor(graph, 3, 0.01, 0.01); AbstractRoutingAlgorithmTester.updateDistancesFor(graph, 4, -0.01, -0.01);
graph.edge(node, node + width).setFlags(flags); AbstractRoutingAlgorithmTester.updateDistancesFor(graph, node, -hIndex / 50.0, wIndex / 50.0);