Skip to content

Commit b7b3fcf

Browse files
authored
RouteOptions and Directions API: add avoidManeuverRadius ("avoid_maneuver_radius") param (#1310)
1 parent 75c8e31 commit b7b3fcf

5 files changed

Lines changed: 51 additions & 1 deletion

File tree

services-directions-models/src/main/java/com/mapbox/api/directions/v5/models/RouteOptions.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,25 @@ public List<Bearing> bearingsList() {
201201
return ParseUtils.parseBearings(bearings());
202202
}
203203

204+
205+
/**
206+
* A radius around a starting point where the routes' provider tries to avoid any
207+
* significant maneuvers. Use this option when the vehicle is traveling at a significant
208+
* speed to avoid dangerous maneuvers when re-routing. If a route is not found using
209+
* the specified value, it will be ignored. Note that if a large radius is used, the routers'
210+
* provider may ignore an important turn and return a long straight path before the first
211+
* maneuver.
212+
* <p>
213+
* Note: the param cannot be used with {@link #departAt()} and {@link #arriveBy()},
214+
* since these modes are used for reference requests, not for real-time routing.
215+
*
216+
* @return a radius around a starting point where router's provider tries to avoid any
217+
* significant maneuvers. Possible range is [0, 1000] in meters.
218+
*/
219+
@SerializedName("avoid_maneuver_radius")
220+
@Nullable
221+
public abstract Integer avoidManeuverRadius();
222+
204223
/**
205224
* Influences layer of road from where route starts from a waypoint. Useful in ambiguous
206225
* cases when there are multiple roads at the same point and only layer allows
@@ -882,6 +901,9 @@ public URL toUrl(@NonNull String accessToken) {
882901
if (steps() != null) {
883902
sb.append(String.format("&steps=%s", steps()));
884903
}
904+
if (avoidManeuverRadius() != null) {
905+
sb.append(String.format("&avoid_maneuver_radius=%s", avoidManeuverRadius()));
906+
}
885907
if (bearings() != null) {
886908
sb.append(String.format("&bearings=%s", bearings()));
887909
}
@@ -1178,6 +1200,25 @@ public Builder bearingsList(@Nullable List<Bearing> bearings) {
11781200
return this;
11791201
}
11801202

1203+
/**
1204+
* A radius around a starting point where the routes' provider tries to avoid any
1205+
* significant maneuvers. Use this option when the vehicle is traveling at a significant
1206+
* speed to avoid dangerous maneuvers when re-routing. If a route is not found using
1207+
* the specified value, it will be ignored. Note that if a large radius is used, the routers'
1208+
* provider may ignore an important turn and return a long straight path before the first
1209+
* maneuver.
1210+
* <p>
1211+
* Note: the param cannot be used with {@link #departAt(String)} and {@link #arriveBy(String)},
1212+
* since these modes are used for reference requests, not for real-time routing.
1213+
*
1214+
* @param avoidManeuverRadius avoid maneuver radius, in meters. Possible range is [0, 1000].
1215+
* @return this builder for chaining options together
1216+
*/
1217+
@NonNull
1218+
public abstract Builder avoidManeuverRadius(
1219+
@Nullable Integer avoidManeuverRadius
1220+
);
1221+
11811222
/**
11821223
* Influences layer of road from where route starts from a waypoint. Useful in ambiguous
11831224
* cases when there are multiple roads at the same point and only layer allows

services-directions-models/src/test/java/com/mapbox/api/directions/v5/models/RouteOptionsTest.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public class RouteOptionsTest extends TestUtils {
1818
* Always update this file when new option is introduced.
1919
*/
2020
private static final String ROUTE_OPTIONS_JSON = "route_options_v5.json";
21-
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";
21+
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";
2222
private static final String ACCESS_TOKEN = "pk.token";
2323

2424
private final String optionsJson = loadJsonFixture(ROUTE_OPTIONS_JSON);
@@ -435,6 +435,7 @@ private RouteOptions routeOptions() {
435435
.alternatives(false)
436436
.annotations("congestion,distance,duration")
437437
.bearings("0,90;90,0;")
438+
.avoidManeuverRadius(200)
438439
.layers("-42;;0")
439440
.continueStraight(false)
440441
.exclude(DirectionsCriteria.EXCLUDE_TOLL + "," + DirectionsCriteria.EXCLUDE_FERRY)
@@ -490,6 +491,7 @@ private RouteOptions routeOptionsList() {
490491
add(Bearing.builder().angle(90.0).degrees(0.0).build());
491492
add(null);
492493
}})
494+
.avoidManeuverRadius(200)
493495
.layersList(new ArrayList<Integer>() {{
494496
add(-42);
495497
add(null);

services-directions-models/src/test/resources/route_options_v5.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
"language": "ru",
88
"radiuses": ";unlimited;5.1",
99
"bearings": "0,90;90,0;",
10+
"avoid_maneuver_radius": 200,
1011
"layers": "-42;;0",
1112
"continue_straight": false,
1213
"roundabout_exits": false,

services-directions/src/main/java/com/mapbox/api/directions/v5/DirectionsService.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ interface DirectionsService {
3131
* @param radiuses {@link RouteOptions#radiuses()}
3232
* @param steps {@link RouteOptions#steps()}
3333
* @param bearings {@link RouteOptions#bearings()}
34+
* @param avoidManeuverRadius {@link RouteOptions#avoidManeuverRadius()}
3435
* @param layers {@link RouteOptions#layers()}
3536
* @param continueStraight {@link RouteOptions#continueStraight()}
3637
* @param annotations {@link RouteOptions#annotations()}
@@ -70,6 +71,7 @@ Call<DirectionsResponse> getCall(
7071
@Query("radiuses") String radiuses,
7172
@Query("steps") Boolean steps,
7273
@Query("bearings") String bearings,
74+
@Query("avoid_maneuver_radius") Integer avoidManeuverRadius,
7375
@Query("layers") String layers,
7476
@Query("continue_straight") Boolean continueStraight,
7577
@Query("annotations") String annotations,
@@ -110,6 +112,7 @@ Call<DirectionsResponse> getCall(
110112
* @param radiuses {@link RouteOptions#radiuses()}
111113
* @param steps {@link RouteOptions#steps()}
112114
* @param bearings {@link RouteOptions#bearings()}
115+
* @param avoidManeuverRadius {@link RouteOptions#avoidManeuverRadius()}
113116
* @param layers {@link RouteOptions#layers()}
114117
* @param continueStraight {@link RouteOptions#continueStraight()}
115118
* @param annotations {@link RouteOptions#annotations()}
@@ -150,6 +153,7 @@ Call<DirectionsResponse> postCall(
150153
@Field("radiuses") String radiuses,
151154
@Field("steps") Boolean steps,
152155
@Field("bearings") String bearings,
156+
@Query("avoid_maneuver_radius") Integer avoidManeuverRadius,
153157
@Field("layers") String layers,
154158
@Field("continue_straight") Boolean continueStraight,
155159
@Field("annotations") String annotations,

services-directions/src/main/java/com/mapbox/api/directions/v5/MapboxDirections.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ private Call<DirectionsResponse> get() {
8686
routeOptions().radiuses(),
8787
routeOptions().steps(),
8888
routeOptions().bearings(),
89+
routeOptions().avoidManeuverRadius(),
8990
routeOptions().layers(),
9091
routeOptions().continueStraight(),
9192
routeOptions().annotations(),
@@ -126,6 +127,7 @@ private Call<DirectionsResponse> post() {
126127
routeOptions().radiuses(),
127128
routeOptions().steps(),
128129
routeOptions().bearings(),
130+
routeOptions().avoidManeuverRadius(),
129131
routeOptions().layers(),
130132
routeOptions().continueStraight(),
131133
routeOptions().annotations(),

0 commit comments

Comments
 (0)