Skip to content
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

RouteOptions and Directions API: add avoidManeuverRadius ("avoid_maneuver_radius") param #1310

Merged
merged 1 commit into from
Nov 11, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,25 @@ public List<Bearing> bearingsList() {
return ParseUtils.parseBearings(bearings());
}


/**
* A radius around a starting point where the routes' provider tries to avoid any
* significant maneuvers. Use this option when the vehicle is traveling at a significant
* speed to avoid dangerous maneuvers when re-routing. If a route is not found using
* the specified value, it will be ignored. Note that if a large radius is used, the routers'
* provider may ignore an important turn and return a long straight path before the first
* maneuver.
* <p>
* Note: the param cannot be used with {@link #departAt()} and {@link #arriveBy()},
* since these modes are used for reference requests, not for real-time routing.
*
* @return a radius around a starting point where router's provider tries to avoid any
* significant maneuvers. Possible range is [0, 1000] in meters.
*/
@SerializedName("avoid_maneuver_radius")
@Nullable
public abstract Integer avoidManeuverRadius();

/**
* Influences layer of road from where route starts from a waypoint. Useful in ambiguous
* cases when there are multiple roads at the same point and only layer allows
Expand Down Expand Up @@ -882,6 +901,9 @@ public URL toUrl(@NonNull String accessToken) {
if (steps() != null) {
sb.append(String.format("&steps=%s", steps()));
}
if (avoidManeuverRadius() != null) {
sb.append(String.format("&avoid_maneuver_radius=%s", avoidManeuverRadius()));
}
if (bearings() != null) {
sb.append(String.format("&bearings=%s", bearings()));
}
Expand Down Expand Up @@ -1178,6 +1200,25 @@ public Builder bearingsList(@Nullable List<Bearing> bearings) {
return this;
}

/**
* A radius around a starting point where the routes' provider tries to avoid any
* significant maneuvers. Use this option when the vehicle is traveling at a significant
* speed to avoid dangerous maneuvers when re-routing. If a route is not found using
* the specified value, it will be ignored. Note that if a large radius is used, the routers'
* provider may ignore an important turn and return a long straight path before the first
* maneuver.
* <p>
* Note: the param cannot be used with {@link #departAt(String)} and {@link #arriveBy(String)},
* since these modes are used for reference requests, not for real-time routing.
*
* @param avoidManeuverRadius avoid maneuver radius, in meters. Possible range is [0, 1000].
* @return this builder for chaining options together
*/
@NonNull
public abstract Builder avoidManeuverRadius(
@Nullable Integer avoidManeuverRadius
);

/**
* Influences layer of road from where route starts from a waypoint. Useful in ambiguous
* cases when there are multiple roads at the same point and only layer allows
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public class RouteOptionsTest extends TestUtils {
* Always update this file when new option is introduced.
*/
private static final String ROUTE_OPTIONS_JSON = "route_options_v5.json";
private static final String ROUTE_OPTIONS_URL = "https://api.mapbox.com/directions/v5/mapbox/driving/-122.4003312,37.7736941;-122.4187529,37.7689715;-122.4255172,37.7775835?access_token=pk.token&geometries=polyline6&alternatives=false&overview=full&radiuses=;unlimited;5.1&steps=true&bearings=0,90;90,0;&layers=-42;;0&continue_straight=false&annotations=congestion,distance,duration&language=ru&roundabout_exits=false&voice_instructions=true&banner_instructions=true&voice_units=metric&exclude=toll,ferry&include=hot,hov2&approaches=;curb;&waypoints=0;1;2&waypoint_names=;two;&waypoint_targets=;12.2,21.2;&enable_refresh=true&walking_speed=5.11&walkway_bias=-0.2&alley_bias=0.75&snapping_include_closures=;false;true&arrive_by=2021-01-01'T'01:01&depart_at=2021-02-02'T'02:02&max_height=1.5&max_width=1.4&metadata=true";
private static final String ROUTE_OPTIONS_URL = "https://api.mapbox.com/directions/v5/mapbox/driving/-122.4003312,37.7736941;-122.4187529,37.7689715;-122.4255172,37.7775835?access_token=pk.token&geometries=polyline6&alternatives=false&overview=full&radiuses=;unlimited;5.1&steps=true&avoid_maneuver_radius=200&bearings=0,90;90,0;&layers=-42;;0&continue_straight=false&annotations=congestion,distance,duration&language=ru&roundabout_exits=false&voice_instructions=true&banner_instructions=true&voice_units=metric&exclude=toll,ferry&include=hot,hov2&approaches=;curb;&waypoints=0;1;2&waypoint_names=;two;&waypoint_targets=;12.2,21.2;&enable_refresh=true&walking_speed=5.11&walkway_bias=-0.2&alley_bias=0.75&snapping_include_closures=;false;true&arrive_by=2021-01-01'T'01:01&depart_at=2021-02-02'T'02:02&max_height=1.5&max_width=1.4&metadata=true";
private static final String ACCESS_TOKEN = "pk.token";

private final String optionsJson = loadJsonFixture(ROUTE_OPTIONS_JSON);
Expand Down Expand Up @@ -435,6 +435,7 @@ private RouteOptions routeOptions() {
.alternatives(false)
.annotations("congestion,distance,duration")
.bearings("0,90;90,0;")
.avoidManeuverRadius(200)
.layers("-42;;0")
.continueStraight(false)
.exclude(DirectionsCriteria.EXCLUDE_TOLL + "," + DirectionsCriteria.EXCLUDE_FERRY)
Expand Down Expand Up @@ -490,6 +491,7 @@ private RouteOptions routeOptionsList() {
add(Bearing.builder().angle(90.0).degrees(0.0).build());
add(null);
}})
.avoidManeuverRadius(200)
.layersList(new ArrayList<Integer>() {{
add(-42);
add(null);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
"language": "ru",
"radiuses": ";unlimited;5.1",
"bearings": "0,90;90,0;",
"avoid_maneuver_radius": 200,
"layers": "-42;;0",
"continue_straight": false,
"roundabout_exits": false,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ interface DirectionsService {
* @param radiuses {@link RouteOptions#radiuses()}
* @param steps {@link RouteOptions#steps()}
* @param bearings {@link RouteOptions#bearings()}
* @param avoidManeuverRadius {@link RouteOptions#avoidManeuverRadius()}
* @param layers {@link RouteOptions#layers()}
* @param continueStraight {@link RouteOptions#continueStraight()}
* @param annotations {@link RouteOptions#annotations()}
Expand Down Expand Up @@ -70,6 +71,7 @@ Call<DirectionsResponse> getCall(
@Query("radiuses") String radiuses,
@Query("steps") Boolean steps,
@Query("bearings") String bearings,
@Query("avoid_maneuver_radius") Integer avoidManeuverRadius,
@Query("layers") String layers,
@Query("continue_straight") Boolean continueStraight,
@Query("annotations") String annotations,
Expand Down Expand Up @@ -110,6 +112,7 @@ Call<DirectionsResponse> getCall(
* @param radiuses {@link RouteOptions#radiuses()}
* @param steps {@link RouteOptions#steps()}
* @param bearings {@link RouteOptions#bearings()}
* @param avoidManeuverRadius {@link RouteOptions#avoidManeuverRadius()}
* @param layers {@link RouteOptions#layers()}
* @param continueStraight {@link RouteOptions#continueStraight()}
* @param annotations {@link RouteOptions#annotations()}
Expand Down Expand Up @@ -150,6 +153,7 @@ Call<DirectionsResponse> postCall(
@Field("radiuses") String radiuses,
@Field("steps") Boolean steps,
@Field("bearings") String bearings,
@Query("avoid_maneuver_radius") Integer avoidManeuverRadius,
@Field("layers") String layers,
@Field("continue_straight") Boolean continueStraight,
@Field("annotations") String annotations,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ private Call<DirectionsResponse> get() {
routeOptions().radiuses(),
routeOptions().steps(),
routeOptions().bearings(),
routeOptions().avoidManeuverRadius(),
routeOptions().layers(),
routeOptions().continueStraight(),
routeOptions().annotations(),
Expand Down Expand Up @@ -126,6 +127,7 @@ private Call<DirectionsResponse> post() {
routeOptions().radiuses(),
routeOptions().steps(),
routeOptions().bearings(),
routeOptions().avoidManeuverRadius(),
routeOptions().layers(),
routeOptions().continueStraight(),
routeOptions().annotations(),
Expand Down