use of com.mapbox.geojson.Point in project mapbox-navigation-android by mapbox.
the class OffRouteDetectorTest method isUserOffRoute_AssertFalseWhenOffRouteButCloseToUpcomingStep.
@Test
public void isUserOffRoute_AssertFalseWhenOffRouteButCloseToUpcomingStep() throws Exception {
RouteProgress routeProgress = buildDefaultRouteProgress();
Point upcomingStepManeuverPoint = routeProgress.currentLegProgress().upComingStep().maneuver().location();
Location firstUpdate = buildDefaultLocationUpdate(-77.0339782574523, 38.89993519985637);
offRouteDetector.isUserOffRoute(firstUpdate, routeProgress, options);
Point offRoutePoint = buildPointAwayFromPoint(upcomingStepManeuverPoint, 30, 180);
Location secondUpdate = buildDefaultLocationUpdate(offRoutePoint.longitude(), offRoutePoint.latitude());
boolean isUserOffRoute = offRouteDetector.isUserOffRoute(secondUpdate, routeProgress, options);
assertFalse(isUserOffRoute);
verify(mockCallback, times(1)).onShouldIncreaseIndex();
}
use of com.mapbox.geojson.Point in project mapbox-navigation-android by mapbox.
the class RouteStepProgressTest method stepIntersections_handlesNullNextManeuverCorrectly.
@Test
public void stepIntersections_handlesNullNextManeuverCorrectly() throws Exception {
int lastStepIndex = (route.legs().get(0).steps().size() - 1);
RouteProgress routeProgress = RouteProgress.builder().stepDistanceRemaining(0).legDistanceRemaining(firstLeg.distance()).distanceRemaining(route.distance()).directionsRoute(route).stepIndex(lastStepIndex).legIndex(0).build();
RouteStepProgress routeStepProgress = routeProgress.currentLegProgress().currentStepProgress();
int currentStepTotal = route.legs().get(0).steps().get(lastStepIndex).intersections().size();
List<Point> lastStepLocation = PolylineUtils.decode(route.legs().get(0).steps().get(lastStepIndex).geometry(), Constants.PRECISION_6);
assertEquals(currentStepTotal, routeStepProgress.intersections().size());
assertEquals(routeStepProgress.intersections().get(0).location().latitude(), lastStepLocation.get(0).latitude());
assertEquals(routeStepProgress.intersections().get(0).location().longitude(), lastStepLocation.get(0).longitude());
}
use of com.mapbox.geojson.Point in project mapbox-navigation-android by mapbox.
the class RouteStepProgressTest method fractionTraveled_equalsCorrectValueAtIntervals.
@Test
public void fractionTraveled_equalsCorrectValueAtIntervals() {
LineString lineString = LineString.fromPolyline(firstStep.geometry(), Constants.PRECISION_6);
// meters
double stepSegments = 5;
// Chop the line in small pieces
for (double i = 0; i < firstStep.distance(); i += stepSegments) {
Point point = TurfMeasurement.along(lineString, i, TurfConstants.UNIT_METERS);
LineString slicedLine = TurfMisc.lineSlice(point, route.legs().get(0).steps().get(1).maneuver().location(), lineString);
double distance = TurfMeasurement.length(slicedLine, TurfConstants.UNIT_METERS);
RouteProgress routeProgress = RouteProgress.builder().stepDistanceRemaining(distance).legDistanceRemaining(firstLeg.distance()).distanceRemaining(route.distance()).directionsRoute(route).stepIndex(0).legIndex(0).build();
RouteStepProgress routeStepProgress = routeProgress.currentLegProgress().currentStepProgress();
float fractionRemaining = (float) ((firstStep.distance() - distance) / firstStep.distance());
if (fractionRemaining < 0) {
fractionRemaining = 0;
}
assertEquals(fractionRemaining, routeStepProgress.fractionTraveled(), DELTA);
}
}
use of com.mapbox.geojson.Point in project mapbox-navigation-android by mapbox.
the class RouteStepProgressTest method distanceTraveled_equalsCorrectValueAtIntervals.
@Test
public void distanceTraveled_equalsCorrectValueAtIntervals() {
LineString lineString = LineString.fromPolyline(firstStep.geometry(), Constants.PRECISION_6);
// meters
double stepSegments = 5;
// Chop the line in small pieces
for (double i = 0; i < firstStep.distance(); i += stepSegments) {
Point point = TurfMeasurement.along(lineString, i, TurfConstants.UNIT_METERS);
LineString slicedLine = TurfMisc.lineSlice(point, route.legs().get(0).steps().get(1).maneuver().location(), lineString);
double distance = TurfMeasurement.length(slicedLine, TurfConstants.UNIT_METERS);
distance = firstStep.distance() - distance;
if (distance < 0) {
distance = 0;
}
RouteProgress routeProgress = RouteProgress.builder().stepDistanceRemaining(firstLeg.steps().get(0).distance() - distance).legDistanceRemaining(firstLeg.distance()).distanceRemaining(route.distance()).directionsRoute(route).stepIndex(0).legIndex(0).build();
RouteStepProgress routeStepProgress = routeProgress.currentLegProgress().currentStepProgress();
assertEquals(distance, routeStepProgress.distanceTraveled(), BaseTest.DELTA);
}
}
use of com.mapbox.geojson.Point in project mapbox-navigation-android by mapbox.
the class NavigationHelper method stepDistanceRemaining.
/**
* Calculates the distance remaining in the step from the current users snapped position, to the
* next maneuver position.
*/
static double stepDistanceRemaining(Point snappedPosition, int legIndex, int stepIndex, DirectionsRoute directionsRoute, List<Point> coordinates) {
List<LegStep> steps = directionsRoute.legs().get(legIndex).steps();
Point nextManeuverPosition = nextManeuverPosition(stepIndex, steps, coordinates);
LineString lineString = LineString.fromPolyline(steps.get(stepIndex).geometry(), Constants.PRECISION_6);
// position or the linestring coordinate size is less than 2,the distance remaining is zero.
if (snappedPosition.equals(nextManeuverPosition) || lineString.coordinates().size() < 2) {
return 0;
}
LineString slicedLine = TurfMisc.lineSlice(snappedPosition, nextManeuverPosition, lineString);
return TurfMeasurement.length(slicedLine, TurfConstants.UNIT_METERS);
}
Aggregations