/** * @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); }
@Override protected BikeCommonFlagEncoder createBikeEncoder() { return (BikeCommonFlagEncoder) new EncodingManager("bike,racingbike").getEncoder("racingbike"); }
if (!encodingManager.supports(vehicle)) throw new IllegalArgumentException("vehicle not supported:" + vehicle); FlagEncoder encoder = encodingManager.getEncoder(vehicle); EdgeFilter edgeFilter = DefaultEdgeFilter.allEdges(encoder); LocationIndex locationIndex = graphHopper.getLocationIndex();
/** * 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; }
@Test public void testEncoderAcceptNoException() { EncodingManager manager = new EncodingManager("car"); assertTrue(manager.supports("car")); assertFalse(manager.supports("foot")); }
@Test public void testRegisterOnlyOnceAllowed() { CarFlagEncoder instance = new CarFlagEncoder(10, 0.5, 0); EncodingManager tmpEM = new EncodingManager(instance); try { tmpEM = new EncodingManager(instance); assertTrue(false); } catch (IllegalStateException ex) { } }
@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)); }
/** * @return true if the specified encoder is found */ public boolean supports(String encoder) { return getEncoder(encoder, false) != null; }
@Test public void testCompatibilityBug() { EncodingManager manager2 = new EncodingManager(FlagEncoderFactory.DEFAULT, "bike2", 8); ReaderWay osmWay = new ReaderWay(1); osmWay.setTag("highway", "footway"); osmWay.setTag("name", "test"); BikeFlagEncoder singleBikeEnc = (BikeFlagEncoder) manager2.getEncoder("bike2"); long flags = manager2.handleWayTags(osmWay, singleBikeEnc.acceptBit, 0); double singleSpeed = singleBikeEnc.getSpeed(flags); assertEquals(4, singleSpeed, 1e-3); assertEquals(singleSpeed, singleBikeEnc.getReverseSpeed(flags), 1e-3); EncodingManager manager = new EncodingManager(FlagEncoderFactory.DEFAULT, "bike2,bike,foot", 8); FootFlagEncoder foot = (FootFlagEncoder) manager.getEncoder("foot"); BikeFlagEncoder bike = (BikeFlagEncoder) manager.getEncoder("bike2"); long acceptBits = foot.acceptBit | bike.acceptBit; flags = manager.handleWayTags(osmWay, acceptBits, 0); assertEquals(singleSpeed, bike.getSpeed(flags), 1e-2); assertEquals(singleSpeed, bike.getReverseSpeed(flags), 1e-2); assertEquals(5, foot.getSpeed(flags), 1e-2); assertEquals(5, foot.getReverseSpeed(flags), 1e-2); }
long includeWay = encodingManager.acceptWay(way); if (includeWay == 0) return; long wayFlags = encodingManager.handleWayTags(way, includeWay, relationFlags); if (wayFlags == 0) return; encodingManager.applyWayTags(way, edge);
@Test public void testMixBikeTypesAndRelationCombination() { ReaderWay osmWay = new ReaderWay(1); osmWay.setTag("highway", "track"); osmWay.setTag("tracktype", "grade1"); ReaderRelation osmRel = new ReaderRelation(1); BikeFlagEncoder bikeEncoder = new BikeFlagEncoder(); MountainBikeFlagEncoder mtbEncoder = new MountainBikeFlagEncoder(); EncodingManager manager = new EncodingManager(bikeEncoder, mtbEncoder); // relation code for network rcn is VERY_NICE for bike and PREFER for mountainbike osmRel.setTag("route", "bicycle"); osmRel.setTag("network", "rcn"); long relFlags = manager.handleRelationTags(osmRel, 0); long allow = bikeEncoder.acceptBit | mtbEncoder.acceptBit; long flags = manager.handleWayTags(osmWay, allow, relFlags); // bike: uninfluenced speed for grade but via network => VERY_NICE // mtb: uninfluenced speed only PREFER assertTrue(bikeEncoder.getDouble(flags, PriorityWeighting.KEY) > mtbEncoder.getDouble(flags, PriorityWeighting.KEY)); }
readLock.lock(); try { if (!encodingManager.supports(vehicle)) throw new IllegalArgumentException("Vehicle not supported: " + vehicle + ". Supported are: " + encodingManager.toString()); tMode = hints.getBool(Routing.EDGE_BASED, false) ? TraversalMode.EDGE_BASED_2DIR : TraversalMode.NODE_BASED; FlagEncoder encoder = encodingManager.getEncoder(vehicle);
@Test public void testCombination() { ReaderWay way = new ReaderWay(123); way.setTag("highway", "cycleway"); way.setTag("sac_scale", "hiking"); long flags = em.acceptWay(way); long edgeFlags = em.handleWayTags(way, flags, 0); assertFalse(encoder.isBackward(edgeFlags)); assertFalse(encoder.isForward(edgeFlags)); assertTrue(em.getEncoder("bike").isBackward(edgeFlags)); assertTrue(em.getEncoder("bike").isForward(edgeFlags)); }
private Graph generatePathDetailsGraph() { final Graph g = new GraphBuilder(carManager).create(); final NodeAccess na = g.getNodeAccess(); na.setNode(1, 52.514, 13.348); na.setNode(2, 52.514, 13.349); na.setNode(3, 52.514, 13.350); na.setNode(4, 52.515, 13.349); na.setNode(5, 52.516, 13.3452); ReaderWay w = new ReaderWay(1); w.setTag("highway", "tertiary"); w.setTag("maxspeed", "50"); EdgeIteratorState tmpEdge; tmpEdge = g.edge(1, 2, 5, true).setName("1-2"); tmpEdge.setFlags(carManager.handleWayTags(w, carManager.acceptWay(w), 0)); tmpEdge = g.edge(4, 5, 5, true).setName("4-5"); tmpEdge.setFlags(carManager.handleWayTags(w, carManager.acceptWay(w), 0)); w.setTag("maxspeed", "100"); tmpEdge = g.edge(2, 3, 5, true).setName("2-3"); tmpEdge.setFlags(carManager.handleWayTags(w, carManager.acceptWay(w), 0)); w.setTag("maxspeed", "10"); tmpEdge = g.edge(3, 4, 10, true).setName("3-4"); tmpEdge.setFlags(carManager.handleWayTags(w, carManager.acceptWay(w), 0)); return g; }
@Override public boolean loadExisting() { baseGraph.checkInit(); if (properties.loadExisting()) { properties.checkVersions(false); // check encoding for compatibility String flagEncodersStr = properties.get("graph.flag_encoders"); if (!flagEncodersStr.isEmpty() && !encodingManager.toDetailsString().equalsIgnoreCase(flagEncodersStr)) { throw new IllegalStateException("Encoding does not match:" + "\nGraphhopper config: " + encodingManager.toDetailsString() + "\nGraph: " + flagEncodersStr + "\nChange configuration to match the graph or delete " + dir.getLocation()); } String byteOrder = properties.get("graph.byte_order"); if (!byteOrder.equalsIgnoreCase("" + dir.getByteOrder())) throw new IllegalStateException("Configured graph.byte_order (" + dir.getByteOrder() + ") is not equal to loaded " + byteOrder + ""); String bytesForFlags = properties.get("graph.bytes_for_flags"); if (!bytesForFlags.equalsIgnoreCase("" + encodingManager.getBytesForFlags())) throw new IllegalStateException("Configured graph.bytes_for_flags (" + encodingManager.getBytesForFlags() + ") is not equal to loaded " + bytesForFlags); String dim = properties.get("graph.dimension"); baseGraph.loadExisting(dim); checkIfConfiguredAndLoadedWeightingsCompatible(); for (CHGraphImpl cg : chGraphs) { if (!cg.loadExisting()) throw new IllegalStateException("Cannot load " + cg); } return true; } return false; }
EncodingManager subject = new EncodingManager(encoder); assertEquals("new_encoder|my_properties|version=10", subject.toDetailsString());
/** * Filter ways but do not analyze properties wayNodes will be filled with participating node * ids. * <p> * * @return true the current xml entry is a way entry and has nodes */ boolean filterWay(ReaderWay item) { // ignore broken geometry if (item.getNodes().size() < 2) return false; // ignore multipolygon geometry if (!item.hasTags()) return false; return encodingManager.acceptWay(item) > 0; }
public void applyWayTags(ReaderWay way, EdgeIteratorState edge) { // storing the road name does not yet depend on the flagEncoder so manage it directly if (enableInstructions) { // String wayInfo = carFlagEncoder.getWayInfo(way); // http://wiki.openstreetmap.org/wiki/Key:name String name = ""; if (!preferredLanguage.isEmpty()) name = fixWayName(way.getTag("name:" + preferredLanguage)); if (name.isEmpty()) name = fixWayName(way.getTag("name")); // http://wiki.openstreetmap.org/wiki/Key:ref String refName = fixWayName(way.getTag("ref")); if (!refName.isEmpty()) { if (name.isEmpty()) name = refName; else name += ", " + refName; } edge.setName(name); } for (AbstractFlagEncoder encoder : edgeEncoders) { encoder.applyWayTags(way, edge); } }
private FlagEncoder getEncoder(String name, boolean throwExc) { for (FlagEncoder encoder : edgeEncoders) { if (name.equalsIgnoreCase(encoder.toString())) return encoder; } if (throwExc) throw new IllegalArgumentException("Encoder for " + name + " not found. Existing: " + toDetailsString()); return null; }
void prepareWaysWithRelationInfo(ReaderRelation osmRelation) { // is there at least one tag interesting for the registed encoders? if (encodingManager.handleRelationTags(osmRelation, 0) == 0) return; for (ReaderRelation.Member member : osmRelation.getMembers()) { if (member.getType() != ReaderRelation.Member.WAY) continue; long osmId = member.getRef(); long oldRelationFlags = getRelFlagsMap().get(osmId); // Check if our new relation data is better comparated to the the last one long newRelationFlags = encodingManager.handleRelationTags(osmRelation, oldRelationFlags); if (oldRelationFlags != newRelationFlags) getRelFlagsMap().put(osmId, newRelationFlags); } }