@Override public List<QueryResult> lookup(List<GHPoint> points, FlagEncoder encoder) { if (points.size() < 2) throw new IllegalArgumentException("At least 2 points have to be specified, but was:" + points.size()); EdgeFilter edgeFilter = DefaultEdgeFilter.allEdges(encoder); queryResults = new ArrayList<>(points.size()); for (int placeIndex = 0; placeIndex < points.size(); placeIndex++) { GHPoint point = points.get(placeIndex); QueryResult qr = null; if (ghRequest.hasPointHints()) qr = locationIndex.findClosest(point.lat, point.lon, new NameSimilarityEdgeFilter(edgeFilter, ghRequest.getPointHints().get(placeIndex))); if (qr == null || !qr.isValid()) qr = locationIndex.findClosest(point.lat, point.lon, edgeFilter); if (!qr.isValid()) ghResponse.addError(new PointNotFoundException("Cannot find point " + placeIndex + ": " + point, placeIndex)); queryResults.add(qr); } return queryResults; }
@Override public void initFromGraph() { super.initFromGraph(); ignoreNodeFilter = new IgnoreNodeFilter(prepareGraph, maxLevel); final EdgeFilter allFilter = DefaultEdgeFilter.allEdges(encoder); final EdgeFilter remainingNodesFilter = new LevelEdgeFilter(prepareGraph) { @Override public final boolean accept(EdgeIteratorState edgeState) { return super.accept(edgeState) && allFilter.accept(edgeState); } }; remainingEdgeExplorer = prepareGraph.createEdgeExplorer(remainingNodesFilter); prepareAlgo = new DijkstraOneToMany(prepareGraph, prepareWeighting, TraversalMode.NODE_BASED); }
@Override public List<QueryResult> lookup(List<GHPoint> points, FlagEncoder encoder) { if (points.size() != 1 || ghRequest.getPoints().size() != 1) throw new IllegalArgumentException("For round trip calculation exactly one point is required"); final double distanceInMeter = ghRequest.getHints().getDouble(RoundTrip.DISTANCE, 10000); final long seed = ghRequest.getHints().getLong(RoundTrip.SEED, 0L); double initialHeading = ghRequest.getFavoredHeading(0); final int roundTripPointCount = Math.min(20, ghRequest.getHints().getInt(RoundTrip.POINTS, 2 + (int) (distanceInMeter / 50000))); final GHPoint start = points.get(0); TourStrategy strategy = new MultiPointTour(new Random(seed), distanceInMeter, roundTripPointCount, initialHeading); queryResults = new ArrayList<>(2 + strategy.getNumberOfGeneratedPoints()); EdgeFilter edgeFilter = DefaultEdgeFilter.allEdges(encoder); QueryResult startQR = locationIndex.findClosest(start.lat, start.lon, edgeFilter); if (!startQR.isValid()) throw new PointNotFoundException("Cannot find point 0: " + start, 0); queryResults.add(startQR); GHPoint last = start; for (int i = 0; i < strategy.getNumberOfGeneratedPoints(); i++) { double heading = strategy.getHeadingForIteration(i); QueryResult result = generateValidPoint(last, strategy.getDistanceForIteration(i), heading, edgeFilter); if (result == null) { ghResponse.addError(new IllegalStateException("Could not find a valid point after " + maxRetries + " tries, for the point:" + last)); return Collections.emptyList(); } last = result.getSnappedPoint(); queryResults.add(result); } queryResults.add(startQR); return queryResults; }
public InstructionsFromEdges(int tmpNode, Graph graph, Weighting weighting, FlagEncoder encoder, NodeAccess nodeAccess, Translation tr, InstructionList ways) { this.weighting = weighting; this.encoder = encoder; this.nodeAccess = nodeAccess; this.tr = tr; this.ways = ways; prevLat = this.nodeAccess.getLatitude(tmpNode); prevLon = this.nodeAccess.getLongitude(tmpNode); prevNode = -1; prevInRoundabout = false; prevName = null; outEdgeExplorer = graph.createEdgeExplorer(DefaultEdgeFilter.outEdges(encoder)); crossingExplorer = graph.createEdgeExplorer(DefaultEdgeFilter.allEdges(encoder)); }
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; }
EdgeFilter edgeFilter = DefaultEdgeFilter.allEdges(encoder); LocationIndex locationIndex = graphHopper.getLocationIndex(); QueryResult qr = locationIndex.findClosest(point.lat, point.lon, edgeFilter);
private long applyChange(JsonFeature jsonFeature, FlagEncoder encoder) { long updates = 0; EdgeFilter filter = DefaultEdgeFilter.allEdges(encoder); GHIntHashSet edges = new GHIntHashSet(); if (jsonFeature.hasGeometry()) {
private NameSimilarityEdgeFilter createNameSimilarityEdgeFilter(String s) { return new NameSimilarityEdgeFilter(DefaultEdgeFilter.allEdges(new CarFlagEncoder()), s); }
final EdgeFilter filter = DefaultEdgeFilter.allEdges(graphHopperStorage.getEncodingManager().getEncoder("foot")); QueryResult queryResult = locationIndex.findClosest(source.lat, source.lon, filter); queryGraph.lookup(Collections.singletonList(queryResult));
String blockAreaStr = hintsMap.get(Parameters.Routing.BLOCK_AREA, ""); GraphEdgeIdFinder.BlockArea blockArea = new GraphEdgeIdFinder(graph, locationIndex). parseBlockArea(blockAreaStr, DefaultEdgeFilter.allEdges(encoder), hintsMap.getDouble("block_area.edge_id_max_area", 1000 * 1000)); return new BlockAreaWeighting(weighting, blockArea);
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 initFromGraph() { FlagEncoder prepareFlagEncoder = prepareWeighting.getFlagEncoder(); final EdgeFilter allFilter = DefaultEdgeFilter.allEdges(prepareFlagEncoder); maxLevel = prepareGraph.getNodes(); vehicleAllExplorer = prepareGraph.createEdgeExplorer(allFilter); vehicleAllTmpExplorer = prepareGraph.createEdgeExplorer(allFilter); // Use an alternative to PriorityQueue as it has some advantages: // 1. Gets automatically smaller if less entries are stored => less total RAM used. // Important because Graph is increasing until the end. // 2. is slightly faster // but we need the additional oldPriorities array to keep the old value which is necessary for the update method sortedNodes = new GHTreeMapComposed(); oldPriorities = new float[prepareGraph.getNodes()]; nodeContractor = new NodeBasedNodeContractor(prepareGraph, weighting, pMap); nodeContractor.initFromGraph(); }
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); } } }
GraphEdgeIdFinder.BlockArea blockArea = graphFinder.parseBlockArea("0.01,0.005,1", DefaultEdgeFilter.allEdges(encoder), 1000 * 1000); blockArea = graphFinder.parseBlockArea("0,0,1000", DefaultEdgeFilter.allEdges(encoder), 1000 * 1000); blockedEdges.clear(); assertEquals(blockedEdges, blockArea.blockedEdges);
index.setMaxRegionSearch(8); EdgeFilter carFilter = DefaultEdgeFilter.allEdges(carEncoder); QueryResult qr = index.findClosest(0.03, 0.03, carFilter); assertTrue(qr.isValid()); assertEquals(33, qr.getClosestNode()); EdgeFilter bikeFilter = DefaultEdgeFilter.allEdges(bikeEncoder); qr = index.findClosest(0.03, 0.03, bikeFilter); assertTrue(qr.isValid());
@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()); }
@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); } }
@Override public void initFromGraph() { super.initFromGraph(); ignoreNodeFilter = new IgnoreNodeFilter(prepareGraph, maxLevel); final EdgeFilter allFilter = DefaultEdgeFilter.allEdges(encoder); final EdgeFilter remainingNodesFilter = new LevelEdgeFilter(prepareGraph) { @Override public final boolean accept(EdgeIteratorState edgeState) { return super.accept(edgeState) && allFilter.accept(edgeState); } }; remainingEdgeExplorer = prepareGraph.createEdgeExplorer(remainingNodesFilter); prepareAlgo = new DijkstraOneToMany(prepareGraph, prepareWeighting, TraversalMode.NODE_BASED); }
public InstructionsFromEdges(int tmpNode, Graph graph, Weighting weighting, FlagEncoder encoder, NodeAccess nodeAccess, Translation tr, InstructionList ways) { this.weighting = weighting; this.encoder = encoder; this.nodeAccess = nodeAccess; this.tr = tr; this.ways = ways; prevLat = this.nodeAccess.getLatitude(tmpNode); prevLon = this.nodeAccess.getLongitude(tmpNode); prevNode = -1; prevInRoundabout = false; prevName = null; outEdgeExplorer = graph.createEdgeExplorer(DefaultEdgeFilter.outEdges(encoder)); crossingExplorer = graph.createEdgeExplorer(DefaultEdgeFilter.allEdges(encoder)); }