-
Notifications
You must be signed in to change notification settings - Fork 406
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feature #377 alternative routes #403
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Mostly looks good, though I think we should do a small amount of refactoring in the RouteResultBuilder to reduce the duplication of the code that builds some of the route information.
There is a line of code in RoutingProfileManager (ln 463) that defines whether a route uses dynamic weights, which in turn is used to limit the length of routes requested. As the alternative routing algorithm does not used the optimised routing algorithms, we should add to that line a check for requesting alternative routes and if they are requested, then the distance check should also be carried out.
RouteResult[] resultSet = new RouteResult[route.getAll().size()]; | ||
|
||
for (PathWrapper path : route.getAll()) { | ||
RouteResult result = new RouteResult(request.getExtraInfo()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would suggest that we refactor some of the code to reduce duplication of methods. For example, a lot of the code here is duplicated earlier, so it would be good if we could take this code and put it into a method that can be used for all places where this functionality is required. There are some differences relating to some aspects (e.g. loops), so it might need a bit of thought to get it working properly but it would certainly be a step in the right direction for cleaning up this class.
@@ -65,6 +65,11 @@ | |||
private int[] _avoidCountries = null; | |||
private BordersExtractor.Avoid _avoidBorders = BordersExtractor.Avoid.NONE; | |||
|
|||
// TAKB: parameters weight factor and share factor seem to be ignored by the algorithm, further testing required. | |||
private int _alternativeRoutes = -1; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Would be better to name this _alternativeRouteCount to make it clearer what it is for (same for the getter and setter)
6e9a817
to
909d33c
Compare
…for GHResponse with multiple paths, minor refactoring in RouteResultBuilder and RoutingRequestProcessor
6088d01
to
d53734a
Compare
21650de
to
42ee583
Compare
42ee583
to
74a086f
Compare
Pull Request Checklist
Fixes #377 .
Information about the changes
Key functionality added:
routing API option "alternative_routes": n (int) added, uses GH alternative_route algorithm to return up to n routes for the query. Currently disables CH, and more than 2 waypoints are not supported. Parameters for the algorithm can be set with options "alternative_routes_weight_factor": (double) and "alternative_routes_share_factor": (double).
Reason for change:
This gets the algorithm to work basically, but a) the algorithm produces some funny results and b) CH support is underway (Faster alternative routes for longer routes graphhopper/graphhopper#1524), so we'll need to continue work on this feature in a while. The changes to RouteResultBuilder are also crying out for serious refactoring... So this is not done or anything, just stashing away interim results.