if (route.size() > this.size()) overlapIndex = route.subRouteIndex(this); overlapIndex = subRouteIndex(route); final Edge lastOverlap = route.get(overlapIndex); if (this.includes(lastOverlap)) return this.indexOf(lastOverlap);
ComplexHighwayAreaHelper(final Edge edge) { this.sourceEdge = edge; buildHighwayAreaBoundary(Route.forEdge(edge)).ifPresent(route -> { this.boundary = route.asPolyLine(); StreamSupport.stream(route.spliterator(), false).map(Edge::getIdentifier) .forEach(this.visitedEdgeIdentifiers::add); this.sourceEdge = edge.getAtlas().edge(this.visitedEdgeIdentifiers.first()); }); if (this.boundary == null) { this.oops = new CoreException("Unable to build boundary for edge {}", edge.getOsmIdentifier()); } }
while (route == null || route.size() < members.size()) route = Route.forEdge(members.iterator().next()); final int initialSize = route.size(); for (final Edge edge : members) if (route.includes(edge)) if (edge.start().equals(route.end().end())) route = route.append(edge); break; if (edge.end().equals(route.start().start())) route = route.prepend(edge); break; if (initialSize + 1 != route.size())
final Route shorterRoute = Route.forEdges(atlas.edge(159019301), atlas.edge(128620751)); final Route longerRoute = Route.forEdges(atlas.edge(159019301), atlas.edge(128620751), atlas.edge(128620796)); final Route partialLongerRoute = Route.forEdges(atlas.edge(128620751), atlas.edge(128620796)); final Route middleEdgeRoute = Route.forEdge(atlas.edge(128620751)); shorterRoute.subRouteIndex(longerRoute)); Assert.assertFalse(shorterRoute.isSubRoute(longerRoute)); 1, longerRoute.subRouteIndex(shorterRoute)); Assert.assertTrue(longerRoute.isSubRoute(shorterRoute)); longerRoute.subRoute(0, shorterRoute.size())); longerRoute.subRoute(1, longerRoute.size())); longerRoute.subRoute(1, 2)); longerRoute.subRoute(0, longerRoute.size()));
while (route == null || route.size() < maxEdgesToAdd && !(route.start().start().equals(startNode) && route.end().end().equals(endNode))) route = Route.forEdge(edge); idsAdded.add(edge.getMasterEdgeIdentifier()); break; if (edge.start().equals(route.end().end())) route = route.append(edge); idsAdded.add(edge.getMasterEdgeIdentifier()); break; if (route.size() != maxEdgesToAdd)
if (candidateRoute.start().start().equals(candidateRoute.end().end())) final Set<Edge> connectedEdges = candidateRoute.end().outEdges(); connectedEdges.addAll(candidateRoute.start().inEdges()); candidateRoute.forEach(edge -> masterEdgeIdentifiers.add(edge.getMasterEdgeIdentifier())); .filter(edge -> !candidateRoute.includes(edge)) .filter(edge -> !masterEdgeIdentifiers.contains(edge.getMasterEdgeIdentifier())) .forEach(mergeCandidates::add); .filter(edge -> !masterEdgeIdentifiers.contains(edge.getMasterEdgeIdentifier())) .filter(edge -> isMergeCandidateEdge(edge, candidateRoute, junctionEdgeIds)) .filter(edge -> !candidateRoute.includes(edge)).forEach(mergeCandidates::add); if (candidateRoute.end().isConnectedAtEndTo(connectedEdge)) return mergeJunctionEdges(candidateRoute.append(mergeCandidate), junctionEdgeIds); else if (candidateRoute.start().isConnectedAtStartTo(connectedEdge)) return mergeJunctionEdges(Route.forEdge(mergeCandidate).append(candidateRoute), junctionEdgeIds);
if (candidate.isOverlapping(path) && routeContainsAllTurnRestrictionParts(turnRestriction, candidate)) if (candidate.isSubRoute(from) && !candidate.isSubRoute(path)) final int fromSubRouteIndex = candidate.subRouteIndex(from); final int routeEndIndex = candidate.size() - 1; .subRoute(fromSubRouteIndex + 1, routeEndIndex + 1);
@Override public boolean equals(final Object other) { if (other instanceof Route) { final Route that = (Route) other; if (this.size() == that.size()) { return new EqualsBuilder() .append(this.start().start().getLocation(), that.start().start().getLocation()) .append(this.end().end().getLocation(), that.end().end().getLocation()) .append(Iterables.asList(this), Iterables.asList(that)).isEquals(); } } return false; }
Route.forEdge(candidateEdge)); final Edge startEdge = route.start(); junctionRouteEdgeIds.add(startEdge.getIdentifier()); route.forEach(edge -> junctionEdgeIds.add(edge.getIdentifier())); }); ? junctionEdgeIds.iterator().next() : junctionRouteEdgeIds.iterator().next(); final Edge candidate = atlas.edge(candidateEdgeId); final Route mergedCandidate = mergeJunctionEdges(Route.forEdge(candidate), junctionEdgeIds); logger.debug("Merged bigNode Route : {}. Number of Edges : {}", mergedCandidate, mergedCandidate.size()); mergedCandidate.forEach(edge -> nodes.addAll(edge.connectedNodes())); final Set<BigNodeCandidate> bigNodesMergeCandidates = new HashSet<>(); for (final Node node : nodes) mergedCandidate.forEach(edge -> junctionEdgeIds.remove(edge.getIdentifier())); mergedCandidate.forEach(edge -> junctionRouteEdgeIds.remove(edge.getIdentifier()));
candidateJunctionRoute.end().outEdges().stream().filter(this::isCandidateJunctionEdge) .filter(edge -> edge.getMasterEdgeIdentifier() != candidateJunctionRoute.end() .getMasterEdgeIdentifier()) .filter(edge -> this.edgeDirectionComparator .isSameDirection(candidateJunctionRoute.end(), edge, false)) .forEach(expandableEdges::add); try route = candidateJunctionRoute.append(expandableEdge); if (route.size() <= MAXIMUM_DUAL_CARRIAGEWAY_ROUTE_SIZE)
|| ((Edge) member.getEntity()).isConnectedAtEndTo(temporaryToMembers))) .forEach(member -> fromMembers.add((Edge) member.getEntity())); fromMember = Route.fromNonArrangedEdgeSet(fromMembers, false); || ((Edge) member.getEntity()).isConnectedAtStartTo(fromMembers))) .forEach(member -> toMembers.add((Edge) member.getEntity())); toMember = Route.fromNonArrangedEdgeSet(toMembers, false); viaMember = Route.buildFullRouteIgnoringReverseEdges(viaEdges, fromMember.end().end(), toMember.start().start());
/** * Create a {@link Route} from an {@link Iterable} of {@link Edge}s that are already in the * proper order to be connected. * * @param edges * The {@link Edge}s to link in a {@link Route} * @return The corresponding {@link Route} */ public static Route forEdges(final Edge... edges) { return forEdges(Iterables.asList(edges)); }
public Route append(final Route route) { if (route == null) { throw new CoreException( "Cannot append a route that is null to a route {} that ends at {}", this, this.end()); } if (!end().end().equals(route.start().start())) { throw new CoreException( "Cannot append a disconnected route:\nOne: {}\nAt: {}\nTo\nTwo: {}\nAt: {}", this, this.end(), route, route.start()); } return new MultiRoute(this, route); }
private Optional<Route> buildHighwayAreaBoundary(final Route boundary) { for (final Edge edge : boundary.end().end().connectedEdges()) { if (canAddEdgeToBoundary(edge, boundary)) { final Route extendedBoundary = boundary.append(edge); if (extendedBoundary.end().end().getLocation() .equals(extendedBoundary.start().start().getLocation())) { return Optional.of(extendedBoundary); } else { return buildHighwayAreaBoundary(extendedBoundary); } } } return Optional.empty(); }