From 4aac5548da0be05c9274aa70aee6bd277a25e97b Mon Sep 17 00:00:00 2001 From: osana Date: Wed, 21 Mar 2018 13:36:50 -0400 Subject: [PATCH] Added MapMaptchingMatching to DirectionsRoute --- Makefile | 2 +- .../api/matching/v5/MapboxMapMatching.java | 62 ++++++++++++++++- .../v5/models/MapMatchingMatching.java | 40 +++++++++++ .../v5/models/MapMatchingResponse.java | 2 +- .../matching/v5/MapboxMapMatchingTest.java | 66 ++++++++++++------- .../resources/map_matching_v5_polyline.json | 2 +- .../resources/mapmatching_v5_polyline.json | 1 - 7 files changed, 144 insertions(+), 31 deletions(-) delete mode 100644 services-matching/src/test/resources/mapmatching_v5_polyline.json diff --git a/Makefile b/Makefile index 24c0b236e..c95f14ffb 100644 --- a/Makefile +++ b/Makefile @@ -110,7 +110,7 @@ directions-fixtures: mapmatching-fixtures: curl "https://api.mapbox.com/matching/v5/mapbox/driving/$(MAP_MATCHING_COORDINATES)?geometries=polyline&language=sv&steps=true&access_token=$(MAPBOX_ACCESS_TOKEN)" \ - -o services-matching/src/test/resources/mapmatching_v5_polyline.json + -o services-matching/src/test/resources/map_matching_v5_polyline.json # Unmatchable MapMatching request curl "https://api.mapbox.com/matching/v5/mapbox/driving/0,-40;0,-20?access_token=$(MAPBOX_ACCESS_TOKEN)" \ diff --git a/services-matching/src/main/java/com/mapbox/api/matching/v5/MapboxMapMatching.java b/services-matching/src/main/java/com/mapbox/api/matching/v5/MapboxMapMatching.java index 8bec39438..45973996c 100644 --- a/services-matching/src/main/java/com/mapbox/api/matching/v5/MapboxMapMatching.java +++ b/services-matching/src/main/java/com/mapbox/api/matching/v5/MapboxMapMatching.java @@ -15,8 +15,10 @@ import com.mapbox.api.directions.v5.DirectionsCriteria.GeometriesCriteria; import com.mapbox.api.directions.v5.DirectionsCriteria.OverviewCriteria; import com.mapbox.api.directions.v5.DirectionsCriteria.ProfileCriteria; +import com.mapbox.api.directions.v5.models.RouteOptions; import com.mapbox.api.matching.v5.models.MapMatchingAdapterFactory; import com.mapbox.api.matching.v5.models.MapMatchingError; +import com.mapbox.api.matching.v5.models.MapMatchingMatching; import com.mapbox.api.matching.v5.models.MapMatchingResponse; import com.mapbox.core.MapboxService; import com.mapbox.core.constants.Constants; @@ -104,7 +106,11 @@ public Response executeCall() throws IOException { if (!response.isSuccessful()) { errorDidOccur(null, response); } - return response; + + return Response.success(response.body() + .toBuilder() + .matchings(generateRouteOptions(response)) + .build()); } /** @@ -124,8 +130,19 @@ public void onResponse(Call call, if (!response.isSuccessful()) { errorDidOccur(callback, response); return; + + } else if (response.body() == null || response.body().matchings().isEmpty()) { + // If null just pass the original object back since there's nothing to modify. + callback.onResponse(call, response); + return; } - callback.onResponse(call, response); + MapMatchingResponse newResponse = + response + .body() + .toBuilder() + .matchings(generateRouteOptions(response)) + .build(); + callback.onResponse(call, Response.success(newResponse)); } @Override @@ -152,6 +169,47 @@ private void errorDidOccur(@Nullable Callback callback, } } + private List generateRouteOptions(Response response) { + List matchings = response.body().matchings(); + List modifiedMatchings = new ArrayList<>(); + for (MapMatchingMatching matching : matchings) { + modifiedMatchings.add(matching.toBuilder().routeOptions( + RouteOptions.builder() + .profile(profile()) + .coordinates(formatCoordinates(coordinates())) + .annotations(annotations()) + .language(language()) + .radiuses(radiuses()) + .user(user()) + .voiceInstructions(voiceInstructions()) + .bannerInstructions(bannerInstructions()) + //.continueStraight(continueStraight()) + //.bearings(bearings()) + //.alternatives(alternatives()) + //.exclude(exclude()) + //.voiceUnits(voiceUnits()) + .requestUuid("mapmatching") + .accessToken(accessToken()) + .baseUrl(baseUrl()) + .build() + ).build()); + } + return modifiedMatchings; + } + + private static List formatCoordinates(String coordinates) { + String[] coordPairs = coordinates.split(";"); + List coordinatesFormatted = new ArrayList<>(); + for (String coordPair : coordPairs) { + String[] coords = coordPair.split(","); + coordinatesFormatted.add( + Point.fromLngLat(Double.valueOf(coords[0]), Double.valueOf(coords[1]))); + + } + return coordinatesFormatted; + } + + @Nullable abstract String clientAppName(); diff --git a/services-matching/src/main/java/com/mapbox/api/matching/v5/models/MapMatchingMatching.java b/services-matching/src/main/java/com/mapbox/api/matching/v5/models/MapMatchingMatching.java index c86cf3bf1..62d051828 100644 --- a/services-matching/src/main/java/com/mapbox/api/matching/v5/models/MapMatchingMatching.java +++ b/services-matching/src/main/java/com/mapbox/api/matching/v5/models/MapMatchingMatching.java @@ -7,6 +7,7 @@ import com.google.gson.annotations.SerializedName; import com.mapbox.api.directions.v5.models.RouteLeg; import com.mapbox.api.directions.v5.models.DirectionsRoute; +import com.mapbox.api.directions.v5.models.RouteOptions; import java.io.Serializable; import java.util.List; @@ -90,6 +91,17 @@ public static Builder builder() { */ public abstract double confidence(); + /** + * Holds onto the parameter information used when making the directions request. Useful for + * re-requesting a directions route using the same information previously used. + * + * @return a {@link RouteOptions}s object which holds onto critical information from the request + * that cannot be derived directly from the directions route + * @since 3.0.0 + */ + @Nullable + public abstract RouteOptions routeOptions(); + /** * Convert the current {@link MapMatchingMatching} to its builder holding the currently assigned * values. This allows you to modify a single variable and then rebuild the project resulting in @@ -101,6 +113,24 @@ public static Builder builder() { */ public abstract MapMatchingMatching.Builder toBuilder(); + /** + * Map this MapMatchingMatching object to a {@link DirectionsRoute} object. + * + * @return a {@link DirectionsRoute} object + */ + public DirectionsRoute toDirectionRoute() { + + return DirectionsRoute.builder() + .legs(legs()) + .geometry(geometry()) + .weightName(weightName()) + .weight(weight()) + .duration(duration()) + .distance(distance()) + .routeOptions(routeOptions()) + .build(); + } + /** * Gson type adapter for parsing Gson to this class. * @@ -185,6 +215,16 @@ public abstract static class Builder { */ public abstract Builder confidence(double confidence); + /** + * Holds onto the parameter information used when making the directions request. + * + * @param routeOptions a {@link RouteOptions}s object which holds onto critical information from + * the request that cannot be derived directly from the directions route + * @return this builder for chaining options together + * @since 3.0.0 + */ + public abstract MapMatchingMatching.Builder routeOptions(@Nullable RouteOptions routeOptions); + /** * Build a new {@link MapMatchingMatching} object. * diff --git a/services-matching/src/main/java/com/mapbox/api/matching/v5/models/MapMatchingResponse.java b/services-matching/src/main/java/com/mapbox/api/matching/v5/models/MapMatchingResponse.java index f7a75dc4b..a9aee72e7 100644 --- a/services-matching/src/main/java/com/mapbox/api/matching/v5/models/MapMatchingResponse.java +++ b/services-matching/src/main/java/com/mapbox/api/matching/v5/models/MapMatchingResponse.java @@ -86,7 +86,7 @@ public static Builder builder() { * defined in this {@link MapMatchingResponse} * @since 3.0.0 */ - public abstract MapMatchingResponse.Builder toBuilder(); + public abstract Builder toBuilder(); /** * Gson type adapter for parsing Gson to this class. diff --git a/services-matching/src/test/java/com/mapbox/api/matching/v5/MapboxMapMatchingTest.java b/services-matching/src/test/java/com/mapbox/api/matching/v5/MapboxMapMatchingTest.java index 4dbd01d5d..e507a41e2 100644 --- a/services-matching/src/test/java/com/mapbox/api/matching/v5/MapboxMapMatchingTest.java +++ b/services-matching/src/test/java/com/mapbox/api/matching/v5/MapboxMapMatchingTest.java @@ -3,6 +3,7 @@ import static org.hamcrest.CoreMatchers.containsString; import static org.hamcrest.junit.MatcherAssert.assertThat; +import com.mapbox.api.matching.v5.models.MapMatchingMatching; import com.mapbox.api.matching.v5.models.MapMatchingResponse; import com.mapbox.core.TestUtils; import com.mapbox.core.exceptions.ServicesException; @@ -37,6 +38,7 @@ public class MapboxMapMatchingTest extends TestUtils { private MockWebServer server; private HttpUrl mockUrl; + private List coordinates; @Before public void setUp() throws Exception { @@ -56,6 +58,14 @@ public MockResponse dispatch(RecordedRequest request) throws InterruptedExceptio } } }); + + coordinates = new ArrayList<>(); + coordinates.add(Point.fromLngLat(13.418946862220764, 52.50055852688439)); + coordinates.add(Point.fromLngLat(13.419011235237122, 52.50113000479732)); + coordinates.add(Point.fromLngLat(13.419756889343262, 52.50171780290061)); + coordinates.add(Point.fromLngLat(13.419885635375975, 52.50237416816131)); + coordinates.add(Point.fromLngLat(13.420631289482117, 52.50294888790448)); + server.start(); mockUrl = server.url(""); } @@ -71,8 +81,7 @@ public void tearDown() throws IOException { @Test public void sanity() throws Exception { MapboxMapMatching mapMatching = MapboxMapMatching.builder() - .coordinate(Point.fromLngLat(2.0, 2.0)) - .coordinate(Point.fromLngLat(4.0, 4.0)) + .coordinates(coordinates) .baseUrl(mockUrl.toString()) .accessToken(ACCESS_TOKEN) .build(); @@ -86,7 +95,7 @@ public void build_exceptionThrownWhenLessThanTwoCoordsProvided() throws Exceptio startsWith("At least two coordinates must be provided with your API request.")); MapboxMapMatching mapMatching = MapboxMapMatching.builder() .coordinate(Point.fromLngLat(2.0, 2.0)) - .baseUrl(mockUrl.toString()) + .baseUrl("https://foobar.com") .accessToken(ACCESS_TOKEN) .build(); mapMatching.executeCall(); @@ -103,7 +112,7 @@ public void build_throwsExceptionWhenCoordsOverOneHundred() throws Exception { } MapboxMapMatching mapMatching = MapboxMapMatching.builder() .coordinates(coordinates) - .baseUrl(mockUrl.toString()) + .baseUrl("https://foobar.com") .accessToken(ACCESS_TOKEN) .build(); mapMatching.executeCall(); @@ -119,7 +128,7 @@ public void build_throwsExceptionWhenNotMatchingRadiusesForEachCoord() throws Ex .coordinate(Point.fromLngLat(2.0, 2.0)) .coordinate(Point.fromLngLat(2.0, 2.0)) .coordinate(Point.fromLngLat(2.0, 2.0)) - .baseUrl(mockUrl.toString()) + .baseUrl("https://foobar.com") .radiuses(2d, 3d, 4d) .accessToken(ACCESS_TOKEN) .build(); @@ -136,7 +145,7 @@ public void build_throwsExceptionWhenNotMatchingTimestampsForEachCoord() throws .coordinate(Point.fromLngLat(2.0, 2.0)) .coordinate(Point.fromLngLat(2.0, 2.0)) .coordinate(Point.fromLngLat(2.0, 2.0)) - .baseUrl(mockUrl.toString()) + .baseUrl("https://foobar.com") .timestamps("1", "1", "2") .accessToken(ACCESS_TOKEN) .build(); @@ -151,7 +160,7 @@ public void build_throwsExceptionWhenNoValidAccessTokenProvided() throws Excepti MapboxMapMatching mapMatching = MapboxMapMatching.builder() .coordinate(Point.fromLngLat(2.0, 2.0)) .coordinate(Point.fromLngLat(2.0, 2.0)) - .baseUrl(mockUrl.toString()) + .baseUrl("https://foobar.com") .build(); mapMatching.executeCall(); } @@ -159,20 +168,28 @@ public void build_throwsExceptionWhenNoValidAccessTokenProvided() throws Excepti @Test public void clientAppName_doesSetInHeaderCorrectly() throws Exception { MapboxMapMatching mapMatching = MapboxMapMatching.builder() - .coordinate(Point.fromLngLat(2.0, 2.0)) - .coordinate(Point.fromLngLat(2.0, 2.0)) + .coordinates(coordinates) .baseUrl(mockUrl.toString()) .clientAppName("APP") .accessToken(ACCESS_TOKEN) .build(); - assertTrue(mapMatching.executeCall().raw().request().header("User-Agent").contains("APP")); + assertTrue(mapMatching.cloneCall().request().header("User-Agent").contains("APP")); + } + + @Test + public void mapMatchingToDirectionsRoute() throws Exception { + MapboxMapMatching mapMatching = MapboxMapMatching.builder() + .coordinates(coordinates) + .baseUrl(mockUrl.toString()) + .accessToken(ACCESS_TOKEN) + .build(); + assertNotNull(mapMatching.executeCall().body().matchings().get(0).toDirectionRoute()); } @Test public void accessToken_doesGetPlacedInUrlCorrectly() throws Exception { MapboxMapMatching mapMatching = MapboxMapMatching.builder() - .coordinate(Point.fromLngLat(2.0, 2.0)) - .coordinate(Point.fromLngLat(2.0, 2.0)) + .coordinates(coordinates) .baseUrl(mockUrl.toString()) .accessToken(ACCESS_TOKEN) .build(); @@ -184,7 +201,7 @@ public void tidy_doesShowInUrlCorrectly() throws Exception { MapboxMapMatching mapMatching = MapboxMapMatching.builder() .coordinate(Point.fromLngLat(2.0, 2.0)) .coordinate(Point.fromLngLat(2.0, 2.0)) - .baseUrl(mockUrl.toString()) + .baseUrl("https://foobar.com") .tidy(true) .accessToken(ACCESS_TOKEN) .build(); @@ -196,7 +213,7 @@ public void user_doesShowInUrlCorrectly() throws Exception { MapboxMapMatching mapMatching = MapboxMapMatching.builder() .coordinate(Point.fromLngLat(2.0, 2.0)) .coordinate(Point.fromLngLat(2.0, 2.0)) - .baseUrl(mockUrl.toString()) + .baseUrl("https://foobar.com") .user("userString") .accessToken(ACCESS_TOKEN) .build(); @@ -208,7 +225,7 @@ public void profile_doesShowInUrlCorrectly() throws Exception { MapboxMapMatching mapMatching = MapboxMapMatching.builder() .coordinate(Point.fromLngLat(2.0, 2.0)) .coordinate(Point.fromLngLat(2.0, 2.0)) - .baseUrl(mockUrl.toString()) + .baseUrl("https://foobar.com") .profile(DirectionsCriteria.PROFILE_DRIVING) .accessToken(ACCESS_TOKEN) .build(); @@ -221,7 +238,7 @@ public void coordinates_doesShowInUrlCorrectly() throws Exception { .coordinate(Point.fromLngLat(2.1234, 3.3456)) .coordinate(Point.fromLngLat(90.10293, 7.10293)) .coordinate(Point.fromLngLat(100.10203, 84.039)) - .baseUrl(mockUrl.toString()) + .baseUrl("https://foobar.com") .profile(DirectionsCriteria.PROFILE_DRIVING) .accessToken(ACCESS_TOKEN) .build(); @@ -236,7 +253,7 @@ public void geometries_doesShowInUrlCorrectly() throws Exception { .coordinate(Point.fromLngLat(2.1234, 3.3456)) .coordinate(Point.fromLngLat(90.10293, 7.10293)) .coordinate(Point.fromLngLat(100.10203, 84.039)) - .baseUrl(mockUrl.toString()) + .baseUrl("https://foobar.com") .accessToken(ACCESS_TOKEN) .geometries(DirectionsCriteria.GEOMETRY_POLYLINE) .build(); @@ -250,7 +267,7 @@ public void radiuses_doesShowInUrlCorrectly() throws Exception { .coordinate(Point.fromLngLat(2.1234, 3.3456)) .coordinate(Point.fromLngLat(90.10293, 7.10293)) .coordinate(Point.fromLngLat(100.10203, 84.039)) - .baseUrl(mockUrl.toString()) + .baseUrl("https://foobar.com") .accessToken(ACCESS_TOKEN) .radiuses(1d, 2d, 3d) .build(); @@ -264,7 +281,7 @@ public void steps_doesShowInUrlCorrectly() throws Exception { .coordinate(Point.fromLngLat(2.1234, 3.3456)) .coordinate(Point.fromLngLat(90.10293, 7.10293)) .coordinate(Point.fromLngLat(100.10203, 84.039)) - .baseUrl(mockUrl.toString()) + .baseUrl("https://foobar.com") .accessToken(ACCESS_TOKEN) .steps(true) .build(); @@ -278,7 +295,7 @@ public void overview_doesShowInUrlCorrectly() throws Exception { .coordinate(Point.fromLngLat(2.1234, 3.3456)) .coordinate(Point.fromLngLat(90.10293, 7.10293)) .coordinate(Point.fromLngLat(100.10203, 84.039)) - .baseUrl(mockUrl.toString()) + .baseUrl("https://foobar.com") .accessToken(ACCESS_TOKEN) .overview(DirectionsCriteria.OVERVIEW_FULL) .build(); @@ -292,7 +309,7 @@ public void timestamps_doesShowInUrlCorrectly() throws Exception { .coordinate(Point.fromLngLat(2.1234, 3.3456)) .coordinate(Point.fromLngLat(90.10293, 7.10293)) .coordinate(Point.fromLngLat(100.10203, 84.039)) - .baseUrl(mockUrl.toString()) + .baseUrl("https://foobar.com") .accessToken(ACCESS_TOKEN) .timestamps("1", "2", "3") .build(); @@ -306,7 +323,7 @@ public void annotations_doesShowInUrlCorrectly() throws Exception { .coordinate(Point.fromLngLat(2.1234, 3.3456)) .coordinate(Point.fromLngLat(90.10293, 7.10293)) .coordinate(Point.fromLngLat(100.10203, 84.039)) - .baseUrl(mockUrl.toString()) + .baseUrl("https://foobar.com") .accessToken(ACCESS_TOKEN) .annotations( DirectionsCriteria.ANNOTATION_DISTANCE, @@ -322,7 +339,7 @@ public void language_doesShowInUrlCorrectly() throws Exception { .coordinate(Point.fromLngLat(2.1234, 3.3456)) .coordinate(Point.fromLngLat(90.10293, 7.10293)) .coordinate(Point.fromLngLat(100.10203, 84.039)) - .baseUrl(mockUrl.toString()) + .baseUrl("https://foobar.com") .accessToken(ACCESS_TOKEN) .language(Locale.US) .build(); @@ -336,9 +353,8 @@ public void baseUrl_doesShowInUrlCorrectly() throws Exception { .coordinate(Point.fromLngLat(2.1234, 3.3456)) .coordinate(Point.fromLngLat(90.10293, 7.10293)) .coordinate(Point.fromLngLat(100.10203, 84.039)) - .baseUrl(mockUrl.toString()) - .accessToken(ACCESS_TOKEN) .baseUrl("https://foobar.com") + .accessToken(ACCESS_TOKEN) .build(); assertTrue(mapMatching.cloneCall().request().url().toString() .startsWith("https://foobar.com")); diff --git a/services-matching/src/test/resources/map_matching_v5_polyline.json b/services-matching/src/test/resources/map_matching_v5_polyline.json index 3c51ab30c..ef3b5d2d6 100644 --- a/services-matching/src/test/resources/map_matching_v5_polyline.json +++ b/services-matching/src/test/resources/map_matching_v5_polyline.json @@ -1 +1 @@ -{"tracepoints":[{"waypoint_index":0,"matchings_index":0,"alternatives_count":0,"location":[13.418807,52.500595],"name":"Adalbertstraße"},{"waypoint_index":1,"matchings_index":0,"alternatives_count":0,"location":[13.419148,52.501096],"name":"Adalbertstraße"},{"waypoint_index":2,"matchings_index":0,"alternatives_count":0,"location":[13.41962,52.501755],"name":"Adalbertstraße"},{"waypoint_index":3,"matchings_index":0,"alternatives_count":0,"location":[13.420041,52.502334],"name":"Adalbertstraße"},{"waypoint_index":4,"matchings_index":0,"alternatives_count":1,"location":[13.420494,52.502984],"name":"Adalbertstraße"}],"matchings":[{"duration":70,"distance":289.20000000000005,"weight":74,"geometry":"w_m_Iqz{pAcBcAcC}AqBsAaCyA","confidence":0.8259225426255177,"weight_name":"routability","legs":[{"steps":[{"intersections":[{"out":0,"entry":[true],"location":[13.418807,52.500595],"bearings":[23]}],"geometry":"w_m_Iqz{pAKGoAu@GE","duration":22.7,"distance":60.3,"name":"Adalbertstraße","weight":22.7,"mode":"driving","maneuver":{"bearing_after":23,"location":[13.418807,52.500595],"type":"depart","bearing_before":0,"modifier":"right","instruction":"Kör åt nordost på Adalbertstraße"}},{"intersections":[{"in":0,"entry":[true],"location":[13.419148,52.501096],"bearings":[202]}],"geometry":"{bm_Iu|{pA","duration":0,"distance":0,"name":"Adalbertstraße","weight":0,"mode":"driving","maneuver":{"bearing_after":0,"location":[13.419148,52.501096],"type":"arrive","bearing_before":22,"modifier":"left","instruction":"Du är framme vid din 1:a destination, till vänster"}}],"weight":22.7,"distance":60.3,"summary":"Adalbertstraße","duration":22.7},{"steps":[{"intersections":[{"out":0,"entry":[true],"location":[13.419148,52.501096],"bearings":[22]},{"out":0,"in":2,"entry":[true,true,false,true],"location":[13.419277,52.501287],"bearings":[30,120,195,300]}],"geometry":"{bm_Iu|{pAe@Ym@a@o@a@","duration":20,"distance":80,"name":"Adalbertstraße","weight":24,"mode":"driving","maneuver":{"bearing_after":22,"location":[13.419148,52.501096],"type":"depart","bearing_before":0,"modifier":"left","instruction":"Kör åt nordost på Adalbertstraße"}},{"intersections":[{"in":0,"entry":[true],"location":[13.41962,52.501755],"bearings":[204]}],"geometry":"_gm_Is_|pA","duration":0,"distance":0,"name":"Adalbertstraße","weight":0,"mode":"driving","maneuver":{"bearing_after":0,"location":[13.41962,52.501755],"type":"arrive","bearing_before":24,"modifier":"right","instruction":"Du är framme vid din 2:a destination, till höger"}}],"weight":24,"distance":80,"summary":"Adalbertstraße","duration":20},{"steps":[{"intersections":[{"out":0,"entry":[true],"location":[13.41962,52.501755],"bearings":[24]},{"out":0,"in":2,"entry":[true,true,false,true],"location":[13.419982,52.502249],"bearings":[30,120,210,300]}],"geometry":"_gm_Is_|pAaBgAOK","duration":11.6,"distance":70.4,"name":"Adalbertstraße","weight":11.6,"mode":"driving","maneuver":{"bearing_after":24,"location":[13.41962,52.501755],"type":"depart","bearing_before":0,"modifier":"right","instruction":"Kör åt nordost på Adalbertstraße"}},{"intersections":[{"in":0,"entry":[true],"location":[13.420041,52.502334],"bearings":[203]}],"geometry":"qjm_Igb|pA","duration":0,"distance":0,"name":"Adalbertstraße","weight":0,"mode":"driving","maneuver":{"bearing_after":0,"location":[13.420041,52.502334],"type":"arrive","bearing_before":23,"modifier":"left","instruction":"Du är framme vid din 3:e destination, till vänster"}}],"weight":11.6,"distance":70.4,"summary":"Adalbertstraße","duration":11.6},{"steps":[{"intersections":[{"out":0,"entry":[true],"location":[13.420041,52.502334],"bearings":[23]}],"geometry":"qjm_Igb|pAaCyA","duration":15.7,"distance":78.5,"name":"Adalbertstraße","weight":15.7,"mode":"driving","maneuver":{"bearing_after":23,"location":[13.420041,52.502334],"type":"depart","bearing_before":0,"modifier":"left","instruction":"Kör åt nordost på Adalbertstraße"}},{"intersections":[{"in":0,"entry":[true],"location":[13.420494,52.502984],"bearings":[203]}],"geometry":"snm_Iae|pA","duration":0,"distance":0,"name":"Adalbertstraße","weight":0,"mode":"driving","maneuver":{"bearing_after":0,"location":[13.420494,52.502984],"type":"arrive","bearing_before":23,"modifier":"right","instruction":"Du är framme vid din destination, till höger"}}],"weight":15.7,"distance":78.5,"summary":"Adalbertstraße","duration":15.7}]}],"code":"Ok"} \ No newline at end of file +{"matchings":[{"confidence":0.8849067703299458,"geometry":"}_m_Iu{{pAEZwA{@cC}AqBsAaCyA","legs":[{"summary":"Adalbertstraße","weight":52.5,"duration":39.3,"steps":[{"intersections":[{"classes":["restricted"],"out":0,"entry":[true],"bearings":[291],"location":[13.418992,52.500626]}],"driving_side":"right","geometry":"}_m_Iu{{pA?DET","mode":"driving","maneuver":{"bearing_after":291,"bearing_before":0,"location":[13.418992,52.500626],"modifier":"left","type":"depart","instruction":"Kör åt nordväst"},"weight":33.6,"duration":20.4,"name":"","distance":10.2},{"intersections":[{"out":0,"in":1,"entry":[true,false,true],"bearings":[15,105,210],"location":[13.418852,52.500659]}],"driving_side":"right","geometry":"c`m_Iyz{pAoAu@GE","mode":"driving","maneuver":{"bearing_after":21,"bearing_before":291,"location":[13.418852,52.500659],"modifier":"right","type":"turn","instruction":"Sväng höger in på Adalbertstraße"},"weight":18.9,"duration":18.9,"name":"Adalbertstraße","distance":52.6},{"intersections":[{"in":0,"entry":[true],"bearings":[202],"location":[13.419148,52.501096]}],"driving_side":"right","geometry":"{bm_Iu|{pA","mode":"driving","maneuver":{"bearing_after":0,"bearing_before":22,"location":[13.419148,52.501096],"modifier":"left","type":"arrive","instruction":"Du är framme vid din 1:a destination, till vänster"},"weight":0,"duration":0,"name":"Adalbertstraße","distance":0}],"distance":62.7},{"summary":"Adalbertstraße","weight":30.1,"duration":18.1,"steps":[{"intersections":[{"out":0,"entry":[true],"bearings":[22],"location":[13.419148,52.501096]},{"out":0,"in":2,"entry":[true,true,false,true],"bearings":[30,120,195,300],"location":[13.419277,52.501287]}],"driving_side":"right","geometry":"{bm_Iu|{pAe@Ym@a@o@a@","mode":"driving","maneuver":{"bearing_after":22,"bearing_before":0,"location":[13.419148,52.501096],"modifier":"left","type":"depart","instruction":"Kör åt nordost på Adalbertstraße"},"weight":30.1,"duration":18.1,"name":"Adalbertstraße","distance":80},{"intersections":[{"in":0,"entry":[true],"bearings":[204],"location":[13.41962,52.501755]}],"driving_side":"right","geometry":"_gm_Is_|pA","mode":"driving","maneuver":{"bearing_after":0,"bearing_before":24,"location":[13.41962,52.501755],"modifier":"right","type":"arrive","instruction":"Du är framme vid din 2:a destination, till höger"},"weight":0,"duration":0,"name":"Adalbertstraße","distance":0}],"distance":80},{"summary":"Adalbertstraße","weight":11.2,"duration":11.1,"steps":[{"intersections":[{"out":0,"entry":[true],"bearings":[24],"location":[13.41962,52.501755]},{"out":0,"in":2,"entry":[true,true,false,true],"bearings":[30,120,210,300],"location":[13.419982,52.502249]}],"driving_side":"right","geometry":"_gm_Is_|pAaBgAOK","mode":"driving","maneuver":{"bearing_after":24,"bearing_before":0,"location":[13.41962,52.501755],"modifier":"right","type":"depart","instruction":"Kör åt nordost på Adalbertstraße"},"weight":11.2,"duration":11.100000000000001,"name":"Adalbertstraße","distance":70.4},{"intersections":[{"in":0,"entry":[true],"bearings":[203],"location":[13.420041,52.502334]}],"driving_side":"right","geometry":"qjm_Igb|pA","mode":"driving","maneuver":{"bearing_after":0,"bearing_before":23,"location":[13.420041,52.502334],"modifier":"left","type":"arrive","instruction":"Du är framme vid din 3:e destination, till vänster"},"weight":0,"duration":0,"name":"Adalbertstraße","distance":0}],"distance":70.4},{"summary":"Adalbertstraße","weight":20.2,"duration":20.2,"steps":[{"intersections":[{"out":0,"entry":[true],"bearings":[23],"location":[13.420041,52.502334]}],"driving_side":"right","geometry":"qjm_Igb|pAaCyA","mode":"driving","maneuver":{"bearing_after":23,"bearing_before":0,"location":[13.420041,52.502334],"modifier":"left","type":"depart","instruction":"Kör åt nordost på Adalbertstraße"},"weight":20.2,"duration":20.2,"name":"Adalbertstraße","distance":78.5},{"intersections":[{"in":0,"entry":[true],"bearings":[203],"location":[13.420494,52.502984]}],"driving_side":"right","geometry":"snm_Iae|pA","mode":"driving","maneuver":{"bearing_after":0,"bearing_before":23,"location":[13.420494,52.502984],"modifier":"right","type":"arrive","instruction":"Du är framme vid din destination, till höger"},"weight":0,"duration":0,"name":"Adalbertstraße","distance":0}],"distance":78.5}],"weight_name":"routability","weight":114,"duration":88.7,"distance":291.6}],"tracepoints":[{"alternatives_count":0,"waypoint_index":0,"matchings_index":0,"name":"","location":[13.418992,52.500626]},{"alternatives_count":0,"waypoint_index":1,"matchings_index":0,"name":"Adalbertstraße","location":[13.419148,52.501096]},{"alternatives_count":0,"waypoint_index":2,"matchings_index":0,"name":"Adalbertstraße","location":[13.41962,52.501755]},{"alternatives_count":0,"waypoint_index":3,"matchings_index":0,"name":"Adalbertstraße","location":[13.420041,52.502334]},{"alternatives_count":1,"waypoint_index":4,"matchings_index":0,"name":"Adalbertstraße","location":[13.420494,52.502984]}],"code":"Ok"} \ No newline at end of file diff --git a/services-matching/src/test/resources/mapmatching_v5_polyline.json b/services-matching/src/test/resources/mapmatching_v5_polyline.json deleted file mode 100644 index ef3b5d2d6..000000000 --- a/services-matching/src/test/resources/mapmatching_v5_polyline.json +++ /dev/null @@ -1 +0,0 @@ -{"matchings":[{"confidence":0.8849067703299458,"geometry":"}_m_Iu{{pAEZwA{@cC}AqBsAaCyA","legs":[{"summary":"Adalbertstraße","weight":52.5,"duration":39.3,"steps":[{"intersections":[{"classes":["restricted"],"out":0,"entry":[true],"bearings":[291],"location":[13.418992,52.500626]}],"driving_side":"right","geometry":"}_m_Iu{{pA?DET","mode":"driving","maneuver":{"bearing_after":291,"bearing_before":0,"location":[13.418992,52.500626],"modifier":"left","type":"depart","instruction":"Kör åt nordväst"},"weight":33.6,"duration":20.4,"name":"","distance":10.2},{"intersections":[{"out":0,"in":1,"entry":[true,false,true],"bearings":[15,105,210],"location":[13.418852,52.500659]}],"driving_side":"right","geometry":"c`m_Iyz{pAoAu@GE","mode":"driving","maneuver":{"bearing_after":21,"bearing_before":291,"location":[13.418852,52.500659],"modifier":"right","type":"turn","instruction":"Sväng höger in på Adalbertstraße"},"weight":18.9,"duration":18.9,"name":"Adalbertstraße","distance":52.6},{"intersections":[{"in":0,"entry":[true],"bearings":[202],"location":[13.419148,52.501096]}],"driving_side":"right","geometry":"{bm_Iu|{pA","mode":"driving","maneuver":{"bearing_after":0,"bearing_before":22,"location":[13.419148,52.501096],"modifier":"left","type":"arrive","instruction":"Du är framme vid din 1:a destination, till vänster"},"weight":0,"duration":0,"name":"Adalbertstraße","distance":0}],"distance":62.7},{"summary":"Adalbertstraße","weight":30.1,"duration":18.1,"steps":[{"intersections":[{"out":0,"entry":[true],"bearings":[22],"location":[13.419148,52.501096]},{"out":0,"in":2,"entry":[true,true,false,true],"bearings":[30,120,195,300],"location":[13.419277,52.501287]}],"driving_side":"right","geometry":"{bm_Iu|{pAe@Ym@a@o@a@","mode":"driving","maneuver":{"bearing_after":22,"bearing_before":0,"location":[13.419148,52.501096],"modifier":"left","type":"depart","instruction":"Kör åt nordost på Adalbertstraße"},"weight":30.1,"duration":18.1,"name":"Adalbertstraße","distance":80},{"intersections":[{"in":0,"entry":[true],"bearings":[204],"location":[13.41962,52.501755]}],"driving_side":"right","geometry":"_gm_Is_|pA","mode":"driving","maneuver":{"bearing_after":0,"bearing_before":24,"location":[13.41962,52.501755],"modifier":"right","type":"arrive","instruction":"Du är framme vid din 2:a destination, till höger"},"weight":0,"duration":0,"name":"Adalbertstraße","distance":0}],"distance":80},{"summary":"Adalbertstraße","weight":11.2,"duration":11.1,"steps":[{"intersections":[{"out":0,"entry":[true],"bearings":[24],"location":[13.41962,52.501755]},{"out":0,"in":2,"entry":[true,true,false,true],"bearings":[30,120,210,300],"location":[13.419982,52.502249]}],"driving_side":"right","geometry":"_gm_Is_|pAaBgAOK","mode":"driving","maneuver":{"bearing_after":24,"bearing_before":0,"location":[13.41962,52.501755],"modifier":"right","type":"depart","instruction":"Kör åt nordost på Adalbertstraße"},"weight":11.2,"duration":11.100000000000001,"name":"Adalbertstraße","distance":70.4},{"intersections":[{"in":0,"entry":[true],"bearings":[203],"location":[13.420041,52.502334]}],"driving_side":"right","geometry":"qjm_Igb|pA","mode":"driving","maneuver":{"bearing_after":0,"bearing_before":23,"location":[13.420041,52.502334],"modifier":"left","type":"arrive","instruction":"Du är framme vid din 3:e destination, till vänster"},"weight":0,"duration":0,"name":"Adalbertstraße","distance":0}],"distance":70.4},{"summary":"Adalbertstraße","weight":20.2,"duration":20.2,"steps":[{"intersections":[{"out":0,"entry":[true],"bearings":[23],"location":[13.420041,52.502334]}],"driving_side":"right","geometry":"qjm_Igb|pAaCyA","mode":"driving","maneuver":{"bearing_after":23,"bearing_before":0,"location":[13.420041,52.502334],"modifier":"left","type":"depart","instruction":"Kör åt nordost på Adalbertstraße"},"weight":20.2,"duration":20.2,"name":"Adalbertstraße","distance":78.5},{"intersections":[{"in":0,"entry":[true],"bearings":[203],"location":[13.420494,52.502984]}],"driving_side":"right","geometry":"snm_Iae|pA","mode":"driving","maneuver":{"bearing_after":0,"bearing_before":23,"location":[13.420494,52.502984],"modifier":"right","type":"arrive","instruction":"Du är framme vid din destination, till höger"},"weight":0,"duration":0,"name":"Adalbertstraße","distance":0}],"distance":78.5}],"weight_name":"routability","weight":114,"duration":88.7,"distance":291.6}],"tracepoints":[{"alternatives_count":0,"waypoint_index":0,"matchings_index":0,"name":"","location":[13.418992,52.500626]},{"alternatives_count":0,"waypoint_index":1,"matchings_index":0,"name":"Adalbertstraße","location":[13.419148,52.501096]},{"alternatives_count":0,"waypoint_index":2,"matchings_index":0,"name":"Adalbertstraße","location":[13.41962,52.501755]},{"alternatives_count":0,"waypoint_index":3,"matchings_index":0,"name":"Adalbertstraße","location":[13.420041,52.502334]},{"alternatives_count":1,"waypoint_index":4,"matchings_index":0,"name":"Adalbertstraße","location":[13.420494,52.502984]}],"code":"Ok"} \ No newline at end of file