From c98cdba0909754f858b38a8bfd61b8c2c3cf0686 Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Wed, 26 Oct 2022 14:30:53 +0200 Subject: [PATCH] wip (+3 squashed commits) Squashed commits: [f265764b67] Revert "- Added Waypoints to NavigationRoute; - RouteOptionsUpdater refactored." This reverts commit b111ebe6f3b3396fa14212e88f2316ccc76f3cac. [250633f2c7] NavigationRoute: create from DirectionsRoute(s) [b111ebe6f3] - Added Waypoints to NavigationRoute; - RouteOptionsUpdater refactored. --- .../core/NavigationRouteTests.kt | 90 + ...esponse_alternative_during_navigation.json | 5213 ++++++++++++++++- .../src/main/res/raw/short_route.json | 312 +- .../base/internal/NativeRouteParserWrapper.kt | 17 + .../base/internal/route/NavigationRouteEx.kt | 15 + .../navigation/base/route/NavigationRoute.kt | 57 +- .../factories/NavigationRouteFactory.kt | 16 + 7 files changed, 5717 insertions(+), 3 deletions(-) create mode 100644 instrumentation-tests/src/androidTest/java/com/mapbox/navigation/instrumentation_tests/core/NavigationRouteTests.kt diff --git a/instrumentation-tests/src/androidTest/java/com/mapbox/navigation/instrumentation_tests/core/NavigationRouteTests.kt b/instrumentation-tests/src/androidTest/java/com/mapbox/navigation/instrumentation_tests/core/NavigationRouteTests.kt new file mode 100644 index 00000000000..99320bb79cd --- /dev/null +++ b/instrumentation-tests/src/androidTest/java/com/mapbox/navigation/instrumentation_tests/core/NavigationRouteTests.kt @@ -0,0 +1,90 @@ +package com.mapbox.navigation.instrumentation_tests.core + +import android.location.Location +import com.mapbox.api.directions.v5.models.DirectionsResponse +import com.mapbox.api.directions.v5.models.DirectionsRoute +import com.mapbox.api.directions.v5.models.RouteOptions +import com.mapbox.geojson.Point +import com.mapbox.navigation.base.extensions.applyDefaultNavigationOptions +import com.mapbox.navigation.base.internal.route.createNavigationRoutes +import com.mapbox.navigation.base.internal.utils.internalWaypoints +import com.mapbox.navigation.base.route.NavigationRoute +import com.mapbox.navigation.base.route.RouterOrigin +import com.mapbox.navigation.instrumentation_tests.R +import com.mapbox.navigation.instrumentation_tests.activity.EmptyTestActivity +import com.mapbox.navigation.instrumentation_tests.utils.readRawFileText +import com.mapbox.navigation.testing.ui.BaseTest +import junit.framework.Assert.assertEquals +import junit.framework.Assert.assertTrue +import org.junit.Test + +class NavigationRouteTests : BaseTest(EmptyTestActivity::class.java) { + + override fun setupMockLocation(): Location = mockLocationUpdatesRule.generateLocationUpdate { + latitude = 0.0 + longitude = 0.0 + } + + @Test + fun mapDirectionsResponseToNavigationRoutes() { + val jsonResponse = readRawFileText(activity, R.raw.route_response_dc_very_short) + + val navRoutes = NavigationRoute.create( + DirectionsResponse.fromJson(jsonResponse), + provideRouteOptions(), + RouterOrigin.Onboard + ) + + assertTrue(navRoutes.isNotEmpty()) + navRoutes.forEach { + assertTrue(it.internalWaypoints().isNotEmpty()) + } + } + + @Test + fun mapDirectionsRouteToNavigationRoutes() { + val directionsRoute = DirectionsRoute.fromJson(readRawFileText(activity, R.raw.short_route)) + + val navRoutes = createNavigationRoutes( + listOf(directionsRoute), + provideRouteOptions(), + RouterOrigin.Onboard, + ) + + assertTrue(navRoutes.isNotEmpty()) + navRoutes.forEach { + assertTrue(it.internalWaypoints().isNotEmpty()) + } + } + + @Test + fun mapMultipleDirectionsRoutesToNavigationRoutes() { + val directionsRoutes = DirectionsResponse.fromJson( + readRawFileText(activity, R.raw.route_response_alternative_start) + ) + + val navRoutes = createNavigationRoutes( + directionsRoutes.routes(), + directionsRoutes.routes()[0].routeOptions()!!, + RouterOrigin.Onboard, + ) + + assertTrue(navRoutes.isNotEmpty()) + navRoutes.forEachIndexed { index, navigationRoute -> + assertEquals(directionsRoutes.routes()[index], navigationRoute.directionsRoute) + } + navRoutes.forEach { + assertTrue(it.internalWaypoints().isNotEmpty()) + } + } + + private fun provideRouteOptions(): RouteOptions = + RouteOptions.builder().applyDefaultNavigationOptions() + .coordinatesList( + listOf( + Point.fromLngLat(1.1, 2.2), + Point.fromLngLat(3.3, 4.4), + ) + ) + .build() +} diff --git a/instrumentation-tests/src/main/res/raw/route_response_alternative_during_navigation.json b/instrumentation-tests/src/main/res/raw/route_response_alternative_during_navigation.json index 93cf2b1502b..22e40e847a1 100644 --- a/instrumentation-tests/src/main/res/raw/route_response_alternative_during_navigation.json +++ b/instrumentation-tests/src/main/res/raw/route_response_alternative_during_navigation.json @@ -1 +1,5212 @@ -{"routes":[{"weight_typical":442.777,"duration_typical":290.718,"weight_name":"auto","weight":449.504,"duration":296.209,"distance":2947.293,"legs":[{"admins":[{"iso_3166_1_alpha3":"USA","iso_3166_1":"US"}],"annotation":{"maxspeed":[{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"speed":56,"unit":"km/h"},{"speed":56,"unit":"km/h"},{"speed":56,"unit":"km/h"},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true}],"congestion":["unknown","unknown","unknown","unknown","unknown","unknown","low","unknown","unknown","unknown","unknown","unknown","low","unknown","low","low","low","unknown","unknown","unknown","unknown","unknown","unknown","unknown","low","low","low","low","moderate","low","low","low","unknown","unknown","low","unknown","moderate","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","low","unknown","unknown","unknown","low","low","unknown","low","low","unknown","low","unknown","moderate","unknown","low","low","low","low","low","unknown","low","low","low","unknown","unknown"],"speed":[4.2,5.6,11.4,9.7,9.7,11.1,10.6,5.3,5.6,5.6,5.6,12.2,11.4,12.2,11.9,12.5,12.5,7.2,2.5,2.5,2.5,2.5,2.5,2.5,11.1,11.1,11.1,11.1,12.5,13.6,13.6,13.6,13.6,15.3,14.2,14.7,5.6,14.2,14.2,13.6,15,15,15,15.3,15.3,15.3,15,14.4,10.6,8.6,10,13.6,15,15.3,15,15,15.8,14.7,13.3,12.8,12.8,15.3,16.7,16.7,16.7,15.8,15,8.6,11.1,14.2,12.2,9.7],"distance":[17.4,6.2,23.1,84.4,15.3,19.6,86.9,12.6,9.5,4.6,30.1,73.4,48.7,40.6,60.8,135.7,60.2,6,4.5,5.9,4.2,2.4,6.7,12.9,11.3,11,11.2,1.9,7.6,1.7,11.2,20.1,30.7,28,63.6,10.8,49.4,40.3,8.6,13.4,4.6,30.3,26.5,33.1,26.2,57.6,20.9,44.4,57.6,14.2,48.9,64.7,39.3,13.2,58.7,40.1,1.1,97.8,6.6,64.1,28.1,98.4,22.2,16.4,63.3,99.2,8.2,298.5,316.6,31.4,69.1,51.8],"duration":[4.187,1.108,2.027,8.679,1.573,1.765,8.234,2.391,1.705,0.835,5.425,6.008,4.276,3.321,5.087,10.858,4.816,0.83,1.814,2.36,1.672,0.94,2.699,5.157,1.021,0.987,1.006,0.167,0.606,0.127,0.822,1.477,2.256,1.831,4.492,0.736,8.891,2.846,0.607,0.983,0.308,2.023,1.769,2.169,1.716,3.77,1.393,3.072,5.453,1.648,4.891,4.755,2.618,0.863,3.911,2.672,0.069,6.64,0.496,5.016,2.2,6.441,1.331,0.985,3.798,6.264,0.545,34.663,28.491,2.217,5.653,5.333]},"weight_typical":442.777,"duration_typical":290.718,"weight":449.504,"duration":296.209,"steps":[{"voiceInstructions":[{"ssmlAnnouncement":"Drive south. Then Turn left onto S Street.","announcement":"Drive south. Then Turn left onto S Street.","distanceAlongGeometry":23.448}],"intersections":[{"classes":["restricted"],"entry":[true],"bearings":[199],"duration":4.187,"mapbox_streets_v8":{"class":"service"},"is_urban":true,"admin_index":0,"out":0,"weight":5.13,"geometry_index":0,"location":[-121.467146,38.562449]},{"bearings":[19,200],"entry":[false,true],"in":0,"turn_weight":20.25,"mapbox_streets_v8":{"class":"service"},"is_urban":true,"admin_index":0,"out":1,"geometry_index":1,"location":[-121.467212,38.562301]}],"bannerInstructions":[{"primary":{"components":[{"type":"text","text":"S Street"}],"type":"turn","modifier":"left","text":"S Street"},"distanceAlongGeometry":23.448}],"speedLimitUnit":"mph","maneuver":{"type":"depart","instruction":"Drive south.","bearing_after":199,"bearing_before":0,"location":[-121.467146,38.562449]},"speedLimitSign":"mutcd","name":"","weight_typical":26.703,"duration_typical":5.267,"duration":5.267,"distance":23.448,"driving_side":"right","weight":26.703,"mode":"driving","geometry":"ahtphArowtfFfHbCfBn@"},{"voiceInstructions":[{"ssmlAnnouncement":"In 400 feet, Turn left onto 34th Street.","announcement":"In 400 feet, Turn left onto 34th Street.","distanceAlongGeometry":113},{"ssmlAnnouncement":"Turn left onto 34th Street.","announcement":"Turn left onto 34th Street.","distanceAlongGeometry":50}],"intersections":[{"entry":[false,true],"in":0,"bearings":[20,109],"duration":7.641,"turn_weight":31.25,"turn_duration":5.622,"mapbox_streets_v8":{"class":"street"},"is_urban":true,"admin_index":0,"out":1,"weight":33.724,"geometry_index":2,"location":[-121.467236,38.562249]},{"bearings":[109,289],"entry":[true,false],"in":1,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"street"},"is_urban":true,"admin_index":0,"out":0,"geometry_index":3,"location":[-121.466985,38.562182]}],"bannerInstructions":[{"primary":{"components":[{"type":"text","text":"34th Street"}],"type":"turn","modifier":"left","text":"34th Street"},"distanceAlongGeometry":123}],"speedLimitUnit":"mph","maneuver":{"type":"end of road","instruction":"Turn left onto S Street.","modifier":"left","bearing_after":109,"bearing_before":200,"location":[-121.467236,38.562249]},"speedLimitSign":"mutcd","name":"S Street","weight_typical":46.824,"duration_typical":17.946,"duration":17.946,"distance":123,"driving_side":"right","weight":46.824,"mode":"driving","geometry":"q{sphAfuwtfFdCuNnNgx@dDwG"},{"voiceInstructions":[{"ssmlAnnouncement":"In a quarter mile, Turn right onto Folsom Boulevard.","announcement":"In a quarter mile, Turn right onto Folsom Boulevard.","distanceAlongGeometry":576.667},{"ssmlAnnouncement":"Turn right onto Folsom Boulevard.","announcement":"Turn right onto Folsom Boulevard.","distanceAlongGeometry":66.667}],"intersections":[{"entry":[true,false],"in":1,"bearings":[15,307],"duration":8.805,"turn_weight":15,"turn_duration":7.005,"mapbox_streets_v8":{"class":"tertiary"},"is_urban":true,"admin_index":0,"out":0,"weight":17.205,"geometry_index":5,"location":[-121.465929,38.561851]},{"entry":[true,false],"in":1,"bearings":[15,195],"duration":8.261,"turn_weight":3.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"tertiary"},"is_urban":true,"admin_index":0,"out":0,"weight":13.597,"geometry_index":6,"location":[-121.46587,38.562021]},{"entry":[true,false],"in":1,"bearings":[14,195],"duration":2.484,"turn_weight":2,"turn_duration":0.021,"mapbox_streets_v8":{"class":"tertiary"},"is_urban":true,"admin_index":0,"out":0,"weight":5.017,"geometry_index":7,"location":[-121.465606,38.562774]},{"entry":[true,false],"in":1,"bearings":[16,194],"duration":7.927,"turn_weight":0.5,"turn_duration":0.007,"mapbox_streets_v8":{"class":"tertiary"},"is_urban":true,"admin_index":0,"out":0,"weight":10.202,"geometry_index":8,"location":[-121.465571,38.562884]},{"entry":[true,false],"in":1,"bearings":[18,195],"duration":7.981,"turn_weight":2,"turn_duration":2.008,"mapbox_streets_v8":{"class":"tertiary"},"is_urban":true,"admin_index":0,"out":0,"weight":9.317,"geometry_index":11,"location":[-121.465435,38.563267]},{"entry":[true,false],"in":1,"bearings":[18,198],"duration":4.322,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"tertiary"},"is_urban":true,"admin_index":0,"out":0,"weight":5.77,"geometry_index":12,"location":[-121.465169,38.563893]},{"entry":[true,false],"in":1,"bearings":[18,198],"duration":3.374,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"tertiary"},"is_urban":true,"admin_index":0,"out":0,"weight":4.609,"geometry_index":13,"location":[-121.464992,38.564308]},{"entry":[true,false],"in":1,"bearings":[18,198],"duration":5.126,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"tertiary"},"is_urban":true,"admin_index":0,"out":0,"weight":6.756,"geometry_index":14,"location":[-121.464845,38.564654]},{"entry":[true,false],"in":1,"bearings":[18,198],"duration":10.899,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"tertiary"},"is_urban":true,"admin_index":0,"out":0,"weight":13.828,"geometry_index":15,"location":[-121.464625,38.565172]},{"entry":[true,false],"in":1,"bearings":[18,198],"duration":4.819,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"tertiary"},"is_urban":true,"admin_index":0,"out":0,"weight":6.38,"geometry_index":16,"location":[-121.464133,38.566329]},{"bearings":[19,198],"entry":[true,false],"in":1,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"tertiary"},"is_urban":true,"admin_index":0,"out":0,"geometry_index":17,"location":[-121.463914,38.566842]}],"bannerInstructions":[{"primary":{"components":[{"type":"text","text":"Folsom Boulevard"}],"type":"turn","modifier":"right","text":"Folsom Boulevard"},"distanceAlongGeometry":590}],"speedLimitUnit":"mph","maneuver":{"type":"turn","instruction":"Turn left onto 34th Street.","modifier":"left","bearing_after":15,"bearing_before":127,"location":[-121.465929,38.561851]},"speedLimitSign":"mutcd","name":"34th Street","weight_typical":94.199,"duration_typical":64.847,"duration":64.847,"distance":590,"driving_side":"right","weight":94.199,"mode":"driving","geometry":"ubsphApcutfFsIuBan@oO{EeAcDy@oA]iOwDcf@sO}XaJsTeHk_@wLigAw]a_@uLeBk@"},{"voiceInstructions":[{"ssmlAnnouncement":"Continue for 1 mile.","announcement":"Continue for 1 mile.","distanceAlongGeometry":1423},{"ssmlAnnouncement":"In a quarter mile, Turn left onto 46th Street.","announcement":"In a quarter mile, Turn left onto 46th Street.","distanceAlongGeometry":402.336},{"ssmlAnnouncement":"Turn left onto 46th Street.","announcement":"Turn left onto 46th Street.","distanceAlongGeometry":95}],"intersections":[{"entry":[true,false],"in":1,"bearings":[54,199],"duration":6.067,"turn_weight":0.75,"turn_duration":0.067,"mapbox_streets_v8":{"class":"tertiary_link"},"is_urban":true,"admin_index":0,"out":0,"weight":8.1,"geometry_index":18,"location":[-121.463892,38.566893]},{"entry":[true,false],"in":1,"bearings":[97,234],"duration":8.922,"turn_weight":2,"turn_duration":0.122,"mapbox_streets_v8":{"class":"tertiary_link"},"is_urban":true,"admin_index":0,"out":0,"weight":12.78,"geometry_index":21,"location":[-121.463757,38.566969]},{"entry":[true,false],"in":1,"bearings":[136,279],"duration":1.078,"turn_weight":5.75,"turn_duration":0.088,"mapbox_streets_v8":{"class":"primary"},"is_urban":true,"admin_index":0,"out":0,"weight":6.963,"geometry_index":24,"location":[-121.463516,38.566944]},{"entry":[true,false],"in":1,"bearings":[131,316],"duration":2.184,"turn_duration":0.024,"mapbox_streets_v8":{"class":"primary"},"is_urban":true,"admin_index":0,"out":0,"weight":2.646,"geometry_index":25,"location":[-121.463425,38.566871]},{"entry":[true,false],"in":1,"bearings":[123,310],"duration":0.673,"turn_duration":0.033,"mapbox_streets_v8":{"class":"primary"},"is_urban":true,"admin_index":0,"out":0,"weight":0.784,"geometry_index":28,"location":[-121.463216,38.566731]},{"entry":[true,false],"in":1,"bearings":[114,303],"duration":2.46,"turn_duration":0.036,"mapbox_streets_v8":{"class":"primary"},"is_urban":true,"admin_index":0,"out":0,"weight":2.97,"geometry_index":29,"location":[-121.463143,38.566694]},{"entry":[true,false],"in":1,"bearings":[109,290],"duration":2.298,"turn_duration":0.021,"mapbox_streets_v8":{"class":"primary"},"is_urban":true,"admin_index":0,"out":0,"weight":2.79,"geometry_index":32,"location":[-121.462794,38.566579]},{"entry":[true,false],"in":1,"bearings":[111,289],"duration":1.841,"turn_duration":0.008,"mapbox_streets_v8":{"class":"primary"},"is_urban":true,"admin_index":0,"out":0,"weight":2.245,"geometry_index":33,"location":[-121.462461,38.566488]},{"entry":[true,false],"in":1,"bearings":[109,291],"duration":4.54,"turn_duration":0.022,"mapbox_streets_v8":{"class":"primary"},"is_urban":true,"admin_index":0,"out":0,"weight":5.534,"geometry_index":34,"location":[-121.462161,38.566398]},{"entry":[true,false],"in":1,"bearings":[109,289],"duration":0.766,"turn_duration":0.019,"mapbox_streets_v8":{"class":"primary"},"is_urban":true,"admin_index":0,"out":0,"weight":0.915,"geometry_index":35,"location":[-121.461468,38.566216]},{"entry":[true,false],"in":1,"bearings":[109,289],"duration":8.839,"turn_duration":0.019,"mapbox_streets_v8":{"class":"primary"},"is_urban":true,"admin_index":0,"out":0,"weight":10.805,"geometry_index":36,"location":[-121.46135,38.566185]},{"entry":[true,false],"in":1,"bearings":[109,289],"duration":2.843,"turn_duration":0.019,"mapbox_streets_v8":{"class":"primary"},"is_urban":true,"admin_index":0,"out":0,"weight":3.459,"geometry_index":37,"location":[-121.460815,38.566037]},{"entry":[true,false],"in":1,"bearings":[110,289],"duration":0.643,"turn_duration":0.007,"mapbox_streets_v8":{"class":"primary"},"is_urban":true,"admin_index":0,"out":0,"weight":0.778,"geometry_index":38,"location":[-121.460378,38.565917]},{"entry":[true,false],"in":1,"bearings":[109,290],"duration":0.976,"turn_duration":0.021,"mapbox_streets_v8":{"class":"primary"},"is_urban":true,"admin_index":0,"out":0,"weight":1.17,"geometry_index":39,"location":[-121.460285,38.565891]},{"entry":[true,false],"in":1,"bearings":[110,289],"duration":0.341,"turn_duration":0.007,"mapbox_streets_v8":{"class":"primary"},"is_urban":true,"admin_index":0,"out":0,"weight":0.408,"geometry_index":40,"location":[-121.46014,38.565851]},{"entry":[true,false],"in":1,"bearings":[109,290],"duration":2.021,"turn_duration":0.021,"mapbox_streets_v8":{"class":"primary"},"is_urban":true,"admin_index":0,"out":0,"weight":2.45,"geometry_index":41,"location":[-121.46009,38.565837]},{"entry":[true,false],"in":1,"bearings":[109,289],"duration":1.819,"turn_duration":0.019,"mapbox_streets_v8":{"class":"primary"},"is_urban":true,"admin_index":0,"out":0,"weight":2.205,"geometry_index":42,"location":[-121.459761,38.565747]},{"entry":[true,false],"in":1,"bearings":[109,289],"duration":2.179,"turn_duration":0.019,"mapbox_streets_v8":{"class":"primary"},"is_urban":true,"admin_index":0,"out":0,"weight":2.646,"geometry_index":43,"location":[-121.459473,38.565669]},{"entry":[true,false],"in":1,"bearings":[108,289],"duration":1.721,"turn_duration":0.019,"mapbox_streets_v8":{"class":"primary"},"is_urban":true,"admin_index":0,"out":0,"weight":2.085,"geometry_index":44,"location":[-121.459114,38.56557]},{"entry":[true,false],"in":1,"bearings":[109,288],"duration":3.815,"turn_duration":0.019,"mapbox_streets_v8":{"class":"primary"},"is_urban":true,"admin_index":0,"out":0,"weight":4.651,"geometry_index":45,"location":[-121.458828,38.565496]},{"entry":[true,false],"in":1,"bearings":[109,289],"duration":1.419,"turn_duration":0.019,"mapbox_streets_v8":{"class":"primary"},"is_urban":true,"admin_index":0,"out":0,"weight":1.715,"geometry_index":46,"location":[-121.458203,38.565326]},{"entry":[true,false],"in":1,"bearings":[109,289],"duration":3.065,"turn_duration":0.019,"mapbox_streets_v8":{"class":"primary"},"is_urban":true,"admin_index":0,"out":0,"weight":3.732,"geometry_index":47,"location":[-121.457976,38.565265]},{"entry":[true,false],"in":1,"bearings":[109,289],"duration":5.514,"turn_duration":0.019,"mapbox_streets_v8":{"class":"primary"},"is_urban":true,"admin_index":0,"out":0,"weight":6.731,"geometry_index":48,"location":[-121.457494,38.565135]},{"entry":[true,false],"in":1,"bearings":[110,289],"duration":1.633,"turn_duration":0.007,"mapbox_streets_v8":{"class":"primary"},"is_urban":true,"admin_index":0,"out":0,"weight":1.992,"geometry_index":49,"location":[-121.456869,38.564966]},{"entry":[true,false],"in":1,"bearings":[109,290],"duration":4.921,"turn_duration":0.021,"mapbox_streets_v8":{"class":"primary"},"is_urban":true,"admin_index":0,"out":0,"weight":6.003,"geometry_index":50,"location":[-121.456716,38.564922]},{"entry":[true,false],"in":1,"bearings":[110,289],"duration":4.783,"turn_duration":0.007,"mapbox_streets_v8":{"class":"primary"},"is_urban":true,"admin_index":0,"out":0,"weight":5.85,"geometry_index":51,"location":[-121.456186,38.564776]},{"entry":[true,false],"in":1,"bearings":[109,290],"duration":2.621,"turn_duration":0.021,"mapbox_streets_v8":{"class":"primary"},"is_urban":true,"admin_index":0,"out":0,"weight":3.185,"geometry_index":52,"location":[-121.455486,38.56458]},{"entry":[true,false],"in":1,"bearings":[109,289],"duration":0.87,"turn_duration":0.019,"mapbox_streets_v8":{"class":"primary"},"is_urban":true,"admin_index":0,"out":0,"weight":1.042,"geometry_index":53,"location":[-121.45506,38.564464]},{"entry":[true,false],"in":1,"bearings":[109,289],"duration":3.952,"turn_duration":0.019,"mapbox_streets_v8":{"class":"primary"},"is_urban":true,"admin_index":0,"out":0,"weight":4.818,"geometry_index":54,"location":[-121.454917,38.564425]},{"entry":[true,false],"in":1,"bearings":[109,289],"duration":2.686,"turn_duration":0.019,"mapbox_streets_v8":{"class":"primary"},"is_urban":true,"admin_index":0,"out":0,"weight":3.267,"geometry_index":55,"location":[-121.45428,38.564253]},{"entry":[true,false],"in":1,"bearings":[109,289],"duration":0.082,"turn_duration":0.019,"mapbox_streets_v8":{"class":"primary"},"is_urban":true,"admin_index":0,"out":0,"weight":0.077,"geometry_index":56,"location":[-121.453845,38.564135]},{"entry":[true,false],"in":1,"bearings":[109,289],"duration":6.676,"turn_duration":0.019,"mapbox_streets_v8":{"class":"primary"},"is_urban":true,"admin_index":0,"out":0,"weight":8.154,"geometry_index":57,"location":[-121.453833,38.564132]},{"entry":[true,false],"in":1,"bearings":[109,289],"duration":0.544,"turn_duration":0.019,"mapbox_streets_v8":{"class":"primary"},"is_urban":true,"admin_index":0,"out":0,"weight":0.643,"geometry_index":58,"location":[-121.452772,38.563844]},{"entry":[true,false],"in":1,"bearings":[109,289],"duration":5.028,"turn_duration":0.019,"mapbox_streets_v8":{"class":"primary"},"is_urban":true,"admin_index":0,"out":0,"weight":6.136,"geometry_index":59,"location":[-121.4527,38.563825]},{"entry":[true,false],"in":1,"bearings":[109,289],"duration":2.21,"turn_duration":0.019,"mapbox_streets_v8":{"class":"primary"},"is_urban":true,"admin_index":0,"out":0,"weight":2.684,"geometry_index":60,"location":[-121.452004,38.563637]},{"entry":[true,false],"in":1,"bearings":[109,289],"duration":6.434,"turn_duration":0.019,"mapbox_streets_v8":{"class":"primary"},"is_urban":true,"admin_index":0,"out":0,"weight":7.858,"geometry_index":61,"location":[-121.451699,38.563554]},{"entry":[true,false],"in":1,"bearings":[109,289],"duration":6.139,"turn_duration":0.019,"mapbox_streets_v8":{"class":"primary"},"is_urban":true,"admin_index":0,"out":0,"weight":7.344,"geometry_index":62,"location":[-121.450631,38.563264]},{"entry":[true,false],"in":1,"bearings":[116,296],"duration":6.272,"turn_duration":0.019,"mapbox_streets_v8":{"class":"primary"},"is_urban":true,"admin_index":0,"out":0,"weight":7.503,"geometry_index":65,"location":[-121.449564,38.56289]},{"bearings":[117,296],"entry":[true,false],"in":1,"turn_duration":0.007,"mapbox_streets_v8":{"class":"primary"},"is_urban":true,"admin_index":0,"out":0,"geometry_index":66,"location":[-121.448544,38.562493]}],"bannerInstructions":[{"primary":{"components":[{"type":"text","text":"46th Street"}],"type":"turn","modifier":"left","text":"46th Street"},"distanceAlongGeometry":1444}],"speedLimitUnit":"mph","maneuver":{"type":"turn","instruction":"Turn right onto Folsom Boulevard.","modifier":"right","bearing_after":136,"bearing_before":19,"location":[-121.463892,38.566893]},"speedLimitSign":"mutcd","name":"Folsom Boulevard","weight_typical":149.03,"duration_typical":115.924,"duration":121.416,"distance":1444,"driving_side":"right","weight":155.757,"mode":"driving","geometry":"y}|phAfdqtfFu@mAcAgB]wAOq@MyCnAuGpCuDhCsDzBiEPc@hAqCNa@xAeFzBqLtDySrDwQjJij@|@kFfHm`@nFiZr@yDnAaHZcBrDqSzC_QdEmUrC{PrIaf@xBeMbGc]pIaf@vAqHbHc`@fKwj@fFsYlA}GvIyf@jFeZDW~PiaAd@oCvJoj@dDaRbQwaA`CaNpB{IvNwg@xWw~@`AgD"},{"voiceInstructions":[{"ssmlAnnouncement":"Continue for a half mile.","announcement":"Continue for a half mile.","distanceAlongGeometry":605},{"ssmlAnnouncement":"In a quarter mile, Turn right onto J Street.","announcement":"In a quarter mile, Turn right onto J Street.","distanceAlongGeometry":402.336},{"ssmlAnnouncement":"Turn right onto J Street. Then Turn right onto 47th Street.","announcement":"Turn right onto J Street. Then Turn right onto 47th Street.","distanceAlongGeometry":60.833}],"intersections":[{"entry":[true,false],"in":1,"bearings":[19,297],"duration":40.888,"turn_weight":15,"turn_duration":6.281,"mapbox_streets_v8":{"class":"street"},"is_urban":true,"admin_index":0,"out":0,"weight":56.528,"geometry_index":67,"location":[-121.44846,38.56246]},{"bearings":[19,199],"entry":[true,false],"in":1,"turn_weight":2,"turn_duration":0.019,"mapbox_streets_v8":{"class":"street"},"is_urban":true,"admin_index":0,"out":0,"geometry_index":68,"location":[-121.447339,38.564994]}],"bannerInstructions":[{"primary":{"components":[{"type":"text","text":"J Street"}],"type":"turn","modifier":"right","text":"J Street"},"distanceAlongGeometry":615},{"sub":{"components":[{"type":"text","text":"47th Street"}],"type":"turn","modifier":"right","text":"47th Street"},"primary":{"components":[{"type":"text","text":"J Street"}],"type":"turn","modifier":"right","text":"J Street"},"distanceAlongGeometry":402.336}],"speedLimitUnit":"mph","maneuver":{"type":"turn","instruction":"Turn left onto 46th Street.","modifier":"left","bearing_after":19,"bearing_before":117,"location":[-121.44846,38.56246]},"speedLimitSign":"mutcd","name":"46th Street","weight_typical":92.051,"duration_typical":69.437,"duration":69.437,"distance":615,"driving_side":"right","weight":92.051,"mode":"driving","geometry":"whtphAv_ssfFk}CaeA}fDmiA"},{"voiceInstructions":[{"ssmlAnnouncement":"Turn right onto 47th Street. Then Your destination will be on the right.","announcement":"Turn right onto 47th Street. Then Your destination will be on the right.","distanceAlongGeometry":81.333}],"intersections":[{"entry":[true,false],"in":1,"bearings":[109,199],"duration":4.193,"turn_weight":10,"turn_duration":2.005,"mapbox_streets_v8":{"class":"secondary"},"is_urban":true,"admin_index":0,"out":0,"weight":12.571,"geometry_index":69,"location":[-121.446148,38.567681]},{"bearings":[109,289],"entry":[true,false],"in":1,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"secondary"},"is_urban":true,"admin_index":0,"out":0,"geometry_index":70,"location":[-121.445806,38.567591]}],"bannerInstructions":[{"primary":{"components":[{"type":"text","text":"47th Street"}],"type":"turn","modifier":"right","text":"47th Street"},"distanceAlongGeometry":100}],"speedLimitUnit":"mph","maneuver":{"type":"end of road","instruction":"Turn right onto J Street.","modifier":"right","bearing_after":109,"bearing_before":19,"location":[-121.446148,38.567681]},"speedLimitSign":"mutcd","name":"J Street","weight_typical":19.705,"duration_typical":9.858,"duration":9.858,"distance":100,"driving_side":"right","weight":19.705,"mode":"driving","geometry":"ao~phAfonsfFrDkTpK}m@"},{"voiceInstructions":[{"ssmlAnnouncement":"Your destination is on the right.","announcement":"Your destination is on the right.","distanceAlongGeometry":41.667}],"intersections":[{"bearings":[199,289],"entry":[true,false],"in":1,"turn_weight":8,"turn_duration":2.105,"mapbox_streets_v8":{"class":"street"},"is_urban":true,"admin_index":0,"out":0,"geometry_index":71,"location":[-121.445055,38.56739]}],"bannerInstructions":[{"primary":{"components":[{"type":"text","text":"Your destination will be on the right"}],"type":"arrive","modifier":"right","text":"Your destination will be on the right"},"distanceAlongGeometry":51.846},{"primary":{"components":[{"type":"text","text":"Your destination is on the right"}],"type":"arrive","modifier":"right","text":"Your destination is on the right"},"distanceAlongGeometry":41.667}],"speedLimitUnit":"mph","maneuver":{"type":"turn","instruction":"Turn right onto 47th Street.","modifier":"right","bearing_after":199,"bearing_before":109,"location":[-121.445055,38.56739]},"speedLimitSign":"mutcd","name":"47th Street","weight_typical":14.266,"duration_typical":7.438,"duration":7.438,"distance":51.846,"driving_side":"right","weight":14.266,"mode":"driving","geometry":"{|}phA|jlsfFnZbK"},{"voiceInstructions":[],"intersections":[{"bearings":[19],"entry":[true],"in":0,"admin_index":0,"geometry_index":72,"location":[-121.445249,38.56695]}],"bannerInstructions":[],"speedLimitUnit":"mph","maneuver":{"type":"arrive","instruction":"Your destination is on the right.","modifier":"right","bearing_after":0,"bearing_before":199,"location":[-121.445249,38.56695]},"speedLimitSign":"mutcd","name":"47th Street","weight_typical":0,"duration_typical":0,"duration":0,"distance":0,"driving_side":"right","weight":0,"mode":"driving","geometry":"ka}phA`wlsfF??"}],"distance":2947.293,"summary":"Folsom Boulevard, 46th Street"}],"geometry":"ahtphArowtfFfHbCfBn@dCuNnNgx@dDwGsIuBan@oO{EeAcDy@oA]iOwDcf@sO}XaJsTeHk_@wLigAw]a_@uLeBk@u@mAcAgB]wAOq@MyCnAuGpCuDhCsDzBiEPc@hAqCNa@xAeFzBqLtDySrDwQjJij@|@kFfHm`@nFiZr@yDnAaHZcBrDqSzC_QdEmUrC{PrIaf@xBeMbGc]pIaf@vAqHbHc`@fKwj@fFsYlA}GvIyf@jFeZDW~PiaAd@oCvJoj@dDaRbQwaA`CaNpB{IvNwg@xWw~@`AgDk}CaeA}fDmiArDkTpK}m@nZbK","voiceLocale":"en-US"},{"weight_typical":517.866,"duration_typical":320.427,"weight_name":"auto","weight":517.866,"duration":320.427,"distance":2965.293,"legs":[{"admins":[{"iso_3166_1_alpha3":"USA","iso_3166_1":"US"}],"annotation":{"maxspeed":[{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true},{"unknown":true}],"congestion":["unknown","unknown","unknown","unknown","unknown","unknown","low","unknown","unknown","unknown","unknown","unknown","low","unknown","low","low","low","unknown","moderate","moderate","moderate","unknown","unknown","unknown","unknown","unknown","low","low","low","low","low","low","low","low","low","low","low","low","unknown","low","moderate","unknown","unknown","low","low","low","low","low","low","low","low","low","unknown","low","unknown","unknown","unknown","low","low","unknown","low","unknown","low","low","unknown","low","low","low","unknown","unknown"],"speed":[4.2,5.6,11.4,9.7,9.7,11.1,10.6,5.3,5.6,5.6,5.6,12.2,11.4,12.2,11.9,12.5,12.5,7.2,3.6,3.6,3.6,10.3,10.3,10.3,6.1,6.1,8.3,6.9,6.7,6.4,4.7,13.1,13.6,12.5,12.8,13.1,11.9,10.6,11.7,11.7,8.3,9.7,10,11.1,10.3,10.8,8.9,10.3,10.3,10,12.5,11.7,14.2,14.7,15.3,15,15,15.3,14.4,10.8,11.1,13.6,14.7,13.9,15,14.4,14.7,14.2,12.2,9.7],"distance":[17.4,6.2,23.1,84.4,15.3,19.6,86.9,12.6,9.5,4.6,30.1,73.4,48.7,40.6,60.8,135.7,60.2,6,14.2,3,14.3,23.4,1.8,19,31.5,65.7,92.5,140.1,80.3,69.2,50.8,79.2,66.4,39.8,31.1,51.4,27,65,7.3,50.8,30.6,7.7,25.5,20.8,29,50.3,16.3,27,44,15.8,11.8,84.4,55,32.5,43.4,43.7,12,60.9,35,50.2,50.8,31,68.1,75.6,25.2,54.3,54.3,31.4,69.1,51.8],"duration":[4.187,1.108,2.027,8.679,1.573,1.765,8.234,2.391,1.705,0.835,5.425,6.008,4.276,3.321,5.087,10.858,4.816,0.83,3.927,0.844,3.964,2.275,0.176,1.849,5.158,10.755,11.103,20.177,12.046,10.839,10.757,6.066,4.882,3.184,2.432,3.937,2.258,6.157,0.626,4.357,3.675,0.793,2.548,1.873,2.826,4.647,1.837,2.628,4.277,1.579,0.947,7.237,3.883,2.205,2.841,2.913,0.803,3.986,2.421,4.636,4.568,2.277,4.628,5.447,1.68,3.758,3.687,2.217,5.653,5.333]},"weight_typical":517.866,"duration_typical":320.427,"weight":517.866,"duration":320.427,"steps":[{"voiceInstructions":[{"ssmlAnnouncement":"Drive south. Then Turn left onto S Street.","announcement":"Drive south. Then Turn left onto S Street.","distanceAlongGeometry":23.448}],"intersections":[{"classes":["restricted"],"entry":[true],"bearings":[199],"duration":4.187,"mapbox_streets_v8":{"class":"service"},"is_urban":true,"admin_index":0,"out":0,"weight":5.13,"geometry_index":0,"location":[-121.467146,38.562449]},{"bearings":[19,200],"entry":[false,true],"in":0,"turn_weight":20.25,"mapbox_streets_v8":{"class":"service"},"is_urban":true,"admin_index":0,"out":1,"geometry_index":1,"location":[-121.467212,38.562301]}],"bannerInstructions":[{"primary":{"components":[{"type":"text","text":"S Street"}],"type":"turn","modifier":"left","text":"S Street"},"distanceAlongGeometry":23.448}],"speedLimitUnit":"mph","maneuver":{"type":"depart","instruction":"Drive south.","bearing_after":199,"bearing_before":0,"location":[-121.467146,38.562449]},"speedLimitSign":"mutcd","name":"","weight_typical":26.703,"duration_typical":5.267,"duration":5.267,"distance":23.448,"driving_side":"right","weight":26.703,"mode":"driving","geometry":"ahtphArowtfFfHbCfBn@"},{"voiceInstructions":[{"ssmlAnnouncement":"In 400 feet, Turn left onto 34th Street.","announcement":"In 400 feet, Turn left onto 34th Street.","distanceAlongGeometry":113},{"ssmlAnnouncement":"Turn left onto 34th Street.","announcement":"Turn left onto 34th Street.","distanceAlongGeometry":50}],"intersections":[{"entry":[false,true],"in":0,"bearings":[20,109],"duration":7.641,"turn_weight":31.25,"turn_duration":5.622,"mapbox_streets_v8":{"class":"street"},"is_urban":true,"admin_index":0,"out":1,"weight":33.724,"geometry_index":2,"location":[-121.467236,38.562249]},{"bearings":[109,289],"entry":[true,false],"in":1,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"street"},"is_urban":true,"admin_index":0,"out":0,"geometry_index":3,"location":[-121.466985,38.562182]}],"bannerInstructions":[{"primary":{"components":[{"type":"text","text":"34th Street"}],"type":"turn","modifier":"left","text":"34th Street"},"distanceAlongGeometry":123}],"speedLimitUnit":"mph","maneuver":{"type":"end of road","instruction":"Turn left onto S Street.","modifier":"left","bearing_after":109,"bearing_before":200,"location":[-121.467236,38.562249]},"speedLimitSign":"mutcd","name":"S Street","weight_typical":46.824,"duration_typical":17.946,"duration":17.946,"distance":123,"driving_side":"right","weight":46.824,"mode":"driving","geometry":"q{sphAfuwtfFdCuNnNgx@dDwG"},{"voiceInstructions":[{"ssmlAnnouncement":"Continue for a half mile.","announcement":"Continue for a half mile.","distanceAlongGeometry":607.667},{"ssmlAnnouncement":"In a quarter mile, Turn left onto Folsom Boulevard.","announcement":"In a quarter mile, Turn left onto Folsom Boulevard.","distanceAlongGeometry":402.336},{"ssmlAnnouncement":"Turn left onto Folsom Boulevard. Then Turn right onto 33rd Street.","announcement":"Turn left onto Folsom Boulevard. Then Turn right onto 33rd Street.","distanceAlongGeometry":81.111}],"intersections":[{"entry":[true,false],"in":1,"bearings":[15,307],"duration":8.805,"turn_weight":15,"turn_duration":7.005,"mapbox_streets_v8":{"class":"tertiary"},"is_urban":true,"admin_index":0,"out":0,"weight":17.205,"geometry_index":5,"location":[-121.465929,38.561851]},{"entry":[true,false],"in":1,"bearings":[15,195],"duration":8.261,"turn_weight":3.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"tertiary"},"is_urban":true,"admin_index":0,"out":0,"weight":13.597,"geometry_index":6,"location":[-121.46587,38.562021]},{"entry":[true,false],"in":1,"bearings":[14,195],"duration":2.484,"turn_weight":2,"turn_duration":0.021,"mapbox_streets_v8":{"class":"tertiary"},"is_urban":true,"admin_index":0,"out":0,"weight":5.017,"geometry_index":7,"location":[-121.465606,38.562774]},{"entry":[true,false],"in":1,"bearings":[16,194],"duration":7.927,"turn_weight":0.5,"turn_duration":0.007,"mapbox_streets_v8":{"class":"tertiary"},"is_urban":true,"admin_index":0,"out":0,"weight":10.202,"geometry_index":8,"location":[-121.465571,38.562884]},{"entry":[true,false],"in":1,"bearings":[18,195],"duration":7.981,"turn_weight":2,"turn_duration":2.008,"mapbox_streets_v8":{"class":"tertiary"},"is_urban":true,"admin_index":0,"out":0,"weight":9.317,"geometry_index":11,"location":[-121.465435,38.563267]},{"entry":[true,false],"in":1,"bearings":[18,198],"duration":4.322,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"tertiary"},"is_urban":true,"admin_index":0,"out":0,"weight":5.77,"geometry_index":12,"location":[-121.465169,38.563893]},{"entry":[true,false],"in":1,"bearings":[18,198],"duration":3.374,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"tertiary"},"is_urban":true,"admin_index":0,"out":0,"weight":4.609,"geometry_index":13,"location":[-121.464992,38.564308]},{"entry":[true,false],"in":1,"bearings":[18,198],"duration":5.126,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"tertiary"},"is_urban":true,"admin_index":0,"out":0,"weight":6.756,"geometry_index":14,"location":[-121.464845,38.564654]},{"entry":[true,false],"in":1,"bearings":[18,198],"duration":10.899,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"tertiary"},"is_urban":true,"admin_index":0,"out":0,"weight":13.828,"geometry_index":15,"location":[-121.464625,38.565172]},{"entry":[true,false],"in":1,"bearings":[18,198],"duration":4.819,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"tertiary"},"is_urban":true,"admin_index":0,"out":0,"weight":6.38,"geometry_index":16,"location":[-121.464133,38.566329]},{"entry":[true,false],"in":1,"bearings":[19,198],"duration":0.85,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"tertiary"},"is_urban":true,"admin_index":0,"out":0,"weight":1.518,"geometry_index":17,"location":[-121.463914,38.566842]},{"entry":[true,false],"in":1,"bearings":[18,199],"duration":3.896,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"tertiary"},"is_urban":true,"admin_index":0,"out":0,"weight":5.249,"geometry_index":18,"location":[-121.463892,38.566893]},{"entry":[true,false],"in":1,"bearings":[18,198],"duration":0.85,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"tertiary"},"is_urban":true,"admin_index":0,"out":0,"weight":1.518,"geometry_index":19,"location":[-121.463841,38.567014]},{"bearings":[18,198],"entry":[true,false],"in":1,"turn_weight":2,"turn_duration":0.019,"mapbox_streets_v8":{"class":"tertiary"},"is_urban":true,"admin_index":0,"out":0,"geometry_index":20,"location":[-121.46383,38.56704]}],"bannerInstructions":[{"primary":{"components":[{"type":"text","text":"Folsom Boulevard"}],"type":"turn","modifier":"left","text":"Folsom Boulevard"},"distanceAlongGeometry":621},{"sub":{"components":[{"type":"text","text":"33rd Street"}],"type":"turn","modifier":"right","text":"33rd Street"},"primary":{"components":[{"type":"text","text":"Folsom Boulevard"}],"type":"turn","modifier":"left","text":"Folsom Boulevard"},"distanceAlongGeometry":402.336}],"speedLimitUnit":"mph","maneuver":{"type":"turn","instruction":"Turn left onto 34th Street.","modifier":"left","bearing_after":15,"bearing_before":127,"location":[-121.465929,38.561851]},"speedLimitSign":"mutcd","name":"34th Street","weight_typical":107.715,"duration_typical":73.489,"duration":73.489,"distance":621,"driving_side":"right","weight":107.715,"mode":"driving","geometry":"ubsphApcutfFsIuBan@oO{EeAcDy@oA]iOwDcf@sO}XaJsTeHk_@wLigAw]a_@uLeBk@qFeBs@UsFgB"},{"voiceInstructions":[{"ssmlAnnouncement":"Turn right onto 33rd Street.","announcement":"Turn right onto 33rd Street.","distanceAlongGeometry":44}],"intersections":[{"entry":[false,true],"in":0,"bearings":[198,317],"duration":3.93,"turn_weight":20,"turn_duration":1.693,"mapbox_streets_v8":{"class":"primary"},"is_urban":true,"admin_index":0,"out":1,"weight":22.741,"geometry_index":21,"location":[-121.463778,38.567162]},{"entry":[false,true],"in":0,"bearings":[137,317],"duration":0.195,"mapbox_streets_v8":{"class":"primary"},"is_urban":true,"admin_index":0,"out":1,"weight":0.238,"geometry_index":22,"location":[-121.463962,38.567315]},{"bearings":[137,317],"entry":[false,true],"in":0,"turn_duration":0.019,"mapbox_streets_v8":{"class":"primary"},"is_urban":true,"admin_index":0,"out":1,"geometry_index":23,"location":[-121.463976,38.567327]}],"bannerInstructions":[{"primary":{"components":[{"type":"text","text":"33rd Street"}],"type":"turn","modifier":"right","text":"33rd Street"},"distanceAlongGeometry":44}],"speedLimitUnit":"mph","maneuver":{"type":"end of road","instruction":"Turn left onto Folsom Boulevard.","modifier":"left","bearing_after":317,"bearing_before":18,"location":[-121.463778,38.567162]},"speedLimitSign":"mutcd","name":"Folsom Boulevard","weight_typical":25.244,"duration_typical":5.993,"duration":5.993,"distance":44,"driving_side":"right","weight":25.244,"mode":"driving","geometry":"sn}phAb}ptfFqHnJWZwFjH"},{"voiceInstructions":[{"ssmlAnnouncement":"In a quarter mile, Turn right onto J Street.","announcement":"In a quarter mile, Turn right onto J Street.","distanceAlongGeometry":521},{"ssmlAnnouncement":"Turn right onto J Street.","announcement":"Turn right onto J Street.","distanceAlongGeometry":50}],"intersections":[{"entry":[true,false],"in":1,"bearings":[19,137],"duration":5.632,"turn_weight":8,"turn_duration":0.395,"mapbox_streets_v8":{"class":"street"},"is_urban":true,"admin_index":0,"out":0,"weight":14.415,"geometry_index":24,"location":[-121.464126,38.567451]},{"entry":[true,false],"in":1,"bearings":[19,199],"duration":10.819,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"street"},"is_urban":true,"admin_index":0,"out":0,"weight":13.73,"geometry_index":25,"location":[-121.464009,38.567719]},{"entry":[true,false],"in":1,"bearings":[19,199],"duration":11.179,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"street"},"is_urban":true,"admin_index":0,"out":0,"weight":14.171,"geometry_index":26,"location":[-121.463766,38.568278]},{"entry":[true,false],"in":1,"bearings":[19,199],"duration":20.179,"turn_weight":2,"turn_duration":0.019,"mapbox_streets_v8":{"class":"street"},"is_urban":true,"admin_index":0,"out":0,"weight":26.696,"geometry_index":27,"location":[-121.463424,38.569065]},{"entry":[true,false],"in":1,"bearings":[19,199],"duration":12.019,"turn_weight":2,"turn_duration":0.019,"mapbox_streets_v8":{"class":"street"},"is_urban":true,"admin_index":0,"out":0,"weight":16.7,"geometry_index":28,"location":[-121.462907,38.570257]},{"entry":[true,false],"in":1,"bearings":[19,199],"duration":10.819,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"street"},"is_urban":true,"admin_index":0,"out":0,"weight":13.73,"geometry_index":29,"location":[-121.46261,38.57094]},{"bearings":[19,199],"entry":[true,false],"in":1,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"street"},"is_urban":true,"admin_index":0,"out":0,"geometry_index":30,"location":[-121.462354,38.571529]}],"bannerInstructions":[{"primary":{"components":[{"type":"text","text":"J Street"}],"type":"turn","modifier":"right","text":"J Street"},"distanceAlongGeometry":531}],"speedLimitUnit":"mph","maneuver":{"type":"turn","instruction":"Turn right onto 33rd Street.","modifier":"right","bearing_after":19,"bearing_before":317,"location":[-121.464126,38.567451]},"speedLimitSign":"mutcd","name":"33rd Street","weight_typical":113.172,"duration_typical":81.466,"duration":81.466,"distance":531,"driving_side":"right","weight":113.172,"mode":"driving","geometry":"u`~phAzrqtfFwOiF}a@eNep@kToiAi_@ui@qQyc@_O_ZwJ"},{"voiceInstructions":[{"ssmlAnnouncement":"Continue for 1 mile.","announcement":"Continue for 1 mile.","distanceAlongGeometry":1554.666},{"ssmlAnnouncement":"In a quarter mile, Turn right onto 47th Street.","announcement":"In a quarter mile, Turn right onto 47th Street.","distanceAlongGeometry":402.336},{"ssmlAnnouncement":"Turn right onto 47th Street. Then Your destination will be on the right.","announcement":"Turn right onto 47th Street. Then Your destination will be on the right.","distanceAlongGeometry":122.889}],"intersections":[{"entry":[true,false],"in":1,"bearings":[109,199],"duration":8.056,"turn_weight":10,"turn_duration":2.005,"mapbox_streets_v8":{"class":"secondary"},"is_urban":true,"admin_index":0,"out":0,"weight":17.413,"geometry_index":31,"location":[-121.462166,38.571961]},{"entry":[true,false],"in":1,"bearings":[109,289],"duration":4.868,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"secondary"},"is_urban":true,"admin_index":0,"out":0,"weight":6.44,"geometry_index":32,"location":[-121.461305,38.571731]},{"entry":[true,false],"in":1,"bearings":[109,289],"duration":3.219,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"secondary"},"is_urban":true,"admin_index":0,"out":0,"weight":4.42,"geometry_index":33,"location":[-121.460583,38.571537]},{"entry":[true,false],"in":1,"bearings":[109,289],"duration":2.445,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"secondary"},"is_urban":true,"admin_index":0,"out":0,"weight":3.472,"geometry_index":34,"location":[-121.46015,38.571422]},{"entry":[true,false],"in":1,"bearings":[109,289],"duration":3.926,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"secondary"},"is_urban":true,"admin_index":0,"out":0,"weight":5.285,"geometry_index":35,"location":[-121.459812,38.571332]},{"entry":[true,false],"in":1,"bearings":[109,289],"duration":2.28,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"secondary"},"is_urban":true,"admin_index":0,"out":0,"weight":3.269,"geometry_index":36,"location":[-121.459253,38.571183]},{"entry":[true,false],"in":1,"bearings":[109,289],"duration":6.177,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"secondary"},"is_urban":true,"admin_index":0,"out":0,"weight":8.043,"geometry_index":37,"location":[-121.45896,38.571104]},{"entry":[true,false],"in":1,"bearings":[110,289],"duration":0.607,"turn_weight":0.5,"turn_duration":0.007,"mapbox_streets_v8":{"class":"secondary"},"is_urban":true,"admin_index":0,"out":0,"weight":1.235,"geometry_index":38,"location":[-121.458253,38.570916]},{"entry":[true,false],"in":1,"bearings":[109,290],"duration":4.392,"turn_weight":0.5,"turn_duration":0.021,"mapbox_streets_v8":{"class":"secondary"},"is_urban":true,"admin_index":0,"out":0,"weight":5.855,"geometry_index":39,"location":[-121.458174,38.570894]},{"entry":[true,false],"in":1,"bearings":[109,289],"duration":3.739,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"secondary"},"is_urban":true,"admin_index":0,"out":0,"weight":5.057,"geometry_index":40,"location":[-121.457621,38.570747]},{"entry":[true,false],"in":1,"bearings":[109,289],"duration":0.842,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"secondary"},"is_urban":true,"admin_index":0,"out":0,"weight":1.508,"geometry_index":41,"location":[-121.457288,38.570658]},{"entry":[true,false],"in":1,"bearings":[109,289],"duration":2.519,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"secondary"},"is_urban":true,"admin_index":0,"out":0,"weight":3.562,"geometry_index":42,"location":[-121.457204,38.570636]},{"entry":[true,false],"in":1,"bearings":[109,289],"duration":1.909,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"secondary"},"is_urban":true,"admin_index":0,"out":0,"weight":2.815,"geometry_index":43,"location":[-121.456927,38.570562]},{"entry":[true,false],"in":1,"bearings":[109,289],"duration":2.841,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"secondary"},"is_urban":true,"admin_index":0,"out":0,"weight":3.956,"geometry_index":44,"location":[-121.456701,38.570501]},{"entry":[true,false],"in":1,"bearings":[111,289],"duration":4.623,"turn_weight":0.5,"turn_duration":0.008,"mapbox_streets_v8":{"class":"secondary"},"is_urban":true,"admin_index":0,"out":0,"weight":6.154,"geometry_index":45,"location":[-121.456385,38.570417]},{"entry":[true,false],"in":1,"bearings":[107,291],"duration":1.824,"turn_weight":0.5,"turn_duration":0.024,"mapbox_streets_v8":{"class":"secondary"},"is_urban":true,"admin_index":0,"out":0,"weight":2.705,"geometry_index":46,"location":[-121.455846,38.570253]},{"entry":[true,false],"in":1,"bearings":[108,287],"duration":2.634,"turn_weight":0.5,"turn_duration":0.007,"mapbox_streets_v8":{"class":"secondary"},"is_urban":true,"admin_index":0,"out":0,"weight":3.718,"geometry_index":47,"location":[-121.455667,38.570209]},{"entry":[true,false],"in":1,"bearings":[107,288],"duration":4.302,"turn_weight":0.5,"turn_duration":0.021,"mapbox_streets_v8":{"class":"secondary"},"is_urban":true,"admin_index":0,"out":0,"weight":5.744,"geometry_index":48,"location":[-121.455371,38.570136]},{"entry":[true,false],"in":1,"bearings":[109,287],"duration":1.607,"turn_weight":0.5,"turn_duration":0.007,"mapbox_streets_v8":{"class":"secondary"},"is_urban":true,"admin_index":0,"out":0,"weight":2.42,"geometry_index":49,"location":[-121.454889,38.570018]},{"entry":[true,false],"in":1,"bearings":[111,289],"duration":0.968,"turn_weight":0.5,"turn_duration":0.008,"mapbox_streets_v8":{"class":"secondary"},"is_urban":true,"admin_index":0,"out":0,"weight":1.652,"geometry_index":50,"location":[-121.454717,38.569973]},{"entry":[true,false],"in":1,"bearings":[109,291],"duration":7.222,"turn_weight":0.5,"turn_duration":0.022,"mapbox_streets_v8":{"class":"secondary"},"is_urban":true,"admin_index":0,"out":0,"weight":9.14,"geometry_index":51,"location":[-121.45459,38.569935]},{"entry":[true,false],"in":1,"bearings":[109,289],"duration":3.901,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"secondary"},"is_urban":true,"admin_index":0,"out":0,"weight":5.159,"geometry_index":52,"location":[-121.453671,38.569692]},{"entry":[true,false],"in":1,"bearings":[109,289],"duration":2.193,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"secondary"},"is_urban":true,"admin_index":0,"out":0,"weight":3.108,"geometry_index":53,"location":[-121.453073,38.569532]},{"entry":[true,false],"in":1,"bearings":[109,289],"duration":2.834,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"secondary"},"is_urban":true,"admin_index":0,"out":0,"weight":3.877,"geometry_index":54,"location":[-121.45272,38.569438]},{"entry":[true,false],"in":1,"bearings":[109,289],"duration":2.952,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"secondary"},"is_urban":true,"admin_index":0,"out":0,"weight":4.02,"geometry_index":55,"location":[-121.452248,38.569312]},{"entry":[true,false],"in":1,"bearings":[109,289],"duration":0.819,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"secondary"},"is_urban":true,"admin_index":0,"out":0,"weight":1.46,"geometry_index":56,"location":[-121.451773,38.569185]},{"entry":[true,false],"in":1,"bearings":[109,289],"duration":4.012,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"secondary"},"is_urban":true,"admin_index":0,"out":0,"weight":5.291,"geometry_index":57,"location":[-121.451642,38.56915]},{"entry":[true,false],"in":1,"bearings":[109,289],"duration":2.442,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"secondary"},"is_urban":true,"admin_index":0,"out":0,"weight":3.408,"geometry_index":58,"location":[-121.45098,38.568973]},{"entry":[true,false],"in":1,"bearings":[109,289],"duration":4.635,"turn_weight":2,"turn_duration":0.019,"mapbox_streets_v8":{"class":"secondary"},"is_urban":true,"admin_index":0,"out":0,"weight":7.538,"geometry_index":59,"location":[-121.4506,38.568871]},{"entry":[true,false],"in":1,"bearings":[109,289],"duration":4.609,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"secondary"},"is_urban":true,"admin_index":0,"out":0,"weight":6.008,"geometry_index":60,"location":[-121.450054,38.568725]},{"entry":[true,false],"in":1,"bearings":[109,289],"duration":2.297,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"secondary"},"is_urban":true,"admin_index":0,"out":0,"weight":3.233,"geometry_index":61,"location":[-121.449502,38.568578]},{"entry":[true,false],"in":1,"bearings":[109,289],"duration":4.638,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"secondary"},"is_urban":true,"admin_index":0,"out":0,"weight":6.043,"geometry_index":62,"location":[-121.449165,38.568488]},{"entry":[true,false],"in":1,"bearings":[109,289],"duration":5.491,"turn_weight":2,"turn_duration":0.019,"mapbox_streets_v8":{"class":"secondary"},"is_urban":true,"admin_index":0,"out":0,"weight":8.566,"geometry_index":63,"location":[-121.448423,38.568293]},{"entry":[true,false],"in":1,"bearings":[109,289],"duration":1.686,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"secondary"},"is_urban":true,"admin_index":0,"out":0,"weight":2.458,"geometry_index":64,"location":[-121.447602,38.56807]},{"entry":[true,false],"in":1,"bearings":[109,289],"duration":3.758,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"secondary"},"is_urban":true,"admin_index":0,"out":0,"weight":4.893,"geometry_index":65,"location":[-121.447328,38.567997]},{"entry":[true,false],"in":1,"bearings":[109,289],"duration":3.687,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"secondary"},"is_urban":true,"admin_index":0,"out":0,"weight":4.81,"geometry_index":66,"location":[-121.446738,38.567839]},{"entry":[true,false],"in":1,"bearings":[109,289],"duration":2.207,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"secondary"},"is_urban":true,"admin_index":0,"out":0,"weight":3.071,"geometry_index":67,"location":[-121.446148,38.567681]},{"bearings":[109,289],"entry":[true,false],"in":1,"turn_weight":0.5,"turn_duration":0.019,"mapbox_streets_v8":{"class":"secondary"},"is_urban":true,"admin_index":0,"out":0,"geometry_index":68,"location":[-121.445806,38.567591]}],"bannerInstructions":[{"primary":{"components":[{"type":"text","text":"47th Street"}],"type":"turn","modifier":"right","text":"47th Street"},"distanceAlongGeometry":1571}],"speedLimitUnit":"mph","maneuver":{"type":"end of road","instruction":"Turn right onto J Street.","modifier":"right","bearing_after":109,"bearing_before":19,"location":[-121.462166,38.571961]},"speedLimitSign":"mutcd","name":"J Street","weight_typical":183.942,"duration_typical":128.827,"duration":128.827,"distance":1571,"driving_side":"right","weight":183.942,"mode":"driving","geometry":"qzfqhAjxmtfFjMyt@bKcl@dFaZrDcThH}a@|CiQvJek@j@}CdHqa@pDySj@gDrCiPxBcMfDwRfIu`@vAeJpCoQjFc]xAwIjA}FdNmx@~Hkd@zDaUzFo\\|Fu\\dAeG`Jkh@jEwVbHca@dHoa@rDaTdKkm@|Lir@pCcPzH{c@zH{c@rDkTpK}m@"},{"voiceInstructions":[{"ssmlAnnouncement":"Your destination is on the right.","announcement":"Your destination is on the right.","distanceAlongGeometry":41.667}],"intersections":[{"bearings":[199,289],"entry":[true,false],"in":1,"turn_weight":8,"turn_duration":2.105,"mapbox_streets_v8":{"class":"street"},"is_urban":true,"admin_index":0,"out":0,"geometry_index":69,"location":[-121.445055,38.56739]}],"bannerInstructions":[{"primary":{"components":[{"type":"text","text":"Your destination will be on the right"}],"type":"arrive","modifier":"right","text":"Your destination will be on the right"},"distanceAlongGeometry":51.846},{"primary":{"components":[{"type":"text","text":"Your destination is on the right"}],"type":"arrive","modifier":"right","text":"Your destination is on the right"},"distanceAlongGeometry":41.667}],"speedLimitUnit":"mph","maneuver":{"type":"turn","instruction":"Turn right onto 47th Street.","modifier":"right","bearing_after":199,"bearing_before":109,"location":[-121.445055,38.56739]},"speedLimitSign":"mutcd","name":"47th Street","weight_typical":14.266,"duration_typical":7.438,"duration":7.438,"distance":51.846,"driving_side":"right","weight":14.266,"mode":"driving","geometry":"{|}phA|jlsfFnZbK"},{"voiceInstructions":[],"intersections":[{"bearings":[19],"entry":[true],"in":0,"admin_index":0,"geometry_index":70,"location":[-121.445249,38.56695]}],"bannerInstructions":[],"speedLimitUnit":"mph","maneuver":{"type":"arrive","instruction":"Your destination is on the right.","modifier":"right","bearing_after":0,"bearing_before":199,"location":[-121.445249,38.56695]},"speedLimitSign":"mutcd","name":"47th Street","weight_typical":0,"duration_typical":0,"duration":0,"distance":0,"driving_side":"right","weight":0,"mode":"driving","geometry":"ka}phA`wlsfF??"}],"distance":2965.293,"summary":"34th Street, J Street"}],"geometry":"ahtphArowtfFfHbCfBn@dCuNnNgx@dDwGsIuBan@oO{EeAcDy@oA]iOwDcf@sO}XaJsTeHk_@wLigAw]a_@uLeBk@qFeBs@UsFgBqHnJWZwFjHwOiF}a@eNep@kToiAi_@ui@qQyc@_O_ZwJjMyt@bKcl@dFaZrDcThH}a@|CiQvJek@j@}CdHqa@pDySj@gDrCiPxBcMfDwRfIu`@vAeJpCoQjFc]xAwIjA}FdNmx@~Hkd@zDaUzFo\\|Fu\\dAeG`Jkh@jEwVbHca@dHoa@rDaTdKkm@|Lir@pCcPzH{c@zH{c@rDkTpK}m@nZbK","voiceLocale":"en-US"}],"waypoints":[{"distance":0,"name":"","location":[-121.467146,38.562449]},{"distance":41.273,"name":"47th Street","location":[-121.445249,38.56695]}],"code":"Ok","uuid":"n7gh893qc5n8gc123f4"} \ No newline at end of file +{ + "routes": [ + { + "weight_typical": 442.777, + "duration_typical": 290.718, + "weight_name": "auto", + "weight": 449.504, + "duration": 296.209, + "distance": 2947.293, + "legs": [ + { + "admins": [ + { + "iso_3166_1_alpha3": "USA", + "iso_3166_1": "US" + } + ], + "annotation": { + "maxspeed": [ + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "speed": 56, + "unit": "km/h" + }, + { + "speed": 56, + "unit": "km/h" + }, + { + "speed": 56, + "unit": "km/h" + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + } + ], + "congestion": [ + "unknown", + "unknown", + "unknown", + "unknown", + "unknown", + "unknown", + "low", + "unknown", + "unknown", + "unknown", + "unknown", + "unknown", + "low", + "unknown", + "low", + "low", + "low", + "unknown", + "unknown", + "unknown", + "unknown", + "unknown", + "unknown", + "unknown", + "low", + "low", + "low", + "low", + "moderate", + "low", + "low", + "low", + "unknown", + "unknown", + "low", + "unknown", + "moderate", + "unknown", + "unknown", + "unknown", + "unknown", + "unknown", + "unknown", + "unknown", + "unknown", + "unknown", + "unknown", + "low", + "unknown", + "unknown", + "unknown", + "low", + "low", + "unknown", + "low", + "low", + "unknown", + "low", + "unknown", + "moderate", + "unknown", + "low", + "low", + "low", + "low", + "low", + "unknown", + "low", + "low", + "low", + "unknown", + "unknown" + ], + "speed": [ + 4.2, + 5.6, + 11.4, + 9.7, + 9.7, + 11.1, + 10.6, + 5.3, + 5.6, + 5.6, + 5.6, + 12.2, + 11.4, + 12.2, + 11.9, + 12.5, + 12.5, + 7.2, + 2.5, + 2.5, + 2.5, + 2.5, + 2.5, + 2.5, + 11.1, + 11.1, + 11.1, + 11.1, + 12.5, + 13.6, + 13.6, + 13.6, + 13.6, + 15.3, + 14.2, + 14.7, + 5.6, + 14.2, + 14.2, + 13.6, + 15, + 15, + 15, + 15.3, + 15.3, + 15.3, + 15, + 14.4, + 10.6, + 8.6, + 10, + 13.6, + 15, + 15.3, + 15, + 15, + 15.8, + 14.7, + 13.3, + 12.8, + 12.8, + 15.3, + 16.7, + 16.7, + 16.7, + 15.8, + 15, + 8.6, + 11.1, + 14.2, + 12.2, + 9.7 + ], + "distance": [ + 17.4, + 6.2, + 23.1, + 84.4, + 15.3, + 19.6, + 86.9, + 12.6, + 9.5, + 4.6, + 30.1, + 73.4, + 48.7, + 40.6, + 60.8, + 135.7, + 60.2, + 6, + 4.5, + 5.9, + 4.2, + 2.4, + 6.7, + 12.9, + 11.3, + 11, + 11.2, + 1.9, + 7.6, + 1.7, + 11.2, + 20.1, + 30.7, + 28, + 63.6, + 10.8, + 49.4, + 40.3, + 8.6, + 13.4, + 4.6, + 30.3, + 26.5, + 33.1, + 26.2, + 57.6, + 20.9, + 44.4, + 57.6, + 14.2, + 48.9, + 64.7, + 39.3, + 13.2, + 58.7, + 40.1, + 1.1, + 97.8, + 6.6, + 64.1, + 28.1, + 98.4, + 22.2, + 16.4, + 63.3, + 99.2, + 8.2, + 298.5, + 316.6, + 31.4, + 69.1, + 51.8 + ], + "duration": [ + 4.187, + 1.108, + 2.027, + 8.679, + 1.573, + 1.765, + 8.234, + 2.391, + 1.705, + 0.835, + 5.425, + 6.008, + 4.276, + 3.321, + 5.087, + 10.858, + 4.816, + 0.83, + 1.814, + 2.36, + 1.672, + 0.94, + 2.699, + 5.157, + 1.021, + 0.987, + 1.006, + 0.167, + 0.606, + 0.127, + 0.822, + 1.477, + 2.256, + 1.831, + 4.492, + 0.736, + 8.891, + 2.846, + 0.607, + 0.983, + 0.308, + 2.023, + 1.769, + 2.169, + 1.716, + 3.77, + 1.393, + 3.072, + 5.453, + 1.648, + 4.891, + 4.755, + 2.618, + 0.863, + 3.911, + 2.672, + 0.069, + 6.64, + 0.496, + 5.016, + 2.2, + 6.441, + 1.331, + 0.985, + 3.798, + 6.264, + 0.545, + 34.663, + 28.491, + 2.217, + 5.653, + 5.333 + ] + }, + "weight_typical": 442.777, + "duration_typical": 290.718, + "weight": 449.504, + "duration": 296.209, + "steps": [ + { + "voiceInstructions": [ + { + "ssmlAnnouncement": "Drive south. Then Turn left onto S Street.", + "announcement": "Drive south. Then Turn left onto S Street.", + "distanceAlongGeometry": 23.448 + } + ], + "intersections": [ + { + "classes": [ + "restricted" + ], + "entry": [ + true + ], + "bearings": [ + 199 + ], + "duration": 4.187, + "mapbox_streets_v8": { + "class": "service" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 5.13, + "geometry_index": 0, + "location": [ + -121.467146, + 38.562449 + ] + }, + { + "bearings": [ + 19, + 200 + ], + "entry": [ + false, + true + ], + "in": 0, + "turn_weight": 20.25, + "mapbox_streets_v8": { + "class": "service" + }, + "is_urban": true, + "admin_index": 0, + "out": 1, + "geometry_index": 1, + "location": [ + -121.467212, + 38.562301 + ] + } + ], + "bannerInstructions": [ + { + "primary": { + "components": [ + { + "type": "text", + "text": "S Street" + } + ], + "type": "turn", + "modifier": "left", + "text": "S Street" + }, + "distanceAlongGeometry": 23.448 + } + ], + "speedLimitUnit": "mph", + "maneuver": { + "type": "depart", + "instruction": "Drive south.", + "bearing_after": 199, + "bearing_before": 0, + "location": [ + -121.467146, + 38.562449 + ] + }, + "speedLimitSign": "mutcd", + "name": "", + "weight_typical": 26.703, + "duration_typical": 5.267, + "duration": 5.267, + "distance": 23.448, + "driving_side": "right", + "weight": 26.703, + "mode": "driving", + "geometry": "ahtphArowtfFfHbCfBn@" + }, + { + "voiceInstructions": [ + { + "ssmlAnnouncement": "In 400 feet, Turn left onto 34th Street.", + "announcement": "In 400 feet, Turn left onto 34th Street.", + "distanceAlongGeometry": 113 + }, + { + "ssmlAnnouncement": "Turn left onto 34th Street.", + "announcement": "Turn left onto 34th Street.", + "distanceAlongGeometry": 50 + } + ], + "intersections": [ + { + "entry": [ + false, + true + ], + "in": 0, + "bearings": [ + 20, + 109 + ], + "duration": 7.641, + "turn_weight": 31.25, + "turn_duration": 5.622, + "mapbox_streets_v8": { + "class": "street" + }, + "is_urban": true, + "admin_index": 0, + "out": 1, + "weight": 33.724, + "geometry_index": 2, + "location": [ + -121.467236, + 38.562249 + ] + }, + { + "bearings": [ + 109, + 289 + ], + "entry": [ + true, + false + ], + "in": 1, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "street" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "geometry_index": 3, + "location": [ + -121.466985, + 38.562182 + ] + } + ], + "bannerInstructions": [ + { + "primary": { + "components": [ + { + "type": "text", + "text": "34th Street" + } + ], + "type": "turn", + "modifier": "left", + "text": "34th Street" + }, + "distanceAlongGeometry": 123 + } + ], + "speedLimitUnit": "mph", + "maneuver": { + "type": "end of road", + "instruction": "Turn left onto S Street.", + "modifier": "left", + "bearing_after": 109, + "bearing_before": 200, + "location": [ + -121.467236, + 38.562249 + ] + }, + "speedLimitSign": "mutcd", + "name": "S Street", + "weight_typical": 46.824, + "duration_typical": 17.946, + "duration": 17.946, + "distance": 123, + "driving_side": "right", + "weight": 46.824, + "mode": "driving", + "geometry": "q{sphAfuwtfFdCuNnNgx@dDwG" + }, + { + "voiceInstructions": [ + { + "ssmlAnnouncement": "In a quarter mile, Turn right onto Folsom Boulevard.", + "announcement": "In a quarter mile, Turn right onto Folsom Boulevard.", + "distanceAlongGeometry": 576.667 + }, + { + "ssmlAnnouncement": "Turn right onto Folsom Boulevard.", + "announcement": "Turn right onto Folsom Boulevard.", + "distanceAlongGeometry": 66.667 + } + ], + "intersections": [ + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 15, + 307 + ], + "duration": 8.805, + "turn_weight": 15, + "turn_duration": 7.005, + "mapbox_streets_v8": { + "class": "tertiary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 17.205, + "geometry_index": 5, + "location": [ + -121.465929, + 38.561851 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 15, + 195 + ], + "duration": 8.261, + "turn_weight": 3.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "tertiary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 13.597, + "geometry_index": 6, + "location": [ + -121.46587, + 38.562021 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 14, + 195 + ], + "duration": 2.484, + "turn_weight": 2, + "turn_duration": 0.021, + "mapbox_streets_v8": { + "class": "tertiary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 5.017, + "geometry_index": 7, + "location": [ + -121.465606, + 38.562774 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 16, + 194 + ], + "duration": 7.927, + "turn_weight": 0.5, + "turn_duration": 0.007, + "mapbox_streets_v8": { + "class": "tertiary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 10.202, + "geometry_index": 8, + "location": [ + -121.465571, + 38.562884 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 18, + 195 + ], + "duration": 7.981, + "turn_weight": 2, + "turn_duration": 2.008, + "mapbox_streets_v8": { + "class": "tertiary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 9.317, + "geometry_index": 11, + "location": [ + -121.465435, + 38.563267 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 18, + 198 + ], + "duration": 4.322, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "tertiary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 5.77, + "geometry_index": 12, + "location": [ + -121.465169, + 38.563893 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 18, + 198 + ], + "duration": 3.374, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "tertiary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 4.609, + "geometry_index": 13, + "location": [ + -121.464992, + 38.564308 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 18, + 198 + ], + "duration": 5.126, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "tertiary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 6.756, + "geometry_index": 14, + "location": [ + -121.464845, + 38.564654 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 18, + 198 + ], + "duration": 10.899, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "tertiary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 13.828, + "geometry_index": 15, + "location": [ + -121.464625, + 38.565172 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 18, + 198 + ], + "duration": 4.819, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "tertiary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 6.38, + "geometry_index": 16, + "location": [ + -121.464133, + 38.566329 + ] + }, + { + "bearings": [ + 19, + 198 + ], + "entry": [ + true, + false + ], + "in": 1, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "tertiary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "geometry_index": 17, + "location": [ + -121.463914, + 38.566842 + ] + } + ], + "bannerInstructions": [ + { + "primary": { + "components": [ + { + "type": "text", + "text": "Folsom Boulevard" + } + ], + "type": "turn", + "modifier": "right", + "text": "Folsom Boulevard" + }, + "distanceAlongGeometry": 590 + } + ], + "speedLimitUnit": "mph", + "maneuver": { + "type": "turn", + "instruction": "Turn left onto 34th Street.", + "modifier": "left", + "bearing_after": 15, + "bearing_before": 127, + "location": [ + -121.465929, + 38.561851 + ] + }, + "speedLimitSign": "mutcd", + "name": "34th Street", + "weight_typical": 94.199, + "duration_typical": 64.847, + "duration": 64.847, + "distance": 590, + "driving_side": "right", + "weight": 94.199, + "mode": "driving", + "geometry": "ubsphApcutfFsIuBan@oO{EeAcDy@oA]iOwDcf@sO}XaJsTeHk_@wLigAw]a_@uLeBk@" + }, + { + "voiceInstructions": [ + { + "ssmlAnnouncement": "Continue for 1 mile.", + "announcement": "Continue for 1 mile.", + "distanceAlongGeometry": 1423 + }, + { + "ssmlAnnouncement": "In a quarter mile, Turn left onto 46th Street.", + "announcement": "In a quarter mile, Turn left onto 46th Street.", + "distanceAlongGeometry": 402.336 + }, + { + "ssmlAnnouncement": "Turn left onto 46th Street.", + "announcement": "Turn left onto 46th Street.", + "distanceAlongGeometry": 95 + } + ], + "intersections": [ + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 54, + 199 + ], + "duration": 6.067, + "turn_weight": 0.75, + "turn_duration": 0.067, + "mapbox_streets_v8": { + "class": "tertiary_link" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 8.1, + "geometry_index": 18, + "location": [ + -121.463892, + 38.566893 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 97, + 234 + ], + "duration": 8.922, + "turn_weight": 2, + "turn_duration": 0.122, + "mapbox_streets_v8": { + "class": "tertiary_link" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 12.78, + "geometry_index": 21, + "location": [ + -121.463757, + 38.566969 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 136, + 279 + ], + "duration": 1.078, + "turn_weight": 5.75, + "turn_duration": 0.088, + "mapbox_streets_v8": { + "class": "primary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 6.963, + "geometry_index": 24, + "location": [ + -121.463516, + 38.566944 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 131, + 316 + ], + "duration": 2.184, + "turn_duration": 0.024, + "mapbox_streets_v8": { + "class": "primary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 2.646, + "geometry_index": 25, + "location": [ + -121.463425, + 38.566871 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 123, + 310 + ], + "duration": 0.673, + "turn_duration": 0.033, + "mapbox_streets_v8": { + "class": "primary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 0.784, + "geometry_index": 28, + "location": [ + -121.463216, + 38.566731 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 114, + 303 + ], + "duration": 2.46, + "turn_duration": 0.036, + "mapbox_streets_v8": { + "class": "primary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 2.97, + "geometry_index": 29, + "location": [ + -121.463143, + 38.566694 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 290 + ], + "duration": 2.298, + "turn_duration": 0.021, + "mapbox_streets_v8": { + "class": "primary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 2.79, + "geometry_index": 32, + "location": [ + -121.462794, + 38.566579 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 111, + 289 + ], + "duration": 1.841, + "turn_duration": 0.008, + "mapbox_streets_v8": { + "class": "primary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 2.245, + "geometry_index": 33, + "location": [ + -121.462461, + 38.566488 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 291 + ], + "duration": 4.54, + "turn_duration": 0.022, + "mapbox_streets_v8": { + "class": "primary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 5.534, + "geometry_index": 34, + "location": [ + -121.462161, + 38.566398 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 289 + ], + "duration": 0.766, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "primary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 0.915, + "geometry_index": 35, + "location": [ + -121.461468, + 38.566216 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 289 + ], + "duration": 8.839, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "primary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 10.805, + "geometry_index": 36, + "location": [ + -121.46135, + 38.566185 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 289 + ], + "duration": 2.843, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "primary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 3.459, + "geometry_index": 37, + "location": [ + -121.460815, + 38.566037 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 110, + 289 + ], + "duration": 0.643, + "turn_duration": 0.007, + "mapbox_streets_v8": { + "class": "primary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 0.778, + "geometry_index": 38, + "location": [ + -121.460378, + 38.565917 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 290 + ], + "duration": 0.976, + "turn_duration": 0.021, + "mapbox_streets_v8": { + "class": "primary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 1.17, + "geometry_index": 39, + "location": [ + -121.460285, + 38.565891 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 110, + 289 + ], + "duration": 0.341, + "turn_duration": 0.007, + "mapbox_streets_v8": { + "class": "primary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 0.408, + "geometry_index": 40, + "location": [ + -121.46014, + 38.565851 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 290 + ], + "duration": 2.021, + "turn_duration": 0.021, + "mapbox_streets_v8": { + "class": "primary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 2.45, + "geometry_index": 41, + "location": [ + -121.46009, + 38.565837 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 289 + ], + "duration": 1.819, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "primary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 2.205, + "geometry_index": 42, + "location": [ + -121.459761, + 38.565747 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 289 + ], + "duration": 2.179, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "primary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 2.646, + "geometry_index": 43, + "location": [ + -121.459473, + 38.565669 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 108, + 289 + ], + "duration": 1.721, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "primary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 2.085, + "geometry_index": 44, + "location": [ + -121.459114, + 38.56557 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 288 + ], + "duration": 3.815, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "primary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 4.651, + "geometry_index": 45, + "location": [ + -121.458828, + 38.565496 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 289 + ], + "duration": 1.419, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "primary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 1.715, + "geometry_index": 46, + "location": [ + -121.458203, + 38.565326 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 289 + ], + "duration": 3.065, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "primary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 3.732, + "geometry_index": 47, + "location": [ + -121.457976, + 38.565265 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 289 + ], + "duration": 5.514, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "primary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 6.731, + "geometry_index": 48, + "location": [ + -121.457494, + 38.565135 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 110, + 289 + ], + "duration": 1.633, + "turn_duration": 0.007, + "mapbox_streets_v8": { + "class": "primary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 1.992, + "geometry_index": 49, + "location": [ + -121.456869, + 38.564966 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 290 + ], + "duration": 4.921, + "turn_duration": 0.021, + "mapbox_streets_v8": { + "class": "primary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 6.003, + "geometry_index": 50, + "location": [ + -121.456716, + 38.564922 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 110, + 289 + ], + "duration": 4.783, + "turn_duration": 0.007, + "mapbox_streets_v8": { + "class": "primary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 5.85, + "geometry_index": 51, + "location": [ + -121.456186, + 38.564776 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 290 + ], + "duration": 2.621, + "turn_duration": 0.021, + "mapbox_streets_v8": { + "class": "primary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 3.185, + "geometry_index": 52, + "location": [ + -121.455486, + 38.56458 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 289 + ], + "duration": 0.87, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "primary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 1.042, + "geometry_index": 53, + "location": [ + -121.45506, + 38.564464 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 289 + ], + "duration": 3.952, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "primary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 4.818, + "geometry_index": 54, + "location": [ + -121.454917, + 38.564425 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 289 + ], + "duration": 2.686, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "primary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 3.267, + "geometry_index": 55, + "location": [ + -121.45428, + 38.564253 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 289 + ], + "duration": 0.082, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "primary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 0.077, + "geometry_index": 56, + "location": [ + -121.453845, + 38.564135 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 289 + ], + "duration": 6.676, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "primary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 8.154, + "geometry_index": 57, + "location": [ + -121.453833, + 38.564132 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 289 + ], + "duration": 0.544, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "primary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 0.643, + "geometry_index": 58, + "location": [ + -121.452772, + 38.563844 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 289 + ], + "duration": 5.028, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "primary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 6.136, + "geometry_index": 59, + "location": [ + -121.4527, + 38.563825 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 289 + ], + "duration": 2.21, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "primary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 2.684, + "geometry_index": 60, + "location": [ + -121.452004, + 38.563637 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 289 + ], + "duration": 6.434, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "primary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 7.858, + "geometry_index": 61, + "location": [ + -121.451699, + 38.563554 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 289 + ], + "duration": 6.139, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "primary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 7.344, + "geometry_index": 62, + "location": [ + -121.450631, + 38.563264 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 116, + 296 + ], + "duration": 6.272, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "primary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 7.503, + "geometry_index": 65, + "location": [ + -121.449564, + 38.56289 + ] + }, + { + "bearings": [ + 117, + 296 + ], + "entry": [ + true, + false + ], + "in": 1, + "turn_duration": 0.007, + "mapbox_streets_v8": { + "class": "primary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "geometry_index": 66, + "location": [ + -121.448544, + 38.562493 + ] + } + ], + "bannerInstructions": [ + { + "primary": { + "components": [ + { + "type": "text", + "text": "46th Street" + } + ], + "type": "turn", + "modifier": "left", + "text": "46th Street" + }, + "distanceAlongGeometry": 1444 + } + ], + "speedLimitUnit": "mph", + "maneuver": { + "type": "turn", + "instruction": "Turn right onto Folsom Boulevard.", + "modifier": "right", + "bearing_after": 136, + "bearing_before": 19, + "location": [ + -121.463892, + 38.566893 + ] + }, + "speedLimitSign": "mutcd", + "name": "Folsom Boulevard", + "weight_typical": 149.03, + "duration_typical": 115.924, + "duration": 121.416, + "distance": 1444, + "driving_side": "right", + "weight": 155.757, + "mode": "driving", + "geometry": "y}|phAfdqtfFu@mAcAgB]wAOq@MyCnAuGpCuDhCsDzBiEPc@hAqCNa@xAeFzBqLtDySrDwQjJij@|@kFfHm`@nFiZr@yDnAaHZcBrDqSzC_QdEmUrC{PrIaf@xBeMbGc]pIaf@vAqHbHc`@fKwj@fFsYlA}GvIyf@jFeZDW~PiaAd@oCvJoj@dDaRbQwaA`CaNpB{IvNwg@xWw~@`AgD" + }, + { + "voiceInstructions": [ + { + "ssmlAnnouncement": "Continue for a half mile.", + "announcement": "Continue for a half mile.", + "distanceAlongGeometry": 605 + }, + { + "ssmlAnnouncement": "In a quarter mile, Turn right onto J Street.", + "announcement": "In a quarter mile, Turn right onto J Street.", + "distanceAlongGeometry": 402.336 + }, + { + "ssmlAnnouncement": "Turn right onto J Street. Then Turn right onto 47th Street.", + "announcement": "Turn right onto J Street. Then Turn right onto 47th Street.", + "distanceAlongGeometry": 60.833 + } + ], + "intersections": [ + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 19, + 297 + ], + "duration": 40.888, + "turn_weight": 15, + "turn_duration": 6.281, + "mapbox_streets_v8": { + "class": "street" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 56.528, + "geometry_index": 67, + "location": [ + -121.44846, + 38.56246 + ] + }, + { + "bearings": [ + 19, + 199 + ], + "entry": [ + true, + false + ], + "in": 1, + "turn_weight": 2, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "street" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "geometry_index": 68, + "location": [ + -121.447339, + 38.564994 + ] + } + ], + "bannerInstructions": [ + { + "primary": { + "components": [ + { + "type": "text", + "text": "J Street" + } + ], + "type": "turn", + "modifier": "right", + "text": "J Street" + }, + "distanceAlongGeometry": 615 + }, + { + "sub": { + "components": [ + { + "type": "text", + "text": "47th Street" + } + ], + "type": "turn", + "modifier": "right", + "text": "47th Street" + }, + "primary": { + "components": [ + { + "type": "text", + "text": "J Street" + } + ], + "type": "turn", + "modifier": "right", + "text": "J Street" + }, + "distanceAlongGeometry": 402.336 + } + ], + "speedLimitUnit": "mph", + "maneuver": { + "type": "turn", + "instruction": "Turn left onto 46th Street.", + "modifier": "left", + "bearing_after": 19, + "bearing_before": 117, + "location": [ + -121.44846, + 38.56246 + ] + }, + "speedLimitSign": "mutcd", + "name": "46th Street", + "weight_typical": 92.051, + "duration_typical": 69.437, + "duration": 69.437, + "distance": 615, + "driving_side": "right", + "weight": 92.051, + "mode": "driving", + "geometry": "whtphAv_ssfFk}CaeA}fDmiA" + }, + { + "voiceInstructions": [ + { + "ssmlAnnouncement": "Turn right onto 47th Street. Then Your destination will be on the right.", + "announcement": "Turn right onto 47th Street. Then Your destination will be on the right.", + "distanceAlongGeometry": 81.333 + } + ], + "intersections": [ + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 199 + ], + "duration": 4.193, + "turn_weight": 10, + "turn_duration": 2.005, + "mapbox_streets_v8": { + "class": "secondary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 12.571, + "geometry_index": 69, + "location": [ + -121.446148, + 38.567681 + ] + }, + { + "bearings": [ + 109, + 289 + ], + "entry": [ + true, + false + ], + "in": 1, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "secondary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "geometry_index": 70, + "location": [ + -121.445806, + 38.567591 + ] + } + ], + "bannerInstructions": [ + { + "primary": { + "components": [ + { + "type": "text", + "text": "47th Street" + } + ], + "type": "turn", + "modifier": "right", + "text": "47th Street" + }, + "distanceAlongGeometry": 100 + } + ], + "speedLimitUnit": "mph", + "maneuver": { + "type": "end of road", + "instruction": "Turn right onto J Street.", + "modifier": "right", + "bearing_after": 109, + "bearing_before": 19, + "location": [ + -121.446148, + 38.567681 + ] + }, + "speedLimitSign": "mutcd", + "name": "J Street", + "weight_typical": 19.705, + "duration_typical": 9.858, + "duration": 9.858, + "distance": 100, + "driving_side": "right", + "weight": 19.705, + "mode": "driving", + "geometry": "ao~phAfonsfFrDkTpK}m@" + }, + { + "voiceInstructions": [ + { + "ssmlAnnouncement": "Your destination is on the right.", + "announcement": "Your destination is on the right.", + "distanceAlongGeometry": 41.667 + } + ], + "intersections": [ + { + "bearings": [ + 199, + 289 + ], + "entry": [ + true, + false + ], + "in": 1, + "turn_weight": 8, + "turn_duration": 2.105, + "mapbox_streets_v8": { + "class": "street" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "geometry_index": 71, + "location": [ + -121.445055, + 38.56739 + ] + } + ], + "bannerInstructions": [ + { + "primary": { + "components": [ + { + "type": "text", + "text": "Your destination will be on the right" + } + ], + "type": "arrive", + "modifier": "right", + "text": "Your destination will be on the right" + }, + "distanceAlongGeometry": 51.846 + }, + { + "primary": { + "components": [ + { + "type": "text", + "text": "Your destination is on the right" + } + ], + "type": "arrive", + "modifier": "right", + "text": "Your destination is on the right" + }, + "distanceAlongGeometry": 41.667 + } + ], + "speedLimitUnit": "mph", + "maneuver": { + "type": "turn", + "instruction": "Turn right onto 47th Street.", + "modifier": "right", + "bearing_after": 199, + "bearing_before": 109, + "location": [ + -121.445055, + 38.56739 + ] + }, + "speedLimitSign": "mutcd", + "name": "47th Street", + "weight_typical": 14.266, + "duration_typical": 7.438, + "duration": 7.438, + "distance": 51.846, + "driving_side": "right", + "weight": 14.266, + "mode": "driving", + "geometry": "{|}phA|jlsfFnZbK" + }, + { + "voiceInstructions": [], + "intersections": [ + { + "bearings": [ + 19 + ], + "entry": [ + true + ], + "in": 0, + "admin_index": 0, + "geometry_index": 72, + "location": [ + -121.445249, + 38.56695 + ] + } + ], + "bannerInstructions": [], + "speedLimitUnit": "mph", + "maneuver": { + "type": "arrive", + "instruction": "Your destination is on the right.", + "modifier": "right", + "bearing_after": 0, + "bearing_before": 199, + "location": [ + -121.445249, + 38.56695 + ] + }, + "speedLimitSign": "mutcd", + "name": "47th Street", + "weight_typical": 0, + "duration_typical": 0, + "duration": 0, + "distance": 0, + "driving_side": "right", + "weight": 0, + "mode": "driving", + "geometry": "ka}phA`wlsfF??" + } + ], + "distance": 2947.293, + "summary": "Folsom Boulevard, 46th Street" + } + ], + "geometry": "ahtphArowtfFfHbCfBn@dCuNnNgx@dDwGsIuBan@oO{EeAcDy@oA]iOwDcf@sO}XaJsTeHk_@wLigAw]a_@uLeBk@u@mAcAgB]wAOq@MyCnAuGpCuDhCsDzBiEPc@hAqCNa@xAeFzBqLtDySrDwQjJij@|@kFfHm`@nFiZr@yDnAaHZcBrDqSzC_QdEmUrC{PrIaf@xBeMbGc]pIaf@vAqHbHc`@fKwj@fFsYlA}GvIyf@jFeZDW~PiaAd@oCvJoj@dDaRbQwaA`CaNpB{IvNwg@xWw~@`AgDk}CaeA}fDmiArDkTpK}m@nZbK", + "voiceLocale": "en-US" + }, + { + "weight_typical": 517.866, + "duration_typical": 320.427, + "weight_name": "auto", + "weight": 517.866, + "duration": 320.427, + "distance": 2965.293, + "legs": [ + { + "admins": [ + { + "iso_3166_1_alpha3": "USA", + "iso_3166_1": "US" + } + ], + "annotation": { + "maxspeed": [ + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + }, + { + "unknown": true + } + ], + "congestion": [ + "unknown", + "unknown", + "unknown", + "unknown", + "unknown", + "unknown", + "low", + "unknown", + "unknown", + "unknown", + "unknown", + "unknown", + "low", + "unknown", + "low", + "low", + "low", + "unknown", + "moderate", + "moderate", + "moderate", + "unknown", + "unknown", + "unknown", + "unknown", + "unknown", + "low", + "low", + "low", + "low", + "low", + "low", + "low", + "low", + "low", + "low", + "low", + "low", + "unknown", + "low", + "moderate", + "unknown", + "unknown", + "low", + "low", + "low", + "low", + "low", + "low", + "low", + "low", + "low", + "unknown", + "low", + "unknown", + "unknown", + "unknown", + "low", + "low", + "unknown", + "low", + "unknown", + "low", + "low", + "unknown", + "low", + "low", + "low", + "unknown", + "unknown" + ], + "speed": [ + 4.2, + 5.6, + 11.4, + 9.7, + 9.7, + 11.1, + 10.6, + 5.3, + 5.6, + 5.6, + 5.6, + 12.2, + 11.4, + 12.2, + 11.9, + 12.5, + 12.5, + 7.2, + 3.6, + 3.6, + 3.6, + 10.3, + 10.3, + 10.3, + 6.1, + 6.1, + 8.3, + 6.9, + 6.7, + 6.4, + 4.7, + 13.1, + 13.6, + 12.5, + 12.8, + 13.1, + 11.9, + 10.6, + 11.7, + 11.7, + 8.3, + 9.7, + 10, + 11.1, + 10.3, + 10.8, + 8.9, + 10.3, + 10.3, + 10, + 12.5, + 11.7, + 14.2, + 14.7, + 15.3, + 15, + 15, + 15.3, + 14.4, + 10.8, + 11.1, + 13.6, + 14.7, + 13.9, + 15, + 14.4, + 14.7, + 14.2, + 12.2, + 9.7 + ], + "distance": [ + 17.4, + 6.2, + 23.1, + 84.4, + 15.3, + 19.6, + 86.9, + 12.6, + 9.5, + 4.6, + 30.1, + 73.4, + 48.7, + 40.6, + 60.8, + 135.7, + 60.2, + 6, + 14.2, + 3, + 14.3, + 23.4, + 1.8, + 19, + 31.5, + 65.7, + 92.5, + 140.1, + 80.3, + 69.2, + 50.8, + 79.2, + 66.4, + 39.8, + 31.1, + 51.4, + 27, + 65, + 7.3, + 50.8, + 30.6, + 7.7, + 25.5, + 20.8, + 29, + 50.3, + 16.3, + 27, + 44, + 15.8, + 11.8, + 84.4, + 55, + 32.5, + 43.4, + 43.7, + 12, + 60.9, + 35, + 50.2, + 50.8, + 31, + 68.1, + 75.6, + 25.2, + 54.3, + 54.3, + 31.4, + 69.1, + 51.8 + ], + "duration": [ + 4.187, + 1.108, + 2.027, + 8.679, + 1.573, + 1.765, + 8.234, + 2.391, + 1.705, + 0.835, + 5.425, + 6.008, + 4.276, + 3.321, + 5.087, + 10.858, + 4.816, + 0.83, + 3.927, + 0.844, + 3.964, + 2.275, + 0.176, + 1.849, + 5.158, + 10.755, + 11.103, + 20.177, + 12.046, + 10.839, + 10.757, + 6.066, + 4.882, + 3.184, + 2.432, + 3.937, + 2.258, + 6.157, + 0.626, + 4.357, + 3.675, + 0.793, + 2.548, + 1.873, + 2.826, + 4.647, + 1.837, + 2.628, + 4.277, + 1.579, + 0.947, + 7.237, + 3.883, + 2.205, + 2.841, + 2.913, + 0.803, + 3.986, + 2.421, + 4.636, + 4.568, + 2.277, + 4.628, + 5.447, + 1.68, + 3.758, + 3.687, + 2.217, + 5.653, + 5.333 + ] + }, + "weight_typical": 517.866, + "duration_typical": 320.427, + "weight": 517.866, + "duration": 320.427, + "steps": [ + { + "voiceInstructions": [ + { + "ssmlAnnouncement": "Drive south. Then Turn left onto S Street.", + "announcement": "Drive south. Then Turn left onto S Street.", + "distanceAlongGeometry": 23.448 + } + ], + "intersections": [ + { + "classes": [ + "restricted" + ], + "entry": [ + true + ], + "bearings": [ + 199 + ], + "duration": 4.187, + "mapbox_streets_v8": { + "class": "service" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 5.13, + "geometry_index": 0, + "location": [ + -121.467146, + 38.562449 + ] + }, + { + "bearings": [ + 19, + 200 + ], + "entry": [ + false, + true + ], + "in": 0, + "turn_weight": 20.25, + "mapbox_streets_v8": { + "class": "service" + }, + "is_urban": true, + "admin_index": 0, + "out": 1, + "geometry_index": 1, + "location": [ + -121.467212, + 38.562301 + ] + } + ], + "bannerInstructions": [ + { + "primary": { + "components": [ + { + "type": "text", + "text": "S Street" + } + ], + "type": "turn", + "modifier": "left", + "text": "S Street" + }, + "distanceAlongGeometry": 23.448 + } + ], + "speedLimitUnit": "mph", + "maneuver": { + "type": "depart", + "instruction": "Drive south.", + "bearing_after": 199, + "bearing_before": 0, + "location": [ + -121.467146, + 38.562449 + ] + }, + "speedLimitSign": "mutcd", + "name": "", + "weight_typical": 26.703, + "duration_typical": 5.267, + "duration": 5.267, + "distance": 23.448, + "driving_side": "right", + "weight": 26.703, + "mode": "driving", + "geometry": "ahtphArowtfFfHbCfBn@" + }, + { + "voiceInstructions": [ + { + "ssmlAnnouncement": "In 400 feet, Turn left onto 34th Street.", + "announcement": "In 400 feet, Turn left onto 34th Street.", + "distanceAlongGeometry": 113 + }, + { + "ssmlAnnouncement": "Turn left onto 34th Street.", + "announcement": "Turn left onto 34th Street.", + "distanceAlongGeometry": 50 + } + ], + "intersections": [ + { + "entry": [ + false, + true + ], + "in": 0, + "bearings": [ + 20, + 109 + ], + "duration": 7.641, + "turn_weight": 31.25, + "turn_duration": 5.622, + "mapbox_streets_v8": { + "class": "street" + }, + "is_urban": true, + "admin_index": 0, + "out": 1, + "weight": 33.724, + "geometry_index": 2, + "location": [ + -121.467236, + 38.562249 + ] + }, + { + "bearings": [ + 109, + 289 + ], + "entry": [ + true, + false + ], + "in": 1, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "street" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "geometry_index": 3, + "location": [ + -121.466985, + 38.562182 + ] + } + ], + "bannerInstructions": [ + { + "primary": { + "components": [ + { + "type": "text", + "text": "34th Street" + } + ], + "type": "turn", + "modifier": "left", + "text": "34th Street" + }, + "distanceAlongGeometry": 123 + } + ], + "speedLimitUnit": "mph", + "maneuver": { + "type": "end of road", + "instruction": "Turn left onto S Street.", + "modifier": "left", + "bearing_after": 109, + "bearing_before": 200, + "location": [ + -121.467236, + 38.562249 + ] + }, + "speedLimitSign": "mutcd", + "name": "S Street", + "weight_typical": 46.824, + "duration_typical": 17.946, + "duration": 17.946, + "distance": 123, + "driving_side": "right", + "weight": 46.824, + "mode": "driving", + "geometry": "q{sphAfuwtfFdCuNnNgx@dDwG" + }, + { + "voiceInstructions": [ + { + "ssmlAnnouncement": "Continue for a half mile.", + "announcement": "Continue for a half mile.", + "distanceAlongGeometry": 607.667 + }, + { + "ssmlAnnouncement": "In a quarter mile, Turn left onto Folsom Boulevard.", + "announcement": "In a quarter mile, Turn left onto Folsom Boulevard.", + "distanceAlongGeometry": 402.336 + }, + { + "ssmlAnnouncement": "Turn left onto Folsom Boulevard. Then Turn right onto 33rd Street.", + "announcement": "Turn left onto Folsom Boulevard. Then Turn right onto 33rd Street.", + "distanceAlongGeometry": 81.111 + } + ], + "intersections": [ + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 15, + 307 + ], + "duration": 8.805, + "turn_weight": 15, + "turn_duration": 7.005, + "mapbox_streets_v8": { + "class": "tertiary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 17.205, + "geometry_index": 5, + "location": [ + -121.465929, + 38.561851 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 15, + 195 + ], + "duration": 8.261, + "turn_weight": 3.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "tertiary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 13.597, + "geometry_index": 6, + "location": [ + -121.46587, + 38.562021 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 14, + 195 + ], + "duration": 2.484, + "turn_weight": 2, + "turn_duration": 0.021, + "mapbox_streets_v8": { + "class": "tertiary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 5.017, + "geometry_index": 7, + "location": [ + -121.465606, + 38.562774 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 16, + 194 + ], + "duration": 7.927, + "turn_weight": 0.5, + "turn_duration": 0.007, + "mapbox_streets_v8": { + "class": "tertiary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 10.202, + "geometry_index": 8, + "location": [ + -121.465571, + 38.562884 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 18, + 195 + ], + "duration": 7.981, + "turn_weight": 2, + "turn_duration": 2.008, + "mapbox_streets_v8": { + "class": "tertiary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 9.317, + "geometry_index": 11, + "location": [ + -121.465435, + 38.563267 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 18, + 198 + ], + "duration": 4.322, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "tertiary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 5.77, + "geometry_index": 12, + "location": [ + -121.465169, + 38.563893 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 18, + 198 + ], + "duration": 3.374, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "tertiary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 4.609, + "geometry_index": 13, + "location": [ + -121.464992, + 38.564308 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 18, + 198 + ], + "duration": 5.126, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "tertiary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 6.756, + "geometry_index": 14, + "location": [ + -121.464845, + 38.564654 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 18, + 198 + ], + "duration": 10.899, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "tertiary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 13.828, + "geometry_index": 15, + "location": [ + -121.464625, + 38.565172 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 18, + 198 + ], + "duration": 4.819, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "tertiary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 6.38, + "geometry_index": 16, + "location": [ + -121.464133, + 38.566329 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 19, + 198 + ], + "duration": 0.85, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "tertiary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 1.518, + "geometry_index": 17, + "location": [ + -121.463914, + 38.566842 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 18, + 199 + ], + "duration": 3.896, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "tertiary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 5.249, + "geometry_index": 18, + "location": [ + -121.463892, + 38.566893 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 18, + 198 + ], + "duration": 0.85, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "tertiary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 1.518, + "geometry_index": 19, + "location": [ + -121.463841, + 38.567014 + ] + }, + { + "bearings": [ + 18, + 198 + ], + "entry": [ + true, + false + ], + "in": 1, + "turn_weight": 2, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "tertiary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "geometry_index": 20, + "location": [ + -121.46383, + 38.56704 + ] + } + ], + "bannerInstructions": [ + { + "primary": { + "components": [ + { + "type": "text", + "text": "Folsom Boulevard" + } + ], + "type": "turn", + "modifier": "left", + "text": "Folsom Boulevard" + }, + "distanceAlongGeometry": 621 + }, + { + "sub": { + "components": [ + { + "type": "text", + "text": "33rd Street" + } + ], + "type": "turn", + "modifier": "right", + "text": "33rd Street" + }, + "primary": { + "components": [ + { + "type": "text", + "text": "Folsom Boulevard" + } + ], + "type": "turn", + "modifier": "left", + "text": "Folsom Boulevard" + }, + "distanceAlongGeometry": 402.336 + } + ], + "speedLimitUnit": "mph", + "maneuver": { + "type": "turn", + "instruction": "Turn left onto 34th Street.", + "modifier": "left", + "bearing_after": 15, + "bearing_before": 127, + "location": [ + -121.465929, + 38.561851 + ] + }, + "speedLimitSign": "mutcd", + "name": "34th Street", + "weight_typical": 107.715, + "duration_typical": 73.489, + "duration": 73.489, + "distance": 621, + "driving_side": "right", + "weight": 107.715, + "mode": "driving", + "geometry": "ubsphApcutfFsIuBan@oO{EeAcDy@oA]iOwDcf@sO}XaJsTeHk_@wLigAw]a_@uLeBk@qFeBs@UsFgB" + }, + { + "voiceInstructions": [ + { + "ssmlAnnouncement": "Turn right onto 33rd Street.", + "announcement": "Turn right onto 33rd Street.", + "distanceAlongGeometry": 44 + } + ], + "intersections": [ + { + "entry": [ + false, + true + ], + "in": 0, + "bearings": [ + 198, + 317 + ], + "duration": 3.93, + "turn_weight": 20, + "turn_duration": 1.693, + "mapbox_streets_v8": { + "class": "primary" + }, + "is_urban": true, + "admin_index": 0, + "out": 1, + "weight": 22.741, + "geometry_index": 21, + "location": [ + -121.463778, + 38.567162 + ] + }, + { + "entry": [ + false, + true + ], + "in": 0, + "bearings": [ + 137, + 317 + ], + "duration": 0.195, + "mapbox_streets_v8": { + "class": "primary" + }, + "is_urban": true, + "admin_index": 0, + "out": 1, + "weight": 0.238, + "geometry_index": 22, + "location": [ + -121.463962, + 38.567315 + ] + }, + { + "bearings": [ + 137, + 317 + ], + "entry": [ + false, + true + ], + "in": 0, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "primary" + }, + "is_urban": true, + "admin_index": 0, + "out": 1, + "geometry_index": 23, + "location": [ + -121.463976, + 38.567327 + ] + } + ], + "bannerInstructions": [ + { + "primary": { + "components": [ + { + "type": "text", + "text": "33rd Street" + } + ], + "type": "turn", + "modifier": "right", + "text": "33rd Street" + }, + "distanceAlongGeometry": 44 + } + ], + "speedLimitUnit": "mph", + "maneuver": { + "type": "end of road", + "instruction": "Turn left onto Folsom Boulevard.", + "modifier": "left", + "bearing_after": 317, + "bearing_before": 18, + "location": [ + -121.463778, + 38.567162 + ] + }, + "speedLimitSign": "mutcd", + "name": "Folsom Boulevard", + "weight_typical": 25.244, + "duration_typical": 5.993, + "duration": 5.993, + "distance": 44, + "driving_side": "right", + "weight": 25.244, + "mode": "driving", + "geometry": "sn}phAb}ptfFqHnJWZwFjH" + }, + { + "voiceInstructions": [ + { + "ssmlAnnouncement": "In a quarter mile, Turn right onto J Street.", + "announcement": "In a quarter mile, Turn right onto J Street.", + "distanceAlongGeometry": 521 + }, + { + "ssmlAnnouncement": "Turn right onto J Street.", + "announcement": "Turn right onto J Street.", + "distanceAlongGeometry": 50 + } + ], + "intersections": [ + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 19, + 137 + ], + "duration": 5.632, + "turn_weight": 8, + "turn_duration": 0.395, + "mapbox_streets_v8": { + "class": "street" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 14.415, + "geometry_index": 24, + "location": [ + -121.464126, + 38.567451 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 19, + 199 + ], + "duration": 10.819, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "street" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 13.73, + "geometry_index": 25, + "location": [ + -121.464009, + 38.567719 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 19, + 199 + ], + "duration": 11.179, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "street" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 14.171, + "geometry_index": 26, + "location": [ + -121.463766, + 38.568278 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 19, + 199 + ], + "duration": 20.179, + "turn_weight": 2, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "street" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 26.696, + "geometry_index": 27, + "location": [ + -121.463424, + 38.569065 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 19, + 199 + ], + "duration": 12.019, + "turn_weight": 2, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "street" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 16.7, + "geometry_index": 28, + "location": [ + -121.462907, + 38.570257 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 19, + 199 + ], + "duration": 10.819, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "street" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 13.73, + "geometry_index": 29, + "location": [ + -121.46261, + 38.57094 + ] + }, + { + "bearings": [ + 19, + 199 + ], + "entry": [ + true, + false + ], + "in": 1, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "street" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "geometry_index": 30, + "location": [ + -121.462354, + 38.571529 + ] + } + ], + "bannerInstructions": [ + { + "primary": { + "components": [ + { + "type": "text", + "text": "J Street" + } + ], + "type": "turn", + "modifier": "right", + "text": "J Street" + }, + "distanceAlongGeometry": 531 + } + ], + "speedLimitUnit": "mph", + "maneuver": { + "type": "turn", + "instruction": "Turn right onto 33rd Street.", + "modifier": "right", + "bearing_after": 19, + "bearing_before": 317, + "location": [ + -121.464126, + 38.567451 + ] + }, + "speedLimitSign": "mutcd", + "name": "33rd Street", + "weight_typical": 113.172, + "duration_typical": 81.466, + "duration": 81.466, + "distance": 531, + "driving_side": "right", + "weight": 113.172, + "mode": "driving", + "geometry": "u`~phAzrqtfFwOiF}a@eNep@kToiAi_@ui@qQyc@_O_ZwJ" + }, + { + "voiceInstructions": [ + { + "ssmlAnnouncement": "Continue for 1 mile.", + "announcement": "Continue for 1 mile.", + "distanceAlongGeometry": 1554.666 + }, + { + "ssmlAnnouncement": "In a quarter mile, Turn right onto 47th Street.", + "announcement": "In a quarter mile, Turn right onto 47th Street.", + "distanceAlongGeometry": 402.336 + }, + { + "ssmlAnnouncement": "Turn right onto 47th Street. Then Your destination will be on the right.", + "announcement": "Turn right onto 47th Street. Then Your destination will be on the right.", + "distanceAlongGeometry": 122.889 + } + ], + "intersections": [ + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 199 + ], + "duration": 8.056, + "turn_weight": 10, + "turn_duration": 2.005, + "mapbox_streets_v8": { + "class": "secondary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 17.413, + "geometry_index": 31, + "location": [ + -121.462166, + 38.571961 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 289 + ], + "duration": 4.868, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "secondary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 6.44, + "geometry_index": 32, + "location": [ + -121.461305, + 38.571731 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 289 + ], + "duration": 3.219, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "secondary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 4.42, + "geometry_index": 33, + "location": [ + -121.460583, + 38.571537 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 289 + ], + "duration": 2.445, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "secondary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 3.472, + "geometry_index": 34, + "location": [ + -121.46015, + 38.571422 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 289 + ], + "duration": 3.926, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "secondary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 5.285, + "geometry_index": 35, + "location": [ + -121.459812, + 38.571332 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 289 + ], + "duration": 2.28, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "secondary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 3.269, + "geometry_index": 36, + "location": [ + -121.459253, + 38.571183 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 289 + ], + "duration": 6.177, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "secondary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 8.043, + "geometry_index": 37, + "location": [ + -121.45896, + 38.571104 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 110, + 289 + ], + "duration": 0.607, + "turn_weight": 0.5, + "turn_duration": 0.007, + "mapbox_streets_v8": { + "class": "secondary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 1.235, + "geometry_index": 38, + "location": [ + -121.458253, + 38.570916 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 290 + ], + "duration": 4.392, + "turn_weight": 0.5, + "turn_duration": 0.021, + "mapbox_streets_v8": { + "class": "secondary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 5.855, + "geometry_index": 39, + "location": [ + -121.458174, + 38.570894 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 289 + ], + "duration": 3.739, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "secondary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 5.057, + "geometry_index": 40, + "location": [ + -121.457621, + 38.570747 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 289 + ], + "duration": 0.842, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "secondary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 1.508, + "geometry_index": 41, + "location": [ + -121.457288, + 38.570658 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 289 + ], + "duration": 2.519, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "secondary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 3.562, + "geometry_index": 42, + "location": [ + -121.457204, + 38.570636 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 289 + ], + "duration": 1.909, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "secondary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 2.815, + "geometry_index": 43, + "location": [ + -121.456927, + 38.570562 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 289 + ], + "duration": 2.841, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "secondary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 3.956, + "geometry_index": 44, + "location": [ + -121.456701, + 38.570501 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 111, + 289 + ], + "duration": 4.623, + "turn_weight": 0.5, + "turn_duration": 0.008, + "mapbox_streets_v8": { + "class": "secondary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 6.154, + "geometry_index": 45, + "location": [ + -121.456385, + 38.570417 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 107, + 291 + ], + "duration": 1.824, + "turn_weight": 0.5, + "turn_duration": 0.024, + "mapbox_streets_v8": { + "class": "secondary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 2.705, + "geometry_index": 46, + "location": [ + -121.455846, + 38.570253 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 108, + 287 + ], + "duration": 2.634, + "turn_weight": 0.5, + "turn_duration": 0.007, + "mapbox_streets_v8": { + "class": "secondary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 3.718, + "geometry_index": 47, + "location": [ + -121.455667, + 38.570209 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 107, + 288 + ], + "duration": 4.302, + "turn_weight": 0.5, + "turn_duration": 0.021, + "mapbox_streets_v8": { + "class": "secondary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 5.744, + "geometry_index": 48, + "location": [ + -121.455371, + 38.570136 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 287 + ], + "duration": 1.607, + "turn_weight": 0.5, + "turn_duration": 0.007, + "mapbox_streets_v8": { + "class": "secondary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 2.42, + "geometry_index": 49, + "location": [ + -121.454889, + 38.570018 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 111, + 289 + ], + "duration": 0.968, + "turn_weight": 0.5, + "turn_duration": 0.008, + "mapbox_streets_v8": { + "class": "secondary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 1.652, + "geometry_index": 50, + "location": [ + -121.454717, + 38.569973 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 291 + ], + "duration": 7.222, + "turn_weight": 0.5, + "turn_duration": 0.022, + "mapbox_streets_v8": { + "class": "secondary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 9.14, + "geometry_index": 51, + "location": [ + -121.45459, + 38.569935 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 289 + ], + "duration": 3.901, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "secondary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 5.159, + "geometry_index": 52, + "location": [ + -121.453671, + 38.569692 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 289 + ], + "duration": 2.193, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "secondary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 3.108, + "geometry_index": 53, + "location": [ + -121.453073, + 38.569532 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 289 + ], + "duration": 2.834, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "secondary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 3.877, + "geometry_index": 54, + "location": [ + -121.45272, + 38.569438 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 289 + ], + "duration": 2.952, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "secondary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 4.02, + "geometry_index": 55, + "location": [ + -121.452248, + 38.569312 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 289 + ], + "duration": 0.819, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "secondary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 1.46, + "geometry_index": 56, + "location": [ + -121.451773, + 38.569185 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 289 + ], + "duration": 4.012, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "secondary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 5.291, + "geometry_index": 57, + "location": [ + -121.451642, + 38.56915 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 289 + ], + "duration": 2.442, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "secondary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 3.408, + "geometry_index": 58, + "location": [ + -121.45098, + 38.568973 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 289 + ], + "duration": 4.635, + "turn_weight": 2, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "secondary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 7.538, + "geometry_index": 59, + "location": [ + -121.4506, + 38.568871 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 289 + ], + "duration": 4.609, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "secondary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 6.008, + "geometry_index": 60, + "location": [ + -121.450054, + 38.568725 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 289 + ], + "duration": 2.297, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "secondary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 3.233, + "geometry_index": 61, + "location": [ + -121.449502, + 38.568578 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 289 + ], + "duration": 4.638, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "secondary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 6.043, + "geometry_index": 62, + "location": [ + -121.449165, + 38.568488 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 289 + ], + "duration": 5.491, + "turn_weight": 2, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "secondary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 8.566, + "geometry_index": 63, + "location": [ + -121.448423, + 38.568293 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 289 + ], + "duration": 1.686, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "secondary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 2.458, + "geometry_index": 64, + "location": [ + -121.447602, + 38.56807 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 289 + ], + "duration": 3.758, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "secondary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 4.893, + "geometry_index": 65, + "location": [ + -121.447328, + 38.567997 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 289 + ], + "duration": 3.687, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "secondary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 4.81, + "geometry_index": 66, + "location": [ + -121.446738, + 38.567839 + ] + }, + { + "entry": [ + true, + false + ], + "in": 1, + "bearings": [ + 109, + 289 + ], + "duration": 2.207, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "secondary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "weight": 3.071, + "geometry_index": 67, + "location": [ + -121.446148, + 38.567681 + ] + }, + { + "bearings": [ + 109, + 289 + ], + "entry": [ + true, + false + ], + "in": 1, + "turn_weight": 0.5, + "turn_duration": 0.019, + "mapbox_streets_v8": { + "class": "secondary" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "geometry_index": 68, + "location": [ + -121.445806, + 38.567591 + ] + } + ], + "bannerInstructions": [ + { + "primary": { + "components": [ + { + "type": "text", + "text": "47th Street" + } + ], + "type": "turn", + "modifier": "right", + "text": "47th Street" + }, + "distanceAlongGeometry": 1571 + } + ], + "speedLimitUnit": "mph", + "maneuver": { + "type": "end of road", + "instruction": "Turn right onto J Street.", + "modifier": "right", + "bearing_after": 109, + "bearing_before": 19, + "location": [ + -121.462166, + 38.571961 + ] + }, + "speedLimitSign": "mutcd", + "name": "J Street", + "weight_typical": 183.942, + "duration_typical": 128.827, + "duration": 128.827, + "distance": 1571, + "driving_side": "right", + "weight": 183.942, + "mode": "driving", + "geometry": "qzfqhAjxmtfFjMyt@bKcl@dFaZrDcThH}a@|CiQvJek@j@}CdHqa@pDySj@gDrCiPxBcMfDwRfIu`@vAeJpCoQjFc]xAwIjA}FdNmx@~Hkd@zDaUzFo\\|Fu\\dAeG`Jkh@jEwVbHca@dHoa@rDaTdKkm@|Lir@pCcPzH{c@zH{c@rDkTpK}m@" + }, + { + "voiceInstructions": [ + { + "ssmlAnnouncement": "Your destination is on the right.", + "announcement": "Your destination is on the right.", + "distanceAlongGeometry": 41.667 + } + ], + "intersections": [ + { + "bearings": [ + 199, + 289 + ], + "entry": [ + true, + false + ], + "in": 1, + "turn_weight": 8, + "turn_duration": 2.105, + "mapbox_streets_v8": { + "class": "street" + }, + "is_urban": true, + "admin_index": 0, + "out": 0, + "geometry_index": 69, + "location": [ + -121.445055, + 38.56739 + ] + } + ], + "bannerInstructions": [ + { + "primary": { + "components": [ + { + "type": "text", + "text": "Your destination will be on the right" + } + ], + "type": "arrive", + "modifier": "right", + "text": "Your destination will be on the right" + }, + "distanceAlongGeometry": 51.846 + }, + { + "primary": { + "components": [ + { + "type": "text", + "text": "Your destination is on the right" + } + ], + "type": "arrive", + "modifier": "right", + "text": "Your destination is on the right" + }, + "distanceAlongGeometry": 41.667 + } + ], + "speedLimitUnit": "mph", + "maneuver": { + "type": "turn", + "instruction": "Turn right onto 47th Street.", + "modifier": "right", + "bearing_after": 199, + "bearing_before": 109, + "location": [ + -121.445055, + 38.56739 + ] + }, + "speedLimitSign": "mutcd", + "name": "47th Street", + "weight_typical": 14.266, + "duration_typical": 7.438, + "duration": 7.438, + "distance": 51.846, + "driving_side": "right", + "weight": 14.266, + "mode": "driving", + "geometry": "{|}phA|jlsfFnZbK" + }, + { + "voiceInstructions": [], + "intersections": [ + { + "bearings": [ + 19 + ], + "entry": [ + true + ], + "in": 0, + "admin_index": 0, + "geometry_index": 70, + "location": [ + -121.445249, + 38.56695 + ] + } + ], + "bannerInstructions": [], + "speedLimitUnit": "mph", + "maneuver": { + "type": "arrive", + "instruction": "Your destination is on the right.", + "modifier": "right", + "bearing_after": 0, + "bearing_before": 199, + "location": [ + -121.445249, + 38.56695 + ] + }, + "speedLimitSign": "mutcd", + "name": "47th Street", + "weight_typical": 0, + "duration_typical": 0, + "duration": 0, + "distance": 0, + "driving_side": "right", + "weight": 0, + "mode": "driving", + "geometry": "ka}phA`wlsfF??" + } + ], + "distance": 2965.293, + "summary": "34th Street, J Street" + } + ], + "geometry": "ahtphArowtfFfHbCfBn@dCuNnNgx@dDwGsIuBan@oO{EeAcDy@oA]iOwDcf@sO}XaJsTeHk_@wLigAw]a_@uLeBk@qFeBs@UsFgBqHnJWZwFjHwOiF}a@eNep@kToiAi_@ui@qQyc@_O_ZwJjMyt@bKcl@dFaZrDcThH}a@|CiQvJek@j@}CdHqa@pDySj@gDrCiPxBcMfDwRfIu`@vAeJpCoQjFc]xAwIjA}FdNmx@~Hkd@zDaUzFo\\|Fu\\dAeG`Jkh@jEwVbHca@dHoa@rDaTdKkm@|Lir@pCcPzH{c@zH{c@rDkTpK}m@nZbK", + "voiceLocale": "en-US" + } + ], + "waypoints": [ + { + "distance": 0, + "name": "", + "location": [ + -121.467146, + 38.562449 + ] + }, + { + "distance": 41.273, + "name": "47th Street", + "location": [ + -121.445249, + 38.56695 + ] + } + ], + "code": "Ok", + "uuid": "n7gh893qc5n8gc123f4" +} \ No newline at end of file diff --git a/instrumentation-tests/src/main/res/raw/short_route.json b/instrumentation-tests/src/main/res/raw/short_route.json index 77bf09a8977..eb5357bb007 100644 --- a/instrumentation-tests/src/main/res/raw/short_route.json +++ b/instrumentation-tests/src/main/res/raw/short_route.json @@ -1 +1,311 @@ -{"routeIndex":"0","distance":80.3,"duration":40.9,"geometry":"etylgAl`guhFpJrBh@kHbC{[nAZ","weight":91.7,"weight_name":"routability","legs":[{"distance":80.3,"duration":40.9,"summary":"Laurel Place, Lincoln Avenue","steps":[{"distance":21.2,"duration":18.5,"geometry":"etylgAl`guhFpJrB","name":"","mode":"driving","maneuver":{"location":[-122.523671,37.975379],"bearing_before":0.0,"bearing_after":194.0,"instruction":"Head south","type":"depart","modifier":"right"},"voiceInstructions":[{"distanceAlongGeometry":21.2,"announcement":"Head south, then turn left onto Laurel Place","ssmlAnnouncement":"\u003cspeak\u003e\u003camazon:effect name\u003d\"drc\"\u003e\u003cprosody rate\u003d\"1.08\"\u003eHead south, then turn left onto Laurel Place\u003c/prosody\u003e\u003c/amazon:effect\u003e\u003c/speak\u003e"},{"distanceAlongGeometry":17.2,"announcement":"Turn left onto Laurel Place, then turn right onto Lincoln Avenue","ssmlAnnouncement":"\u003cspeak\u003e\u003camazon:effect name\u003d\"drc\"\u003e\u003cprosody rate\u003d\"1.08\"\u003eTurn left onto Laurel Place, then turn right onto Lincoln Avenue\u003c/prosody\u003e\u003c/amazon:effect\u003e\u003c/speak\u003e"}],"bannerInstructions":[{"distanceAlongGeometry":21.2,"primary":{"text":"Laurel Place","components":[{"text":"Laurel Place","type":"text","abbr":"Laurel Pl","abbr_priority":0}],"type":"turn","modifier":"left"}},{"distanceAlongGeometry":17.2,"primary":{"text":"Laurel Place","components":[{"text":"Laurel Place","type":"text","abbr":"Laurel Pl","abbr_priority":0}],"type":"turn","modifier":"left"},"sub":{"text":"Lincoln Avenue","components":[{"text":"Lincoln Avenue","type":"text","abbr":"Lincoln Ave","abbr_priority":0}],"type":"turn","modifier":"right"}}],"driving_side":"right","weight":53.6,"intersections":[{"location":[-122.523671,37.975379],"bearings":[194],"entry":[true],"out":0}]},{"distance":54.5,"duration":20.8,"geometry":"shylgA`dguhFh@kHbC{[","name":"Laurel Place","mode":"driving","maneuver":{"location":[-122.523729,37.975194],"bearing_before":194.0,"bearing_after":99.0,"instruction":"Turn left onto Laurel Place","type":"turn","modifier":"left"},"voiceInstructions":[{"distanceAlongGeometry":39.3,"announcement":"Turn right onto Lincoln Avenue, then you will arrive at your destination","ssmlAnnouncement":"\u003cspeak\u003e\u003camazon:effect name\u003d\"drc\"\u003e\u003cprosody rate\u003d\"1.08\"\u003eTurn right onto Lincoln Avenue, then you will arrive at your destination\u003c/prosody\u003e\u003c/amazon:effect\u003e\u003c/speak\u003e"}],"bannerInstructions":[{"distanceAlongGeometry":54.5,"primary":{"text":"Lincoln Avenue","components":[{"text":"Lincoln Avenue","type":"text","abbr":"Lincoln Ave","abbr_priority":0}],"type":"turn","modifier":"right"}}],"driving_side":"right","weight":36.5,"intersections":[{"location":[-122.523729,37.975194],"bearings":[15,105,285],"entry":[false,true,true],"in":0,"out":1}]},{"distance":4.6,"duration":1.6,"geometry":"ecylgAx}euhFnAZ","name":"Lincoln Avenue","mode":"driving","maneuver":{"location":[-122.523117,37.975107],"bearing_before":99.0,"bearing_after":194.0,"instruction":"Turn right onto Lincoln Avenue","type":"turn","modifier":"right"},"voiceInstructions":[{"distanceAlongGeometry":4.6,"announcement":"You have arrived at your destination","ssmlAnnouncement":"\u003cspeak\u003e\u003camazon:effect name\u003d\"drc\"\u003e\u003cprosody rate\u003d\"1.08\"\u003eYou have arrived at your destination\u003c/prosody\u003e\u003c/amazon:effect\u003e\u003c/speak\u003e"}],"bannerInstructions":[{"distanceAlongGeometry":4.6,"primary":{"text":"You have arrived","components":[{"text":"You have arrived","type":"text"}],"type":"arrive","modifier":"straight"}}],"driving_side":"right","weight":1.6,"intersections":[{"location":[-122.523117,37.975107],"bearings":[15,105,195,285],"entry":[true,true,true,false],"in":3,"out":2}]},{"distance":0.0,"duration":0.0,"geometry":"u`ylgAt~euhF","name":"Lincoln Avenue","mode":"driving","maneuver":{"location":[-122.523131,37.975067],"bearing_before":195.0,"bearing_after":0.0,"instruction":"You have arrived at your destination","type":"arrive"},"voiceInstructions":[],"bannerInstructions":[],"driving_side":"right","weight":0.0,"intersections":[{"location":[-122.523131,37.975067],"bearings":[15],"entry":[true],"in":0}]}],"annotation":{"distance":[21.195927744585475,13.357383159214507,41.16669115760234,4.6152763527970215],"congestion":["unknown","unknown","unknown","moderate"]}}],"routeOptions":{"baseUrl":"https://api.mapbox.com","user":"mapbox","profile":"driving-traffic","coordinates":"-122.5237429,37.975393;-122.5231413,37.9750695","alternatives":true,"language":"en","continue_straight":false,"roundabout_exits":false,"geometries":"polyline6","overview":"full","steps":true,"annotations":"congestion,distance","voice_instructions":true,"banner_instructions":true,"voice_units":"imperial"},"voiceLocale":"en-US", "requestUuid":"ckfx63od74hih2ro83w0w4mak"} \ No newline at end of file +{ + "routeIndex": "0", + "distance": 80.3, + "duration": 40.9, + "geometry": "etylgAl`guhFpJrBh@kHbC{[nAZ", + "weight": 91.7, + "weight_name": "routability", + "legs": [ + { + "distance": 80.3, + "duration": 40.9, + "summary": "Laurel Place, Lincoln Avenue", + "via_waypoints": [], + "steps": [ + { + "distance": 21.2, + "duration": 18.5, + "geometry": "etylgAl`guhFpJrB", + "name": "", + "mode": "driving", + "maneuver": { + "location": [ + -122.523671, + 37.975379 + ], + "bearing_before": 0.0, + "bearing_after": 194.0, + "instruction": "Head south", + "type": "depart", + "modifier": "right" + }, + "voiceInstructions": [ + { + "distanceAlongGeometry": 21.2, + "announcement": "Head south, then turn left onto Laurel Place", + "ssmlAnnouncement": "\u003cspeak\u003e\u003camazon:effect name\u003d\"drc\"\u003e\u003cprosody rate\u003d\"1.08\"\u003eHead south, then turn left onto Laurel Place\u003c/prosody\u003e\u003c/amazon:effect\u003e\u003c/speak\u003e" + }, + { + "distanceAlongGeometry": 17.2, + "announcement": "Turn left onto Laurel Place, then turn right onto Lincoln Avenue", + "ssmlAnnouncement": "\u003cspeak\u003e\u003camazon:effect name\u003d\"drc\"\u003e\u003cprosody rate\u003d\"1.08\"\u003eTurn left onto Laurel Place, then turn right onto Lincoln Avenue\u003c/prosody\u003e\u003c/amazon:effect\u003e\u003c/speak\u003e" + } + ], + "bannerInstructions": [ + { + "distanceAlongGeometry": 21.2, + "primary": { + "text": "Laurel Place", + "components": [ + { + "text": "Laurel Place", + "type": "text", + "abbr": "Laurel Pl", + "abbr_priority": 0 + } + ], + "type": "turn", + "modifier": "left" + } + }, + { + "distanceAlongGeometry": 17.2, + "primary": { + "text": "Laurel Place", + "components": [ + { + "text": "Laurel Place", + "type": "text", + "abbr": "Laurel Pl", + "abbr_priority": 0 + } + ], + "type": "turn", + "modifier": "left" + }, + "sub": { + "text": "Lincoln Avenue", + "components": [ + { + "text": "Lincoln Avenue", + "type": "text", + "abbr": "Lincoln Ave", + "abbr_priority": 0 + } + ], + "type": "turn", + "modifier": "right" + } + } + ], + "driving_side": "right", + "weight": 53.6, + "intersections": [ + { + "location": [ + -122.523671, + 37.975379 + ], + "bearings": [ + 194 + ], + "entry": [ + true + ], + "out": 0 + } + ] + }, + { + "distance": 54.5, + "duration": 20.8, + "geometry": "shylgA`dguhFh@kHbC{[", + "name": "Laurel Place", + "mode": "driving", + "maneuver": { + "location": [ + -122.523729, + 37.975194 + ], + "bearing_before": 194.0, + "bearing_after": 99.0, + "instruction": "Turn left onto Laurel Place", + "type": "turn", + "modifier": "left" + }, + "voiceInstructions": [ + { + "distanceAlongGeometry": 39.3, + "announcement": "Turn right onto Lincoln Avenue, then you will arrive at your destination", + "ssmlAnnouncement": "\u003cspeak\u003e\u003camazon:effect name\u003d\"drc\"\u003e\u003cprosody rate\u003d\"1.08\"\u003eTurn right onto Lincoln Avenue, then you will arrive at your destination\u003c/prosody\u003e\u003c/amazon:effect\u003e\u003c/speak\u003e" + } + ], + "bannerInstructions": [ + { + "distanceAlongGeometry": 54.5, + "primary": { + "text": "Lincoln Avenue", + "components": [ + { + "text": "Lincoln Avenue", + "type": "text", + "abbr": "Lincoln Ave", + "abbr_priority": 0 + } + ], + "type": "turn", + "modifier": "right" + } + } + ], + "driving_side": "right", + "weight": 36.5, + "intersections": [ + { + "location": [ + -122.523729, + 37.975194 + ], + "bearings": [ + 15, + 105, + 285 + ], + "entry": [ + false, + true, + true + ], + "in": 0, + "out": 1 + } + ] + }, + { + "distance": 4.6, + "duration": 1.6, + "geometry": "ecylgAx}euhFnAZ", + "name": "Lincoln Avenue", + "mode": "driving", + "maneuver": { + "location": [ + -122.523117, + 37.975107 + ], + "bearing_before": 99.0, + "bearing_after": 194.0, + "instruction": "Turn right onto Lincoln Avenue", + "type": "turn", + "modifier": "right" + }, + "voiceInstructions": [ + { + "distanceAlongGeometry": 4.6, + "announcement": "You have arrived at your destination", + "ssmlAnnouncement": "\u003cspeak\u003e\u003camazon:effect name\u003d\"drc\"\u003e\u003cprosody rate\u003d\"1.08\"\u003eYou have arrived at your destination\u003c/prosody\u003e\u003c/amazon:effect\u003e\u003c/speak\u003e" + } + ], + "bannerInstructions": [ + { + "distanceAlongGeometry": 4.6, + "primary": { + "text": "You have arrived", + "components": [ + { + "text": "You have arrived", + "type": "text" + } + ], + "type": "arrive", + "modifier": "straight" + } + } + ], + "driving_side": "right", + "weight": 1.6, + "intersections": [ + { + "location": [ + -122.523117, + 37.975107 + ], + "bearings": [ + 15, + 105, + 195, + 285 + ], + "entry": [ + true, + true, + true, + false + ], + "in": 3, + "out": 2 + } + ] + }, + { + "distance": 0.0, + "duration": 0.0, + "geometry": "u`ylgAt~euhF", + "name": "Lincoln Avenue", + "mode": "driving", + "maneuver": { + "location": [ + -122.523131, + 37.975067 + ], + "bearing_before": 195.0, + "bearing_after": 0.0, + "instruction": "You have arrived at your destination", + "type": "arrive" + }, + "voiceInstructions": [], + "bannerInstructions": [], + "driving_side": "right", + "weight": 0.0, + "intersections": [ + { + "location": [ + -122.523131, + 37.975067 + ], + "bearings": [ + 15 + ], + "entry": [ + true + ], + "in": 0 + } + ] + } + ], + "annotation": { + "distance": [ + 21.195927744585475, + 13.357383159214507, + 41.16669115760234, + 4.6152763527970215 + ], + "congestion": [ + "unknown", + "unknown", + "unknown", + "moderate" + ] + } + } + ], + "routeOptions": { + "baseUrl": "https://api.mapbox.com", + "user": "mapbox", + "profile": "driving-traffic", + "coordinates": "-122.5237429,37.975393;-122.5231413,37.9750695", + "alternatives": true, + "language": "en", + "continue_straight": false, + "roundabout_exits": false, + "geometries": "polyline6", + "overview": "full", + "steps": true, + "annotations": "congestion,distance", + "voice_instructions": true, + "banner_instructions": true, + "voice_units": "imperial" + }, + "voiceLocale": "en-US", + "requestUuid": "ckfx63od74hih2ro83w0w4mak" +} \ No newline at end of file diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/internal/NativeRouteParserWrapper.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/internal/NativeRouteParserWrapper.kt index c2b4cc0cbcf..2df76a908bb 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/internal/NativeRouteParserWrapper.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/internal/NativeRouteParserWrapper.kt @@ -12,6 +12,12 @@ interface SDKRouteParser { request: String, routerOrigin: RouterOrigin, ): Expected> + + fun parseDirectionsRoutes( + directionsRoutes: String, + request: String, + routerOrigin: RouterOrigin, + ): Expected> } object NativeRouteParserWrapper : SDKRouteParser { @@ -25,4 +31,15 @@ object NativeRouteParserWrapper : SDKRouteParser { request, routerOrigin.mapToNativeRouteOrigin() ) + + override fun parseDirectionsRoutes( + directionsRoutes: String, + request: String, + routerOrigin: RouterOrigin, + ): Expected> = + RouteParser.parseDirectionsRoutes( + directionsRoutes, + request, + routerOrigin.mapToNativeRouteOrigin() + ) } diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/internal/route/NavigationRouteEx.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/internal/route/NavigationRouteEx.kt index 13d458d1810..4140fc000b2 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/internal/route/NavigationRouteEx.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/internal/route/NavigationRouteEx.kt @@ -12,6 +12,7 @@ import com.mapbox.api.directions.v5.models.LegAnnotation import com.mapbox.api.directions.v5.models.LegStep import com.mapbox.api.directions.v5.models.RouteLeg import com.mapbox.api.directions.v5.models.RouteOptions +import com.mapbox.navigation.base.internal.NativeRouteParserWrapper import com.mapbox.navigation.base.internal.SDKRouteParser import com.mapbox.navigation.base.route.NavigationRoute import com.mapbox.navigation.base.route.toNavigationRoute @@ -149,6 +150,20 @@ fun createNavigationRoutes( ): List = NavigationRoute.create(directionsResponse, routeOptions, routeParser, routerOrigin) +@VisibleForTesting +fun createNavigationRoutes( + directionsRoutes: List, + routeOptions: RouteOptions, + routerOrigin: com.mapbox.navigation.base.route.RouterOrigin, + routeParser: SDKRouteParser = NativeRouteParserWrapper +): List = + NavigationRoute.create( + directionsRoutes, + routeOptions, + routerOrigin, + routeParser, + ) + /** * Internal API to create a new [NavigationRoute] from a native peer. */ diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationRoute.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationRoute.kt index 69d0afd1ffe..d2bd3924480 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationRoute.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationRoute.kt @@ -27,6 +27,8 @@ import com.mapbox.navigation.utils.internal.logI import com.mapbox.navigator.RouteInterface import kotlinx.coroutines.async import kotlinx.coroutines.coroutineScope +import org.json.JSONArray +import org.json.JSONObject import java.net.URL /** @@ -203,6 +205,44 @@ class NavigationRoute internal constructor( } } + internal fun create( + directionsRoutes: List, + routeOptions: RouteOptions, + routerOrigin: RouterOrigin, + routeParser: SDKRouteParser = NativeRouteParserWrapper + ): List { + + val jsonArray = JSONArray() + directionsRoutes.forEach { + jsonArray.put(JSONObject(it.toJson())) + } + val directionsRoutesJson = JSONObject().also { + it.put("routes", jsonArray) + }.toString() + + return create( + directionsRoutesJson, + routeOptions.toUrl("").toString(), + routerOrigin, + routeParser + ) + } + + private fun create( + directionsRoutesJson: String, + routeOptionsUrlString: String, + routerOrigin: RouterOrigin, + routeParser: SDKRouteParser = NativeRouteParserWrapper + ): List { + return routeParser.parseDirectionsRoutes( + directionsRoutesJson, + routeOptionsUrlString, + routerOrigin + ).run { + create(this) + } + } + internal fun create( directionsResponse: DirectionsResponse, routeOptions: RouteOptions, @@ -255,6 +295,19 @@ class NavigationRoute internal constructor( ) }.cache() } + + private fun create( + expected: Expected> + ): List { + return expected.fold({ error -> + logE("NavigationRoute", "Failed to parse a route. Reason: $error") + listOf() + }, { value -> + value + }).map { routeInterface -> + routeInterface.toNavigationRoute() + }.cache() + } } /** @@ -507,8 +560,10 @@ internal fun DirectionsRoute.toNavigationRoute( } internal fun RouteInterface.toNavigationRoute(): NavigationRoute { + val jsonObj = JSONObject(responseJson) + jsonObj.put("code", "Ok") return NavigationRoute( - directionsResponse = DirectionsResponse.fromJson(responseJson), + directionsResponse = DirectionsResponse.fromJson(jsonObj.toString()), routeOptions = RouteOptions.fromUrl(URL(requestUri)), routeIndex = routeIndex, nativeRoute = this diff --git a/libtesting-navigation-base/src/main/java/com/mapbox/navigation/testing/factories/NavigationRouteFactory.kt b/libtesting-navigation-base/src/main/java/com/mapbox/navigation/testing/factories/NavigationRouteFactory.kt index 9060d1d6fee..bf175c17f07 100644 --- a/libtesting-navigation-base/src/main/java/com/mapbox/navigation/testing/factories/NavigationRouteFactory.kt +++ b/libtesting-navigation-base/src/main/java/com/mapbox/navigation/testing/factories/NavigationRouteFactory.kt @@ -38,6 +38,14 @@ fun createNavigationRoute( ) ) } + + override fun parseDirectionsRoutes( + directionsRoutes: String, + request: String, + routerOrigin: RouterOrigin + ): Expected> { + throw IllegalStateException("parseDirectionsRoutes is not supported yet") + } } ) } @@ -69,6 +77,14 @@ class TestSDKRouteParser : SDKRouteParser { ) return ExpectedFactory.createValue(result) } + + override fun parseDirectionsRoutes( + directionsRoutes: String, + request: String, + routerOrigin: RouterOrigin + ): Expected> { + throw IllegalStateException("parseDirectionsRoutes is not supported yet") + } } fun createRouteInterfacesFromDirectionRequestResponse(