/** * @return true if the specified encoder is found */ public boolean supports(String encoder) { return getEncoder(encoder, false) != null; }
public FlagEncoder getEncoder(String name) { return getEncoder(name, true); }
@Override protected BikeCommonFlagEncoder createBikeEncoder() { return (BikeCommonFlagEncoder) em.getEncoder("bike2"); }
public GraphHopperGtfs(PtFlagEncoder flagEncoder, TranslationMap translationMap, GraphHopperStorage graphHopperStorage, LocationIndex locationIndex, GtfsStorage gtfsStorage, RealtimeFeed realtimeFeed) { this.flagEncoder = flagEncoder; this.accessEgressWeighting = new FastestWeighting(graphHopperStorage.getEncodingManager().getEncoder("foot")); this.translationMap = translationMap; this.graphHopperStorage = graphHopperStorage; this.locationIndex = locationIndex; this.gtfsStorage = gtfsStorage; this.realtimeFeed = realtimeFeed; this.tripFromLabel = new TripFromLabel(this.gtfsStorage, this.realtimeFeed); }
@Before public void setUp() { carEncoder = encodingManager.getEncoder("car"); footEncoder = encodingManager.getEncoder("foot"); defaultOpts = createAlgoOptions(); }
@Override protected BikeCommonFlagEncoder createBikeEncoder() { return (BikeCommonFlagEncoder) new EncodingManager("bike,racingbike").getEncoder("racingbike"); }
@Override protected BikeCommonFlagEncoder createBikeEncoder() { return (BikeCommonFlagEncoder) new EncodingManager("bike,mtb").getEncoder("bike"); }
@Override protected BikeCommonFlagEncoder createBikeEncoder() { return (BikeCommonFlagEncoder) new EncodingManager("bike,mtb").getEncoder("mtb"); }
public static LocationIndex createOrLoadIndex(GHDirectory directory, GraphHopperStorage graphHopperStorage) { final EdgeFilter filter = DefaultEdgeFilter.allEdges(graphHopperStorage.getEncodingManager().getEncoder("foot")); Graph walkNetwork = GraphSupport.filteredView(graphHopperStorage, filter); LocationIndex locationIndex = new LocationIndexTree(walkNetwork, directory); if (!locationIndex.loadExisting()) { locationIndex.prepareIndex(); } return locationIndex; }
public void testFullBitMask() { BitUtil bitUtil = BitUtil.LITTLE; EncodingManager manager = new EncodingManager("car,foot"); AbstractFlagEncoder carr = (AbstractFlagEncoder) manager.getEncoder("car"); assertTrue(bitUtil.toBitString(carr.getNodeBitMask()).endsWith("00000000001111111")); AbstractFlagEncoder foot = (AbstractFlagEncoder) manager.getEncoder("foot"); assertTrue(bitUtil.toBitString(foot.getNodeBitMask()).endsWith("00011111110000000")); }
@Test public void testSupportFords() { // 1) no encoder crossing fords String flagEncodersStr = "car,bike,foot"; EncodingManager manager = new EncodingManager(FlagEncoderFactory.DEFAULT, flagEncodersStr, 8); assertTrue(((AbstractFlagEncoder) manager.getEncoder("car")).isBlockFords()); assertTrue(((AbstractFlagEncoder) manager.getEncoder("bike")).isBlockFords()); assertTrue(((AbstractFlagEncoder) manager.getEncoder("foot")).isBlockFords()); // 2) two encoders crossing fords flagEncodersStr = "car,bike|block_fords=false,foot|block_fords=false"; manager = new EncodingManager(FlagEncoderFactory.DEFAULT, flagEncodersStr, 8); assertTrue(((AbstractFlagEncoder) manager.getEncoder("car")).isBlockFords()); assertFalse(((AbstractFlagEncoder) manager.getEncoder("bike")).isBlockFords()); assertFalse(((AbstractFlagEncoder) manager.getEncoder("foot")).isBlockFords()); // 2) Try combined with another tag flagEncodersStr = "car|turn_costs=true|block_fords=true,bike,foot|block_fords=false"; manager = new EncodingManager(FlagEncoderFactory.DEFAULT, flagEncodersStr, 8); assertTrue(((AbstractFlagEncoder) manager.getEncoder("car")).isBlockFords()); assertTrue(((AbstractFlagEncoder) manager.getEncoder("bike")).isBlockFords()); assertFalse(((AbstractFlagEncoder) manager.getEncoder("foot")).isBlockFords()); } }
private QueryResult findClosest(GHPoint point, int indexForErrorMessage) { final EdgeFilter filter = DefaultEdgeFilter.allEdges(graphHopperStorage.getEncodingManager().getEncoder("foot")); QueryResult source = locationIndex.findClosest(point.lat, point.lon, filter); if (!source.isValid()) { throw new PointNotFoundException("Cannot find point: " + point, indexForErrorMessage); } if (flagEncoder.getEdgeType(source.getClosestEdge().getFlags()) != GtfsStorage.EdgeType.HIGHWAY) { throw new RuntimeException(flagEncoder.getEdgeType(source.getClosestEdge().getFlags()).name()); } return source; }
private void interpolateBridgesAndOrTunnels() { if (ghStorage.getEncodingManager().supports("generic")) { final FlagEncoder genericFlagEncoder = ghStorage.getEncodingManager() .getEncoder("generic"); if (!(genericFlagEncoder instanceof DataFlagEncoder)) { throw new IllegalStateException("'generic' flag encoder for elevation interpolation of " + "bridges and tunnels is enabled but does not have the expected type " + DataFlagEncoder.class.getName() + "."); } final DataFlagEncoder dataFlagEncoder = (DataFlagEncoder) genericFlagEncoder; StopWatch sw = new StopWatch().start(); new TunnelElevationInterpolator(ghStorage, dataFlagEncoder).execute(); float tunnel = sw.stop().getSeconds(); sw = new StopWatch().start(); new BridgeElevationInterpolator(ghStorage, dataFlagEncoder).execute(); logger.info("Bridge interpolation " + (int) sw.stop().getSeconds() + "s, " + "tunnel interpolation " + (int) tunnel + "s"); } }
@Override GraphHopperStorage createGHStorage(Directory dir, EncodingManager encodingManager, boolean is3D) { return new GraphHopperStorage(Arrays.asList(new FastestWeighting(encodingManager.getEncoder("car"))), dir, encodingManager, is3D, new GraphExtension.NoOpExtension()). create(100); }
void connectStopsToStreetNetwork() { FlagEncoder footEncoder = ((GraphHopperStorage) graph).getEncodingManager().getEncoder("foot"); final EdgeFilter filter = DefaultEdgeFilter.allEdges(footEncoder); for (Stop stop : feed.stops.values()) { if (stop.location_type == 0) { // Only stops. Not interested in parent stations for now. QueryResult locationQueryResult = walkNetworkIndex.findClosest(stop.stop_lat, stop.stop_lon, filter); int streetNode; if (!locationQueryResult.isValid()) { streetNode = i++; nodeAccess.setNode(streetNode, stop.stop_lat, stop.stop_lon); EdgeIteratorState edge = graph.edge(streetNode, streetNode); edge.setFlags(encoder.setAccess(edge.getFlags(), true, false)); edge.setFlags(footEncoder.setAccess(edge.getFlags(), true, false)); edge.setFlags(footEncoder.setSpeed(edge.getFlags(), 5.0)); } else { streetNode = locationQueryResult.getClosestNode(); } gtfsStorage.getStationNodes().put(stop.stop_id, streetNode); } } }
@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)); }
@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); }
@Test public void testDifferentVehicles() { final EncodingManager encodingManager = new EncodingManager("car,foot"); Graph g = AbstractLocationIndexTester.this.createGHStorage(encodingManager); initSimpleGraph(g); idx = createIndex(g, -1); assertEquals(1, findID(idx, 1, -1)); // now make all edges from node 1 accessible for CAR only EdgeIterator iter = g.createEdgeExplorer().setBaseNode(1); CarFlagEncoder carEncoder = (CarFlagEncoder) encodingManager.getEncoder("car"); while (iter.next()) { iter.setFlags(carEncoder.setProperties(50, true, true)); } idx.close(); idx = createIndex(g, -1); FootFlagEncoder footEncoder = (FootFlagEncoder) encodingManager.getEncoder("foot"); assertEquals(2, idx.findClosest(1, -1, DefaultEdgeFilter.allEdges(footEncoder)).getClosestNode()); Helper.close((Closeable) g); } }
@Test public void testCombined() { FlagEncoder carEncoder = encodingManager.getEncoder("car"); long fl = footEncoder.setProperties(10, true, true) | carEncoder.setProperties(100, true, false); assertEquals(10, footEncoder.getSpeed(fl), 1e-1); assertTrue(footEncoder.isForward(fl)); assertTrue(footEncoder.isBackward(fl)); assertEquals(100, carEncoder.getSpeed(fl), 1e-1); assertTrue(carEncoder.isForward(fl)); assertFalse(carEncoder.isBackward(fl)); assertEquals(0, carEncoder.getSpeed(footEncoder.setProperties(10, true, true)), 1e-1); }
@Test public void testDFS2() { DepthFirstSearch dfs = new DepthFirstSearch() { @Override public boolean goFurther(int v) { counter++; assertTrue("v " + v + " is already contained in set. iteration:" + counter, !set.contains(v)); set.add(v); list.add(v); return super.goFurther(v); } }; EncodingManager em = new EncodingManager("car"); FlagEncoder fe = em.getEncoder("car"); Graph g = new GraphBuilder(em).create(); g.edge(1, 2, 1, false); g.edge(1, 4, 1, true); g.edge(1, 3, 1, false); g.edge(2, 3, 1, false); g.edge(4, 3, 1, true); dfs.start(g.createEdgeExplorer(DefaultEdgeFilter.outEdges(fe)), 1); assertTrue(counter > 0); assertEquals("[1, 2, 3, 4]", list.toString()); }