/** * @return the first flag encoder of the encoding manager */ FlagEncoder getDefaultVehicle() { if (encodingManager == null) throw new IllegalStateException("No encoding manager specified or loaded"); return encodingManager.fetchEdgeEncoders().get(0); }
public Collection<TurnCostTableEntry> analyzeTurnRelation(OSMTurnRelation turnRelation) { Map<Long, TurnCostTableEntry> entries = new LinkedHashMap<>(); for (FlagEncoder encoder : encodingManager.fetchEdgeEncoders()) { for (TurnCostTableEntry entry : analyzeTurnRelation(encoder, turnRelation)) { TurnCostTableEntry oldEntry = entries.get(entry.getItemId()); if (oldEntry != null) { // merging different encoders oldEntry.flags |= entry.flags; } else { entries.put(entry.getItemId(), entry); } } } return entries.values(); }
/** * This method applies changes to the graph, specified by the json features. * * @return number of successfully applied edge changes */ public long applyChanges(EncodingManager em, Collection<JsonFeature> features) { if (em == null) throw new NullPointerException("EncodingManager cannot be null to change existing graph"); long updates = 0; for (JsonFeature jsonFeature : features) { if (!jsonFeature.hasProperties()) throw new IllegalArgumentException("One feature has no properties, please specify properties e.g. speed or access"); List<String> encodersAsStr = (List) jsonFeature.getProperty("vehicles"); if (encodersAsStr == null) { for (FlagEncoder encoder : em.fetchEdgeEncoders()) { updates += applyChange(jsonFeature, encoder); } } else { for (String encoderStr : encodersAsStr) { updates += applyChange(jsonFeature, em.getEncoder(encoderStr)); } } } return updates; }
private void initLMAlgoFactoryDecorator() { if (lmFactoryDecorator.hasWeightings()) return; for (FlagEncoder encoder : encodingManager.fetchEdgeEncoders()) { for (String lmWeightingStr : lmFactoryDecorator.getWeightingsAsStrings()) { Weighting weighting = createWeighting(new HintsMap(lmWeightingStr), encoder, null); lmFactoryDecorator.addWeighting(weighting); } } }
private void initCHAlgoFactoryDecorator() { if (!chFactoryDecorator.hasWeightings()) { for (FlagEncoder encoder : encodingManager.fetchEdgeEncoders()) { for (String chWeightingStr : chFactoryDecorator.getWeightingsAsStrings()) { // ghStorage is null at this point Weighting weighting = createWeighting(new HintsMap(chWeightingStr), encoder, null); chFactoryDecorator.addWeighting(weighting); } } } }
public void inverse3to9() { for (FlagEncoder encoder : mixedEncoders.fetchEdgeEncoders()) { long flags = edge3to9.getFlags(); edge3to9.setFlags(encoder.setAccess(flags, !edge3to9.isForward(encoder), false)); } }
public void inverse3to6() { for (FlagEncoder encoder : mixedEncoders.fetchEdgeEncoders()) { long flags = edge3to6.getFlags(); edge3to6.setFlags(encoder.setAccess(flags, !edge3to6.isForward(encoder), true)); } }
/** * Internal method to clean up the graph. */ protected void cleanUp() { int prevNodeCount = ghStorage.getNodes(); PrepareRoutingSubnetworks preparation = new PrepareRoutingSubnetworks(ghStorage, encodingManager.fetchEdgeEncoders()); preparation.setMinNetworkSize(minNetworkSize); preparation.setMinOneWayNetworkSize(minOneWayNetworkSize); preparation.doWork(); int currNodeCount = ghStorage.getNodes(); logger.info("edges: " + Helper.nf(ghStorage.getAllEdges().length()) + ", nodes " + Helper.nf(currNodeCount) + ", there were " + Helper.nf(preparation.getMaxSubnetworks()) + " subnetworks. removed them => " + Helper.nf(prevNodeCount - currNodeCount) + " less nodes"); }
public void setRoundabout(boolean clockwise) { for (FlagEncoder encoder : mixedEncoders.fetchEdgeEncoders()) { for (EdgeIteratorState edge : roundaboutEdges) { edge.setFlags(encoder.setAccess(edge.getFlags(), clockwise, !clockwise)); edge.setFlags(encoder.setBool(edge.getFlags(), FlagEncoder.K_ROUNDABOUT, true)); } } this.clockwise = clockwise; }
@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 testRemoveNode() { FlagEncoder carEncoder = new CarFlagEncoder(); BikeFlagEncoder bikeEncoder = new BikeFlagEncoder(); EncodingManager em2 = new EncodingManager(carEncoder, bikeEncoder); GraphHopperStorage g = createSubnetworkTestStorage2(em2); PrepareRoutingSubnetworks instance = new PrepareRoutingSubnetworks(g, em2.fetchEdgeEncoders()); EdgeExplorer edgeExplorer = g.createEdgeExplorer(); assertFalse(instance.detectNodeRemovedForAllEncoders(edgeExplorer, 4)); assertFalse(instance.detectNodeRemovedForAllEncoders(edgeExplorer, 5)); assertFalse(instance.detectNodeRemovedForAllEncoders(edgeExplorer, 6)); // mark certain edges inaccessible for all encoders for (EdgeIteratorState edge : Arrays.asList(GHUtility.getEdge(g, 5, 6), GHUtility.getEdge(g, 4, 5), GHUtility.getEdge(g, 4, 6))) { for (FlagEncoder encoders : em2.fetchEdgeEncoders()) { edge.setFlags(encoders.setAccess(0, false, false)); } } assertTrue(instance.detectNodeRemovedForAllEncoders(edgeExplorer, 4)); assertTrue(instance.detectNodeRemovedForAllEncoders(edgeExplorer, 5)); assertTrue(instance.detectNodeRemovedForAllEncoders(edgeExplorer, 6)); }
EncodingManager em = hopper.getEncodingManager(); assertNotNull(em); assertEquals(1, em.fetchEdgeEncoders().size()); assertEquals(16, hopper.getLMFactoryDecorator().getLandmarks()); assertEquals(1, em.fetchEdgeEncoders().size()); assertEquals(16, hopper.getLMFactoryDecorator().getLandmarks());
for (FlagEncoder encoder : mixedEncoders.fetchEdgeEncoders()) { Path p = new Dijkstra(roundaboutGraph.g, new ShortestWeighting(encoder), TraversalMode.NODE_BASED) .calcPath(1, 8);
@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()); }
EncodingManager em = hopper.getEncodingManager(); assertNotNull(em); assertEquals(1, em.fetchEdgeEncoders().size()); FlagEncoder flagEncoder = em.fetchEdgeEncoders().get(0); assertTrue(flagEncoder instanceof DataFlagEncoder);
/** * @return the first flag encoder of the encoding manager */ FlagEncoder getDefaultVehicle() { if (encodingManager == null) throw new IllegalStateException("No encoding manager specified or loaded"); return encodingManager.fetchEdgeEncoders().get(0); }
private void initCHAlgoFactoryDecorator() { if (!chFactoryDecorator.hasWeightings()) for (FlagEncoder encoder : encodingManager.fetchEdgeEncoders()) { for (String chWeightingStr : chFactoryDecorator.getWeightingsAsStrings()) { Weighting weighting = createWeighting(new HintsMap(chWeightingStr), encoder); chFactoryDecorator.addWeighting(weighting); } } }
private void initCHAlgoFactoryDecorator() { if (!chFactoryDecorator.hasWeightings()) { for (FlagEncoder encoder : encodingManager.fetchEdgeEncoders()) { for (String chWeightingStr : chFactoryDecorator.getWeightingsAsStrings()) { Weighting weighting = createWeighting(new HintsMap(chWeightingStr), encoder, null); chFactoryDecorator.addWeighting(weighting); } } } }
private void initLMAlgoFactoryDecorator() { if (lmFactoryDecorator.hasWeightings()) return; for (FlagEncoder encoder : encodingManager.fetchEdgeEncoders()) { for (String lmWeightingStr : lmFactoryDecorator.getWeightingsAsStrings()) { Weighting weighting = createWeighting(new HintsMap(lmWeightingStr), encoder, null); lmFactoryDecorator.addWeighting(weighting); } } }
private void initLMAlgoFactoryDecorator() { if (lmFactoryDecorator.hasWeightings()) return; for (FlagEncoder encoder : encodingManager.fetchEdgeEncoders()) { for (String lmWeightingStr : lmFactoryDecorator.getWeightingsAsStrings()) { Weighting weighting = createWeighting(new HintsMap(lmWeightingStr), encoder, null); lmFactoryDecorator.addWeighting(weighting); } } }