public static DefaultEdgeFilter outEdges(FlagEncoder flagEncoder) { return new DefaultEdgeFilter(flagEncoder, true, false); }
public static DefaultEdgeFilter inEdges(FlagEncoder flagEncoder) { return new DefaultEdgeFilter(flagEncoder, false, true); }
/** * Accepts all edges that are either forward or backward for the given flag encoder. * Edges where neither one of the flags is enabled will still not be accepted. If you need to retrieve all edges * regardless of their encoding use {@link EdgeFilter#ALL_EDGES} instead. */ public static DefaultEdgeFilter allEdges(FlagEncoder flagEncoder) { return new DefaultEdgeFilter(flagEncoder, true, true); }
public static DefaultEdgeFilter inEdges(FlagEncoder flagEncoder) { return new DefaultEdgeFilter(flagEncoder, false, true); }
/** * Accepts all edges that are either forward or backward for the given flag encoder. * Edges where neither one of the flags is enabled will still not be accepted. If you need to retrieve all edges * regardless of their encoding use {@link EdgeFilter#ALL_EDGES} instead. */ public static DefaultEdgeFilter allEdges(FlagEncoder flagEncoder) { return new DefaultEdgeFilter(flagEncoder, true, true); }
public static DefaultEdgeFilter outEdges(FlagEncoder flagEncoder) { return new DefaultEdgeFilter(flagEncoder, true, false); }
public EdgeExplorer createForwardsEdgeExplorer(Graph graph) { return graph.createEdgeExplorer(new DefaultEdgeFilter(flagEncoder, false, true)); }
public EdgeExplorer createBackwardsEdgeExplorer(Graph graph) { return graph.createEdgeExplorer(new DefaultEdgeFilter(flagEncoder, true, false)); }
public Collection<TurnCostTableEntry> analyzeTurnRelation(FlagEncoder encoder, OSMTurnRelation turnRelation) { if (!encoder.supports(TurnWeighting.class)) return Collections.emptyList(); EdgeExplorer edgeOutExplorer = outExplorerMap.get(encoder); EdgeExplorer edgeInExplorer = inExplorerMap.get(encoder); if (edgeOutExplorer == null || edgeInExplorer == null) { edgeOutExplorer = graph.createEdgeExplorer(new DefaultEdgeFilter(encoder, false, true)); outExplorerMap.put(encoder, edgeOutExplorer); edgeInExplorer = graph.createEdgeExplorer(new DefaultEdgeFilter(encoder, true, false)); inExplorerMap.put(encoder, edgeInExplorer); } return turnRelation.getRestrictionAsEntries(encoder, edgeOutExplorer, edgeInExplorer, this); }
public Collection<TurnCostTableEntry> analyzeTurnRelation(FlagEncoder encoder, OSMTurnRelation turnRelation) { if (!encoder.supports(TurnWeighting.class)) return Collections.emptyList(); EdgeExplorer edgeOutExplorer = outExplorerMap.get(encoder); EdgeExplorer edgeInExplorer = inExplorerMap.get(encoder); if (edgeOutExplorer == null || edgeInExplorer == null) { edgeOutExplorer = graph.createEdgeExplorer(new DefaultEdgeFilter(encoder, false, true)); outExplorerMap.put(encoder, edgeOutExplorer); edgeInExplorer = graph.createEdgeExplorer(new DefaultEdgeFilter(encoder, true, false)); inExplorerMap.put(encoder, edgeInExplorer); } return turnRelation.getRestrictionAsEntries(encoder, edgeOutExplorer, edgeInExplorer, this); }
@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 = new DefaultEdgeFilter(encoder); queryResults = new ArrayList<>(points.size()); for (int placeIndex = 0; placeIndex < points.size(); placeIndex++) { GHPoint point = points.get(placeIndex); QueryResult res = locationIndex.findClosest(point.lat, point.lon, edgeFilter); if (!res.isValid()) ghResponse.addError(new IllegalArgumentException("Cannot find point " + placeIndex + ": " + point)); queryResults.add(res); } return queryResults; }
public Collection<TurnCostTableEntry> analyzeTurnRelation( FlagEncoder encoder, OSMTurnRelation turnRelation ) { if (!encoder.supports(TurnWeighting.class)) return Collections.emptyList(); EdgeExplorer edgeOutExplorer = outExplorerMap.get(encoder); EdgeExplorer edgeInExplorer = inExplorerMap.get(encoder); if (edgeOutExplorer == null || edgeInExplorer == null) { edgeOutExplorer = graph.createEdgeExplorer(new DefaultEdgeFilter(encoder, false, true)); outExplorerMap.put(encoder, edgeOutExplorer); edgeInExplorer = graph.createEdgeExplorer(new DefaultEdgeFilter(encoder, true, false)); inExplorerMap.put(encoder, edgeInExplorer); } return turnRelation.getRestrictionAsEntries(encoder, edgeOutExplorer, edgeInExplorer, this); }
/** * @param graph specifies the graph where this algorithm will run on * @param encoder sets the used vehicle (bike, car, foot) * @param weighting set the used weight calculation (e.g. fastest, shortest). * @param traversalMode how the graph is traversed e.g. if via nodes or edges. */ public AbstractRoutingAlgorithm( Graph graph, FlagEncoder encoder, Weighting weighting, TraversalMode traversalMode ) { this.weighting = weighting; this.flagEncoder = encoder; this.traversalMode = traversalMode; this.graph = graph; this.nodeAccess = graph.getNodeAccess(); outEdgeExplorer = graph.createEdgeExplorer(new DefaultEdgeFilter(flagEncoder, false, true)); inEdgeExplorer = graph.createEdgeExplorer(new DefaultEdgeFilter(flagEncoder, true, false)); }
/** * @param graph specifies the graph where this algorithm will run on * @param weighting set the used weight calculation (e.g. fastest, shortest). * @param traversalMode how the graph is traversed e.g. if via nodes or edges. */ public AbstractRoutingAlgorithm(Graph graph, Weighting weighting, TraversalMode traversalMode) { this.weighting = weighting; this.flagEncoder = weighting.getFlagEncoder(); this.traversalMode = traversalMode; this.graph = graph; this.nodeAccess = graph.getNodeAccess(); outEdgeExplorer = graph.createEdgeExplorer(new DefaultEdgeFilter(flagEncoder, false, true)); inEdgeExplorer = graph.createEdgeExplorer(new DefaultEdgeFilter(flagEncoder, true, false)); }
@Override public void runAlgo() { checkAlreadyRun(); if (ignoreOneways) { outEdgeExplorer = graph.createEdgeExplorer(new DefaultEdgeFilter(encoder, true, true)); } super.runAlgo(); }
@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 = new DefaultEdgeFilter(encoder); queryResults = new ArrayList<>(points.size()); for (int placeIndex = 0; placeIndex < points.size(); placeIndex++) { GHPoint point = points.get(placeIndex); QueryResult res; if (ghRequest.hasPointHints()) { res = locationIndex.findClosest(point.lat, point.lon, new NameSimilarityEdgeFilter(edgeFilter, ghRequest.getPointHints().get(placeIndex))); if (!res.isValid()) { res = locationIndex.findClosest(point.lat, point.lon, edgeFilter); } } else { res = locationIndex.findClosest(point.lat, point.lon, edgeFilter); } if (!res.isValid()) ghResponse.addError(new PointNotFoundException("Cannot find point " + placeIndex + ": " + point, placeIndex)); queryResults.add(res); } return queryResults; }
@Override public List<QueryResult> lookup(List<GHPoint> points, FlagEncoder encoder) { if (points.isEmpty()) throw new IllegalStateException("For round trip calculation one point is required"); final double distanceInMeter = ghRequest.getHints().getDouble(RoundTrip.DISTANCE, 10000); final long seed = ghRequest.getHints().getLong(RoundTrip.SEED, 0L); final double initialHeading = ghRequest.getHints().getDouble(RoundTrip.HEADING, Double.NaN); final int roundTripPointCount = Math.min(20, ghRequest.getHints().getInt(Algorithms.ROUND_TRIP + ".points", 2 + (int) (distanceInMeter / 50000))); final GHPoint start = ghRequest.getPoints().get(0); TourStrategy strategy = new MultiPointTour(new Random(seed), distanceInMeter, roundTripPointCount, initialHeading); queryResults = new ArrayList<>(2 + strategy.getNumberOfGeneratedPoints()); EdgeFilter edgeFilter = new DefaultEdgeFilter(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 = points.get(0); 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; }
/** * This method removes networks that will be never be visited by this filter. See #235 for * example, small areas like parking lots are sometimes connected to the whole network through a * one-way road. This is clearly an error - but is causes the routing to fail when a point gets * connected to this small area. This routine removes all these networks from the graph. * <p> * * @return number of removed edges */ int removeDeadEndUnvisitedNetworks(final PrepEdgeFilter bothFilter) { StopWatch sw = new StopWatch(bothFilter.getEncoder() + " findComponents").start(); final EdgeFilter outFilter = new DefaultEdgeFilter(bothFilter.getEncoder(), false, true); // partition graph into strongly connected components using Tarjan's algorithm TarjansSCCAlgorithm tarjan = new TarjansSCCAlgorithm(ghStorage, outFilter, true); List<IntArrayList> components = tarjan.findComponents(); logger.info(sw.stop() + ", size:" + components.size()); return removeEdges(bothFilter, components, minOneWayNetworkSize); }
maxEdgesCount = ghStorage.getAllEdges().getMaxId(); FlagEncoder prepareFlagEncoder = prepareWeighting.getFlagEncoder(); vehicleInExplorer = prepareGraph.createEdgeExplorer(new DefaultEdgeFilter(prepareFlagEncoder, true, false)); vehicleOutExplorer = prepareGraph.createEdgeExplorer(new DefaultEdgeFilter(prepareFlagEncoder, false, true)); final EdgeFilter allFilter = new DefaultEdgeFilter(prepareFlagEncoder, true, true);
/** * * @param graphFolder * @param memoryMapped * @param hopper * @param ownsHopper * Whether this class owns the graphhopper graph (and wrapper object) and should dispose of it later. * @param namedFlagEncoder */ private CHMatrixGeneration( GraphHopper hopper, boolean ownsHopper, String namedFlagEncoder) { this.hopper = hopper; this.ownsHopper = ownsHopper; encodingManager = hopper.getEncodingManager(); flagEncoder = identifyFlagEncoder(hopper, namedFlagEncoder); edgeFilter = new DefaultEdgeFilter(flagEncoder); WeightingMap weightingMap = new WeightingMap("fastest"); // Weighting weighting = hopper.createWeighting(weightingMap, flagEncoder); // prepareWeighting = new PreparationWeighting(weighting); // get correct weighting for flag encoder Weighting weighting = hopper.getWeightingForCH(weightingMap, flagEncoder); prepareWeighting = new PreparationWeighting(weighting); // save reference to the correct CH graph chGraph = hopper.getGraphHopperStorage().getGraph(CHGraph.class,weighting); // and create a level edge filter to ensure we (a) accept virtual (snap-to) edges and (b) don't descend into the // base graph levelEdgeFilter = new LevelEdgeFilter(chGraph); }