QueryGraph qGraph = (QueryGraph) graph; for (; idxVirtNode < qGraph.getNodes(); idxVirtNode++) {
@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)); }
@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()))); }
assertEquals(3, queryGraph.getNodes());
QueryGraph qGraph = (QueryGraph) graph; for (; idxVirtNode < qGraph.getNodes(); idxVirtNode++) {
QueryGraph qGraph = (QueryGraph) graph; for (; idxVirtNode < qGraph.getNodes(); idxVirtNode++) {