Skip to content

Commit

Permalink
RouteOptions and Directions API: add avoidManeuverRadius ("avoid_ma…
Browse files Browse the repository at this point in the history
…neuver_radius") param
  • Loading branch information
RingerJK committed Nov 11, 2021
1 parent 75c8e31 commit 2bd9f57
Show file tree
Hide file tree
Showing 5 changed files with 51 additions and 1 deletion.
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

0 comments on commit 2bd9f57

Please sign in to comment.