@Test public void internalDisconnect() { GraphHopperStorage storage = createGHStorage(); BaseGraph graph = (BaseGraph) storage.getGraph(Graph.class); EdgeIteratorState iter0 = graph.edge(0, 1, 10, true); EdgeIteratorState iter2 = graph.edge(1, 2, 10, true); EdgeIteratorState iter3 = graph.edge(0, 3, 10, true); EdgeExplorer explorer = graph.createEdgeExplorer(); assertEquals(GHUtility.asSet(3, 1), GHUtility.getNeighbors(explorer.setBaseNode(0))); assertEquals(GHUtility.asSet(2, 0), GHUtility.getNeighbors(explorer.setBaseNode(1))); // remove edge "1-2" but only from 1 not from 2 graph.edgeAccess.internalEdgeDisconnect(iter2.getEdge(), -1, iter2.getBaseNode(), iter2.getAdjNode()); assertEquals(GHUtility.asSet(0), GHUtility.getNeighbors(explorer.setBaseNode(1))); assertEquals(GHUtility.asSet(1), GHUtility.getNeighbors(explorer.setBaseNode(2))); // let 0 unchanged -> no side effects assertEquals(GHUtility.asSet(3, 1), GHUtility.getNeighbors(explorer.setBaseNode(0))); // remove edge "0-1" but only from 0 graph.edgeAccess.internalEdgeDisconnect(iter0.getEdge(), (long) iter3.getEdge() * graph.edgeEntryBytes, iter0.getBaseNode(), iter0.getAdjNode()); assertEquals(GHUtility.asSet(3), GHUtility.getNeighbors(explorer.setBaseNode(0))); assertEquals(GHUtility.asSet(0), GHUtility.getNeighbors(explorer.setBaseNode(3))); assertEquals(GHUtility.asSet(0), GHUtility.getNeighbors(explorer.setBaseNode(1))); storage.close(); }
@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 testSimpleShortcutCreationAndTraversal() { graph = createGHStorage(); graph.edge(1, 3, 10, true); graph.edge(3, 4, 10, true); graph.freeze(); CHGraph lg = graph.getGraph(CHGraph.class); lg.shortcut(1, 4).setWeight(3).setFlags(carEncoder.setProperties(10, true, true)); EdgeExplorer vehicleOutExplorer = lg.createEdgeExplorer(DefaultEdgeFilter.outEdges(carEncoder)); // iteration should result in same nodes even if reusing the iterator assertEquals(GHUtility.asSet(3, 4), GHUtility.getNeighbors(vehicleOutExplorer.setBaseNode(1))); assertEquals(GHUtility.asSet(3, 4), GHUtility.getNeighbors(vehicleOutExplorer.setBaseNode(1))); }
@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 testQueryGraph() { graph = createGHStorage(); CHGraph chGraph = getGraph(graph); NodeAccess na = chGraph.getNodeAccess(); na.setNode(0, 1.00, 1.00); na.setNode(1, 1.02, 1.00); na.setNode(2, 1.04, 1.00); EdgeIteratorState edge1 = chGraph.edge(0, 1); chGraph.edge(1, 2); graph.freeze(); chGraph.shortcut(0, 1); QueryGraph qGraph = new QueryGraph(chGraph); QueryResult fromRes = createQR(1.004, 1.01, 0, edge1); QueryResult toRes = createQR(1.019, 1.00, 0, edge1); qGraph.lookup(fromRes, toRes); Graph baseGraph = qGraph.getBaseGraph(); EdgeExplorer explorer = baseGraph.createEdgeExplorer(); assertTrue(chGraph.getNodes() < qGraph.getNodes()); assertEquals(baseGraph.getNodes(), qGraph.getNodes()); // traverse virtual edges and normal edges but no shortcuts! assertEquals(GHUtility.asSet(fromRes.getClosestNode()), GHUtility.getNeighbors(explorer.setBaseNode(0))); assertEquals(GHUtility.asSet(toRes.getClosestNode(), 2), GHUtility.getNeighbors(explorer.setBaseNode(1))); // get neighbors from virtual nodes assertEquals(GHUtility.asSet(0, toRes.getClosestNode()), GHUtility.getNeighbors(explorer.setBaseNode(fromRes.getClosestNode()))); assertEquals(GHUtility.asSet(1, fromRes.getClosestNode()), GHUtility.getNeighbors(explorer.setBaseNode(toRes.getClosestNode()))); }
private void checkExampleGraph(Graph graph) { NodeAccess na = graph.getNodeAccess(); assertEquals(12f, na.getLatitude(0), 1e-6); assertEquals(23f, na.getLongitude(0), 1e-6); assertEquals(38.33f, na.getLatitude(1), 1e-6); assertEquals(135.3f, na.getLongitude(1), 1e-6); assertEquals(6, na.getLatitude(2), 1e-6); assertEquals(139, na.getLongitude(2), 1e-6); assertEquals(78, na.getLatitude(3), 1e-6); assertEquals(89, na.getLongitude(3), 1e-6); assertEquals(GHUtility.asSet(0), GHUtility.getNeighbors(carOutExplorer.setBaseNode((1)))); assertEquals(GHUtility.asSet(5, 4, 3, 2, 1), GHUtility.getNeighbors(carOutExplorer.setBaseNode(0))); try { assertEquals(0, count(carOutExplorer.setBaseNode(6))); // for now return empty iterator // assertFalse(true); } catch (Exception ex) { } }
+ ", skippedEdge1: " + getCoords(prepareGraph.getEdgeIteratorState(sc.skippedEdge1, sc.from), prepareGraph) + ", skippedEdge2: " + getCoords(prepareGraph.getEdgeIteratorState(sc.skippedEdge2, sc.to), prepareGraph) + ", neighbors:" + GHUtility.getNeighbors(iter));
@Test public void testRemoveSubnetworkIfOnlyOneVehicle() { GraphHopperStorage g = createSubnetworkTestStorage2(em); PrepareRoutingSubnetworks instance = new PrepareRoutingSubnetworks(g, em.fetchEdgeEncoders()); instance.setMinNetworkSize(4); instance.doWork(); g.optimize(); assertEquals(6, g.getNodes()); assertEquals(Arrays.<String>asList(), GHUtility.getProblems(g)); EdgeExplorer explorer = g.createEdgeExplorer(); assertEquals(GHUtility.asSet(2, 1, 5), GHUtility.getNeighbors(explorer.setBaseNode(3))); // do not remove because small network is big enough g = createSubnetworkTestStorage2(em); instance = new PrepareRoutingSubnetworks(g, em.fetchEdgeEncoders()); instance.setMinNetworkSize(3); instance.doWork(); g.optimize(); assertEquals(9, g.getNodes()); }
@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))); }
@Test public void testAvoidDuplicateVirtualNodesIfIdentical() { initGraph(g); EdgeIteratorState edgeState = GHUtility.getEdge(g, 0, 2); QueryResult res1 = createLocationResult(0.5, 0, edgeState, 0, EDGE); QueryResult res2 = createLocationResult(0.5, 0, edgeState, 0, EDGE); QueryGraph queryGraph = new QueryGraph(g); queryGraph.lookup(Arrays.asList(res1, res2)); assertEquals(new GHPoint(0.5, 0), res1.getSnappedPoint()); assertEquals(new GHPoint(0.5, 0), res2.getSnappedPoint()); assertEquals(3, res1.getClosestNode()); assertEquals(3, res2.getClosestNode()); // force skip due to **tower** node snapping in phase 2, but no virtual edges should be created for res1 edgeState = GHUtility.getEdge(g, 0, 1); res1 = createLocationResult(1, 0, edgeState, 0, EDGE); // now create virtual edges edgeState = GHUtility.getEdge(g, 0, 2); res2 = createLocationResult(0.5, 0, edgeState, 0, EDGE); queryGraph = new QueryGraph(g); queryGraph.lookup(Arrays.asList(res1, res2)); // make sure only one virtual node was created assertEquals(queryGraph.getNodes(), g.getNodes() + 1); EdgeIterator iter = queryGraph.createEdgeExplorer().setBaseNode(0); assertEquals(GHUtility.asSet(1, 3), GHUtility.getNeighbors(iter)); }
int id12 = getIdOf(graph, 12); // is now 5 int id9 = getIdOf(graph, 9); // is now 9 assertEquals(GHUtility.asSet(id12, id11), GHUtility.getNeighbors(carAllExplorer.setBaseNode(id9))); assertEquals(GHUtility.asSet(id9), GHUtility.getNeighbors(carAllExplorer.setBaseNode(id11))); assertEquals(GHUtility.asSet(id9), GHUtility.getNeighbors(carAllExplorer.setBaseNode(id12)));
@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()); }
EdgeExplorer explorer = g.createEdgeExplorer(carOutFilter); assertEquals(2, GHUtility.count(explorer.setBaseNode(0))); assertEquals(GHUtility.asSet(2, 1), GHUtility.getNeighbors(explorer.setBaseNode(0))); assertEquals(20, na.getLongitude(1), 1e-2); assertEquals(2, GHUtility.count(explorer.setBaseNode(1))); assertEquals(GHUtility.asSet(2, 0), GHUtility.getNeighbors(explorer.setBaseNode(1))); assertEquals(1, GHUtility.count(explorer.setBaseNode(2))); assertEquals(GHUtility.asSet(0), GHUtility.getNeighbors(explorer.setBaseNode(2))); assertEquals(Helper.createPointList3D(11, 20, 1), eib.fetchWayGeometry(1)); assertEquals(Helper.createPointList3D(12, 12, 0.4), eib.fetchWayGeometry(2)); assertEquals(GHUtility.asSet(0), GHUtility.getNeighbors(explorer.setBaseNode(2)));
assertEquals(carFlagEncoder.setProperties(20, true, false), iter.getFlags()); assertEquals(10, iter.getDistance(), 1e-4); assertEquals(1, GHUtility.getNeighbors(g.createEdgeExplorer().setBaseNode(1)).size()); assertEquals(0, GHUtility.getNeighbors(g.createEdgeExplorer(carOutFilter).setBaseNode(1)).size());
assertEquals(0, GHUtility.count(chCarOutExplorer.setBaseNode(2))); assertEquals(GHUtility.asSet(0, 2, 4), GHUtility.getNeighbors(chCarOutExplorer.setBaseNode(1))); assertEquals(GHUtility.asSet(4), GHUtility.getNeighbors(baseCarOutExplorer.setBaseNode(1)));
+ ", skippedEdge1: " + getCoords(prepareGraph.getEdgeIteratorState(sc.skippedEdge1, sc.from), prepareGraph) + ", skippedEdge2: " + getCoords(prepareGraph.getEdgeIteratorState(sc.skippedEdge2, sc.to), prepareGraph) + ", neighbors:" + GHUtility.getNeighbors(iter));
+ ", skippedEdge1: " + getCoords(prepareGraph.getEdgeIteratorState(sc.skippedEdge1, sc.from), prepareGraph) + ", skippedEdge2: " + getCoords(prepareGraph.getEdgeIteratorState(sc.skippedEdge2, sc.to), prepareGraph) + ", neighbors:" + GHUtility.getNeighbors(iter));
+ ", skippedEdge1: " + getCoords(prepareGraph.getEdgeIteratorState(sc.skippedEdge1, sc.from), prepareGraph) + ", skippedEdge2: " + getCoords(prepareGraph.getEdgeIteratorState(sc.skippedEdge2, sc.to), prepareGraph) + ", neighbors:" + GHUtility.getNeighbors(iter));