/** * This method removes the access to edges available from the nodes contained in the components. * But only if a components' size is smaller then the specified min value. * <p> * * @return number of removed edges */ int removeEdges(final PrepEdgeFilter bothFilter, List<IntArrayList> components, int min) { // remove edges determined from nodes but only if less than minimum size FlagEncoder encoder = bothFilter.getEncoder(); EdgeExplorer explorer = ghStorage.createEdgeExplorer(bothFilter); int removedEdges = 0; for (IntArrayList component : components) { removedEdges += removeEdges(explorer, encoder, component, min); } return removedEdges; }
if (maxCount < component.size()) { removedEdges = removeEdges(explorer, encoder, oldComponent, minNetworkSize); removedEdges = removeEdges(explorer, encoder, component, minNetworkSize);
/** * 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 = DefaultEdgeFilter.outEdges(bothFilter.getEncoder()); // 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); }
/** * This method removes the access to edges available from the nodes contained in the components. * But only if a components' size is smaller then the specified min value. * <p> * * @return number of removed edges */ int removeEdges(final PrepEdgeFilter bothFilter, List<IntArrayList> components, int min) { // remove edges determined from nodes but only if less than minimum size FlagEncoder encoder = bothFilter.getEncoder(); EdgeExplorer explorer = ghStorage.createEdgeExplorer(bothFilter); int removedEdges = 0; for (IntArrayList component : components) { removedEdges += removeEdges(explorer, encoder, component, min); } return removedEdges; }
/** * This method removes the access to edges available from the nodes contained in the components. * But only if a components' size is smaller then the specified min value. * <p> * * @return number of removed edges */ int removeEdges(final PrepEdgeFilter bothFilter, List<IntArrayList> components, int min) { // remove edges determined from nodes but only if less than minimum size FlagEncoder encoder = bothFilter.getEncoder(); EdgeExplorer explorer = ghStorage.createEdgeExplorer(bothFilter); int removedEdges = 0; for (IntArrayList component : components) { removedEdges += removeEdges(explorer, encoder, component, min); } return removedEdges; }
if (maxCount < component.size()) { removedEdges = removeEdges(explorer, encoder, oldComponent, minNetworkSize); removedEdges = removeEdges(explorer, encoder, component, minNetworkSize);
if (maxCount < component.size()) { removedEdges = removeEdges(explorer, encoder, oldComponent, minNetworkSize); removedEdges = removeEdges(explorer, encoder, component, minNetworkSize);
/** * 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 = DefaultEdgeFilter.outEdges(bothFilter.getEncoder()); // 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); }
/** * 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); }