/** * This method calculates the turn weight separately. */ public double calcTurnWeight(int edgeFrom, int nodeVia, int edgeTo) { long turnFlags = turnCostExt.getTurnCostFlags(edgeFrom, nodeVia, edgeTo); if (turnCostEncoder.isTurnRestricted(turnFlags)) return Double.POSITIVE_INFINITY; return turnCostEncoder.getTurnCost(turnFlags); }
@Override public long getTurnCostFlags(int edgeFrom, int nodeVia, int edgeTo) { if (isVirtualNode(nodeVia)) { return 0; } else if (isVirtualEdge(edgeFrom) || isVirtualEdge(edgeTo)) { if (isVirtualEdge(edgeFrom)) { edgeFrom = queryResults.get((edgeFrom - mainEdges) / 4).getClosestEdge().getEdge(); } if (isVirtualEdge(edgeTo)) { edgeTo = queryResults.get((edgeTo - mainEdges) / 4).getClosestEdge().getEdge(); } return mainTurnExtension.getTurnCostFlags(edgeFrom, nodeVia, edgeTo); } else { return mainTurnExtension.getTurnCostFlags(edgeFrom, nodeVia, edgeTo); } } }
long flags423 = tcs.getTurnCostFlags(edge42, 2, edge23); assertEquals(Double.POSITIVE_INFINITY, carEncoder.getTurnCost(flags423), 0); assertEquals(Double.POSITIVE_INFINITY, bikeEncoder.getTurnCost(flags423), 0); long flags231 = tcs.getTurnCostFlags(edge23, 3, edge31); assertEquals(Double.POSITIVE_INFINITY, carEncoder.getTurnCost(flags231), 0); assertEquals(2.0, bikeEncoder.getTurnCost(flags231), 0); long flags310 = tcs.getTurnCostFlags(edge31, 1, edge10); assertEquals(2.0, carEncoder.getTurnCost(flags310), 0); assertEquals(Double.POSITIVE_INFINITY, bikeEncoder.getTurnCost(flags310), 0); long flags024 = tcs.getTurnCostFlags(edge02, 2, edge24); assertEquals(0.0, carEncoder.getTurnCost(flags024), 0); assertEquals(Double.POSITIVE_INFINITY, bikeEncoder.getTurnCost(flags024), 0); long flags023 = tcs.getTurnCostFlags(edge02, 2, edge23); assertEquals(Double.POSITIVE_INFINITY, carEncoder.getTurnCost(flags023), 0); assertEquals(Double.POSITIVE_INFINITY, bikeEncoder.getTurnCost(flags023), 0); flags023 = tcs.getTurnCostFlags(edge02, 2, edge23); assertEquals(0, carEncoder.getTurnCost(flags023), 0); assertEquals(Double.POSITIVE_INFINITY, bikeEncoder.getTurnCost(flags023), 0); flags023 = tcs.getTurnCostFlags(edge02, 2, edge23); assertEquals(0, carEncoder.getTurnCost(flags023), 0); assertEquals(0, bikeEncoder.getTurnCost(flags023), 0);
@Test public void testMergeFlagsBeforeAdding() { FlagEncoder carEncoder = new CarFlagEncoder(5, 5, 3); FlagEncoder bikeEncoder = new BikeFlagEncoder(5, 5, 3); EncodingManager manager = new EncodingManager(carEncoder, bikeEncoder); GraphHopperStorage g = new GraphBuilder(manager).create(); initGraph(g); TurnCostExtension tcs = (TurnCostExtension) g.getExtension(); long carRestricted = carEncoder.getTurnFlags(true, 0); long bikeRestricted = bikeEncoder.getTurnFlags(true, 0); int edge23 = getEdge(g, 2, 3).getEdge(); int edge02 = getEdge(g, 0, 2).getEdge(); tcs.addTurnInfo(edge02, 2, edge23, carRestricted | bikeRestricted); long flags023 = tcs.getTurnCostFlags(edge02, 2, edge23); assertEquals(Double.POSITIVE_INFINITY, carEncoder.getTurnCost(flags023), 0); assertEquals(Double.POSITIVE_INFINITY, bikeEncoder.getTurnCost(flags023), 0); } }
assertEquals("named street2", graph.getEdgeIteratorState(iter2.getEdge(), iter2.getAdjNode()).getName()); assertEquals(1337, turnCostStorage.getTurnCostFlags(iter1.getEdge(), 0, iter2.getEdge())); assertEquals(666, turnCostStorage.getTurnCostFlags(iter2.getEdge(), 0, iter1.getEdge())); assertEquals(815, turnCostStorage.getTurnCostFlags(iter1.getEdge(), 1, iter2.getEdge())); assertEquals(0, turnCostStorage.getTurnCostFlags(iter1.getEdge(), 3, iter2.getEdge()));
public double calcTurnWeight( int edgeFrom, int nodeVia, int edgeTo ) { long turnFlags = turnCostExt.getTurnCostFlags(edgeFrom, nodeVia, edgeTo); if (turnCostEncoder.isTurnRestricted(turnFlags)) return Double.POSITIVE_INFINITY; return turnCostEncoder.getTurnCost(turnFlags); }
/** * This method calculates the turn weight separately. */ public double calcTurnWeight(int edgeFrom, int nodeVia, int edgeTo) { long turnFlags = turnCostExt.getTurnCostFlags(edgeFrom, nodeVia, edgeTo); if (turnCostEncoder.isTurnRestricted(turnFlags)) return Double.POSITIVE_INFINITY; return turnCostEncoder.getTurnCost(turnFlags); }
/** * This method calculates the turn weight separately. */ public double calcTurnWeight(int edgeFrom, int nodeVia, int edgeTo) { long turnFlags = turnCostExt.getTurnCostFlags(edgeFrom, nodeVia, edgeTo); if (turnCostEncoder.isTurnRestricted(turnFlags)) return Double.POSITIVE_INFINITY; return turnCostEncoder.getTurnCost(turnFlags); }
@Override public long getTurnCostFlags(int edgeFrom, int nodeVia, int edgeTo) { if (isVirtualNode(nodeVia)) { return 0; } else if (isVirtualEdge(edgeFrom) || isVirtualEdge(edgeTo)) { if (isVirtualEdge(edgeFrom)) { edgeFrom = queryResults.get((edgeFrom - mainEdges) / 4).getClosestEdge().getEdge(); } if (isVirtualEdge(edgeTo)) { edgeTo = queryResults.get((edgeTo - mainEdges) / 4).getClosestEdge().getEdge(); } return mainTurnExtension.getTurnCostFlags(edgeFrom, nodeVia, edgeTo); } else { return mainTurnExtension.getTurnCostFlags(edgeFrom, nodeVia, edgeTo); } } }
@Override public long getTurnCostFlags(int edgeFrom, int nodeVia, int edgeTo) { if (isVirtualNode(nodeVia)) { return 0; } else if (isVirtualEdge(edgeFrom) || isVirtualEdge(edgeTo)) { if (isVirtualEdge(edgeFrom)) { edgeFrom = queryResults.get((edgeFrom - mainEdges) / 4).getClosestEdge().getEdge(); } if (isVirtualEdge(edgeTo)) { edgeTo = queryResults.get((edgeTo - mainEdges) / 4).getClosestEdge().getEdge(); } return mainTurnExtension.getTurnCostFlags(edgeFrom, nodeVia, edgeTo); } else { return mainTurnExtension.getTurnCostFlags(edgeFrom, nodeVia, edgeTo); } } }
@Override public long getTurnCostFlags( int edgeFrom, int nodeVia, int edgeTo ) { if (isVirtualNode(nodeVia)) { return 0; } else if (isVirtualEdge(edgeFrom) || isVirtualEdge(edgeTo)) { if (isVirtualEdge(edgeFrom)) { edgeFrom = queryResults.get((edgeFrom - mainEdges) / 4).getClosestEdge().getEdge(); } if (isVirtualEdge(edgeTo)) { edgeTo = queryResults.get((edgeTo - mainEdges) / 4).getClosestEdge().getEdge(); } return mainTurnExtension.getTurnCostFlags(edgeFrom, nodeVia, edgeTo); } else { return mainTurnExtension.getTurnCostFlags(edgeFrom, nodeVia, edgeTo); } } }