int origTraversalKey = GHUtility.createEdgeKey(baseNode, adjNode, closestEdge.getEdge(), false); int origRevTraversalKey = GHUtility.createEdgeKey(baseNode, adjNode, closestEdge.getEdge(), true); long reverseFlags = closestEdge.detach(true).getFlags(); int prevWayIndex = 1; int prevNodeId = baseNode;
closestEdge = closestEdge.detach(true); PointList fullPL = closestEdge.fetchWayGeometry(3); res.setClosestEdge(closestEdge);
@Test public void reverseEdge() { Graph graph = new GraphBuilder(encodingManager).create(); EdgeIteratorState edge = graph.edge(0, 1); ReaderWay osmWay = new ReaderWay(0); osmWay.setTag("highway", "primary"); osmWay.setTag("maxspeed:forward", "10"); long flags = encoder.handleWayTags(osmWay, 1, 0); edge.setFlags(flags); assertEquals(10, encoder.getMaxspeed(edge, motorVehicleInt, false), .1); assertEquals(-1, encoder.getMaxspeed(edge, motorVehicleInt, true), .1); edge = edge.detach(true); assertEquals(-1, encoder.getMaxspeed(edge, motorVehicleInt, false), .1); assertEquals(10, encoder.getMaxspeed(edge, motorVehicleInt, true), .1); }
@Test public void setAccess() { Graph graph = new GraphBuilder(encodingManager).create(); EdgeIteratorState edge = graph.edge(0, 1); edge.setFlags(encoder.setAccess(edge.getFlags(), true, true)); assertTrue(encoder.isForward(edge, motorVehicleInt)); assertTrue(encoder.isBackward(edge, motorVehicleInt)); edge.setFlags(encoder.setAccess(edge.getFlags(), true, false)); assertTrue(encoder.isForward(edge, motorVehicleInt)); assertFalse(encoder.isBackward(edge, motorVehicleInt)); edge = edge.detach(true); assertFalse(encoder.isForward(edge, motorVehicleInt)); assertTrue(encoder.isBackward(edge, motorVehicleInt)); edge = edge.detach(true); assertTrue(encoder.isForward(edge, motorVehicleInt)); assertFalse(encoder.isBackward(edge, motorVehicleInt)); edge.setFlags(encoder.setAccess(edge.getFlags(), false, false)); assertFalse(encoder.isForward(edge, motorVehicleInt)); assertFalse(encoder.isBackward(edge, motorVehicleInt)); }
@Test public void testUseMeanElevation() { g.close(); g = new GraphHopperStorage(new RAMDirectory(), encodingManager, true, new GraphExtension.NoOpExtension()).create(100); NodeAccess na = g.getNodeAccess(); na.setNode(0, 0, 0, 0); na.setNode(1, 0, 0.0001, 20); EdgeIteratorState edge = g.edge(0, 1); EdgeIteratorState edgeReverse = edge.detach(true); DistanceCalc2D distCalc = new DistanceCalc2D(); QueryResult qr = new QueryResult(0, 0.00005); qr.setClosestEdge(edge); qr.setWayIndex(0); qr.setSnappedPosition(EDGE); qr.calcSnappedPoint(distCalc); assertEquals(10, qr.getSnappedPoint().getEle(), 1e-1); qr = new QueryResult(0, 0.00005); qr.setClosestEdge(edgeReverse); qr.setWayIndex(0); qr.setSnappedPosition(EDGE); qr.calcSnappedPoint(distCalc); assertEquals(10, qr.getSnappedPoint().getEle(), 1e-1); }
if (node == qr.getClosestEdge().getAdjNode()) { virtualEdgesMap.put(virtualEdgesMapKey(iter), qr.getClosestEdge().detach(false)); virtualEdgesMap.put(reverseVirtualEdgesMapKey(iter), qr.getClosestEdge().detach(true)); } else if (node == qr.getClosestEdge().getBaseNode()) { virtualEdgesMap.put(virtualEdgesMapKey(iter), qr.getClosestEdge().detach(true)); virtualEdgesMap.put(reverseVirtualEdgesMapKey(iter), qr.getClosestEdge().detach(false)); } else { throw new RuntimeException();
if (node == qr.getClosestEdge().getAdjNode()) { virtualEdgesMap.put(virtualEdgesMapKey(iter), qr.getClosestEdge().detach(false)); virtualEdgesMap.put(reverseVirtualEdgesMapKey(iter), qr.getClosestEdge().detach(true)); } else if (node == qr.getClosestEdge().getBaseNode()) { virtualEdgesMap.put(virtualEdgesMapKey(iter), qr.getClosestEdge().detach(true)); virtualEdgesMap.put(reverseVirtualEdgesMapKey(iter), qr.getClosestEdge().detach(false)); } else { throw new RuntimeException();
} else { em = new EdgeMatch(edge = em.getEdgeState().detach(true), em.getGpxExtensions());
EdgeIteratorState realEdge = virtualEdgesMap.get(es.getEdge()); if (list.isEmpty() || list.get(0).getEdge() != realEdge.getEdge()) { list.add(realEdge.detach(true));
int origTraversalKey = GHUtility.createEdgeKey(baseNode, adjNode, closestEdge.getEdge(), false); int origRevTraversalKey = GHUtility.createEdgeKey(baseNode, adjNode, closestEdge.getEdge(), true); long reverseFlags = closestEdge.detach(true).getFlags(); int prevWayIndex = 1; int prevNodeId = baseNode;
int origTraversalKey = GHUtility.createEdgeKey(baseNode, adjNode, closestEdge.getEdge(), false); int origRevTraversalKey = GHUtility.createEdgeKey(baseNode, adjNode, closestEdge.getEdge(), true); long reverseFlags = closestEdge.detach(true).getFlags(); int prevWayIndex = 1; int prevNodeId = baseNode;
int origTraversalKey = GHUtility.createEdgeKey(baseNode, adjNode, closestEdge.getEdge(), false); int origRevTraversalKey = GHUtility.createEdgeKey(baseNode, adjNode, closestEdge.getEdge(), true); long reverseFlags = closestEdge.detach(true).getFlags(); int prevWayIndex = 1; int prevNodeId = baseNode;
closestEdge = closestEdge.detach(true); PointList fullPL = closestEdge.fetchWayGeometry(3); res.setClosestEdge(closestEdge);
closestEdge = closestEdge.detach(true); PointList fullPL = closestEdge.fetchWayGeometry(3); res.setClosestEdge(closestEdge);
closestEdge = closestEdge.detach(true); PointList fullPL = closestEdge.fetchWayGeometry(3); res.setClosestEdge(closestEdge);
/** * Fills the minFactorMap with weights for the virtual edges. */ private void fillVirtualEdges(TIntDoubleHashMap minFactorMap, TIntObjectHashMap<EdgeIteratorState> virtualEdgesMap, EdgeExplorer explorer, QueryResult qr) { EdgeIterator iter = explorer.setBaseNode(qr.getClosestNode()); while (iter.next()) { if (isVirtualNode(qr.getClosestNode())) { if (traverseToClosestRealAdj(explorer, iter) == qr.getClosestEdge().getAdjNode()) { virtualEdgesMap.put(iter.getEdge(), qr.getClosestEdge()); } else { virtualEdgesMap.put(iter.getEdge(), qr.getClosestEdge().detach(true)); } } double dist = minFactorMap.get(iter.getEdge()); if (dist < 0 || dist > qr.getQueryDistance()) { minFactorMap.put(iter.getEdge(), qr.getQueryDistance() + 0.5); } } }