prepare routingHelper code for debugging
This commit is contained in:
parent
562447dc42
commit
9a1a99bec2
1 changed files with 35 additions and 36 deletions
|
@ -33,6 +33,7 @@ public class RoutingHelper {
|
||||||
public void routeWasCancelled();
|
public void routeWasCancelled();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private final float LOCATION_TOLERANCE = 60;
|
||||||
|
|
||||||
private final double DISTANCE_TO_USE_OSMAND_ROUTER = 20000;
|
private final double DISTANCE_TO_USE_OSMAND_ROUTER = 20000;
|
||||||
|
|
||||||
|
@ -178,8 +179,8 @@ public class RoutingHelper {
|
||||||
|
|
||||||
public boolean finishAtLocation(Location currentLocation) {
|
public boolean finishAtLocation(Location currentLocation) {
|
||||||
Location lastPoint = routeNodes.get(routeNodes.size() - 1);
|
Location lastPoint = routeNodes.get(routeNodes.size() - 1);
|
||||||
if(currentRoute > routeNodes.size() - 3 && currentLocation.distanceTo(lastPoint) < 60){
|
if(currentRoute > routeNodes.size() - 3 && currentLocation.distanceTo(lastPoint) < LOCATION_TOLERANCE){
|
||||||
if(lastFixedLocation != null && lastFixedLocation.distanceTo(lastPoint) < 60){
|
if(lastFixedLocation != null && lastFixedLocation.distanceTo(lastPoint) < LOCATION_TOLERANCE){
|
||||||
showMessage(context.getString(R.string.arrived_at_destination));
|
showMessage(context.getString(R.string.arrived_at_destination));
|
||||||
voiceRouter.arrivedDestinationPoint();
|
voiceRouter.arrivedDestinationPoint();
|
||||||
clearCurrentRoute(null);
|
clearCurrentRoute(null);
|
||||||
|
@ -239,12 +240,12 @@ public class RoutingHelper {
|
||||||
|
|
||||||
// 3. check if closest location already passed
|
// 3. check if closest location already passed
|
||||||
if(currentRoute + 1 < routeNodes.size()){
|
if(currentRoute + 1 < routeNodes.size()){
|
||||||
float bearing = routeNodes.get(currentRoute).bearingTo(routeNodes.get(currentRoute + 1));
|
float bearingRouteNext = routeNodes.get(currentRoute).bearingTo(routeNodes.get(currentRoute + 1));
|
||||||
float bearingMovement = currentLocation.bearingTo(routeNodes.get(currentRoute));
|
float bearingToRoute = currentLocation.bearingTo(routeNodes.get(currentRoute));
|
||||||
// only 35 degrees for that case because it wrong catches sharp turns
|
// only 35 degrees for that case because it wrong catches sharp turns
|
||||||
if(Math.abs(bearing - bearingMovement) > 140 && Math.abs(bearing - bearingMovement) < 220){
|
if(Math.abs(bearingRouteNext - bearingToRoute) > 140 && Math.abs(bearingRouteNext - bearingToRoute) < 220){
|
||||||
if(log.isDebugEnabled()){
|
if(log.isDebugEnabled()){
|
||||||
log.debug("Processed point movement bearing : "+bearingMovement +" bearing " + bearing); //$NON-NLS-1$ //$NON-NLS-2$
|
log.debug("Processed point bearingToRoute : "+ bearingToRoute +" bearingRouteNext " + bearingRouteNext); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
}
|
}
|
||||||
updateCurrentRoute(currentRoute + 1);
|
updateCurrentRoute(currentRoute + 1);
|
||||||
}
|
}
|
||||||
|
@ -253,12 +254,12 @@ public class RoutingHelper {
|
||||||
// 3.5 check that we already pass very sharp turn by missing one point (so our turn is sharper than expected)
|
// 3.5 check that we already pass very sharp turn by missing one point (so our turn is sharper than expected)
|
||||||
// instead of that rule possible could be introduced another if the dist < 5m mark the location as already passed
|
// instead of that rule possible could be introduced another if the dist < 5m mark the location as already passed
|
||||||
if(currentRoute + 2 < routeNodes.size()){
|
if(currentRoute + 2 < routeNodes.size()){
|
||||||
float bearing = routeNodes.get(currentRoute + 1).bearingTo(routeNodes.get(currentRoute + 2));
|
float bearingRouteNextNext = routeNodes.get(currentRoute + 1).bearingTo(routeNodes.get(currentRoute + 2));
|
||||||
float bearingMovement = currentLocation.bearingTo(routeNodes.get(currentRoute + 1));
|
float bearingToRouteNext = currentLocation.bearingTo(routeNodes.get(currentRoute + 1));
|
||||||
// only 15 degrees for that case because it wrong catches sharp turns
|
// only 15 degrees for that case because it wrong catches sharp turns
|
||||||
if(Math.abs(bearing - bearingMovement) > 165 && Math.abs(bearing - bearingMovement) < 195){
|
if(Math.abs(bearingRouteNextNext - bearingToRouteNext) > 165 && Math.abs(bearingRouteNextNext - bearingToRouteNext) < 195){
|
||||||
if(log.isDebugEnabled()){
|
if(log.isDebugEnabled()){
|
||||||
log.debug("Processed point movement bearing 2 : "+bearingMovement +" bearing " + bearing); //$NON-NLS-1$ //$NON-NLS-2$
|
log.debug("Processed point bearingToRouteNext : "+ bearingToRouteNext +" bearingRouteNextNext " + bearingRouteNextNext); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
}
|
}
|
||||||
updateCurrentRoute(currentRoute + 2);
|
updateCurrentRoute(currentRoute + 2);
|
||||||
}
|
}
|
||||||
|
@ -266,10 +267,10 @@ public class RoutingHelper {
|
||||||
|
|
||||||
// 4. >60m away from current routeNode? Then re-calculate route.
|
// 4. >60m away from current routeNode? Then re-calculate route.
|
||||||
if(currentRoute > 0){
|
if(currentRoute > 0){
|
||||||
float bearing = routeNodes.get(currentRoute - 1).bearingTo(routeNodes.get(currentRoute));
|
float bearingRoute = routeNodes.get(currentRoute - 1).bearingTo(routeNodes.get(currentRoute));
|
||||||
float bearingMovement = currentLocation.bearingTo(routeNodes.get(currentRoute));
|
float bearingToRoute = currentLocation.bearingTo(routeNodes.get(currentRoute));
|
||||||
float d = Math.abs(currentLocation.distanceTo(routeNodes.get(currentRoute)) * FloatMath.sin((bearingMovement - bearing)*3.14f/180f));
|
float d = Math.abs(currentLocation.distanceTo(routeNodes.get(currentRoute)) * FloatMath.sin((bearingToRoute - bearingRoute)*3.14f/180f));
|
||||||
if(d > 60) {
|
if(d > LOCATION_TOLERANCE) {
|
||||||
log.info("Recalculate route, because correlation : " + d); //$NON-NLS-1$
|
log.info("Recalculate route, because correlation : " + d); //$NON-NLS-1$
|
||||||
calculateRoute = true;
|
calculateRoute = true;
|
||||||
}
|
}
|
||||||
|
@ -278,7 +279,7 @@ public class RoutingHelper {
|
||||||
// 5. Sum distance to last and current route nodes
|
// 5. Sum distance to last and current route nodes
|
||||||
if(!calculateRoute){
|
if(!calculateRoute){
|
||||||
float d = currentLocation.distanceTo(routeNodes.get(currentRoute));
|
float d = currentLocation.distanceTo(routeNodes.get(currentRoute));
|
||||||
if (d > 60) {
|
if (d > LOCATION_TOLERANCE) {
|
||||||
if (currentRoute > 0) {
|
if (currentRoute > 0) {
|
||||||
// 5a. Greater than 2*distance between them? Then re-calculate route. (Case often covered by 4., but still needed.)
|
// 5a. Greater than 2*distance between them? Then re-calculate route. (Case often covered by 4., but still needed.)
|
||||||
float f1 = currentLocation.distanceTo(routeNodes.get(currentRoute - 1)) + d;
|
float f1 = currentLocation.distanceTo(routeNodes.get(currentRoute - 1)) + d;
|
||||||
|
@ -306,7 +307,7 @@ public class RoutingHelper {
|
||||||
lastFixedLocation = currentLocation;
|
lastFixedLocation = currentLocation;
|
||||||
|
|
||||||
// 8. Strange Direction? Then re-calculate route. (Added new, may possibly even replace triggers 4, 5a, 5b ?)
|
// 8. Strange Direction? Then re-calculate route. (Added new, may possibly even replace triggers 4, 5a, 5b ?)
|
||||||
if(suppressTurnPrompt && (currentLocation.distanceTo(routeNodes.get(currentRoute)) > 60) ){
|
if(suppressTurnPrompt && (currentLocation.distanceTo(routeNodes.get(currentRoute)) > 2*LOCATION_TOLERANCE) ){
|
||||||
calculateRoute = true;
|
calculateRoute = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -326,10 +327,10 @@ public class RoutingHelper {
|
||||||
// may be that check is really not needed ? only for start position
|
// may be that check is really not needed ? only for start position
|
||||||
if(currentRoute > 0 ){
|
if(currentRoute > 0 ){
|
||||||
// check that we are not far from the route (if we are on the route distance doesn't matter)
|
// check that we are not far from the route (if we are on the route distance doesn't matter)
|
||||||
float bearing = routeNodes.get(currentRoute - 1).bearingTo(routeNodes.get(currentRoute));
|
float bearingRoute = routeNodes.get(currentRoute - 1).bearingTo(routeNodes.get(currentRoute));
|
||||||
float bearingMovement = currentLocation.bearingTo(routeNodes.get(currentRoute));
|
float bearingToRoute = currentLocation.bearingTo(routeNodes.get(currentRoute));
|
||||||
float d = Math.abs(currentLocation.distanceTo(routeNodes.get(currentRoute)) * FloatMath.sin((bearingMovement - bearing)*3.14f/180f));
|
float d = Math.abs(currentLocation.distanceTo(routeNodes.get(currentRoute)) * FloatMath.sin((bearingToRoute - bearingRoute)*3.14f/180f));
|
||||||
if(d > 60){
|
if(d > LOCATION_TOLERANCE){
|
||||||
processed = true;
|
processed = true;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -342,14 +343,13 @@ public class RoutingHelper {
|
||||||
// case if you are getting close to the next point after turn
|
// case if you are getting close to the next point after turn
|
||||||
// but you haven't turned before (could be checked bearing)
|
// but you haven't turned before (could be checked bearing)
|
||||||
if(currentLocation.hasBearing() || lastFixedLocation != null){
|
if(currentLocation.hasBearing() || lastFixedLocation != null){
|
||||||
float bearingToPoint = currentLocation.bearingTo(routeNodes.get(currentRoute));
|
float bearingToRoute = currentLocation.bearingTo(routeNodes.get(currentRoute));
|
||||||
float bearingBetweenPoints = routeNodes.get(currentRoute).bearingTo(routeNodes.get(currentRoute+1));
|
float bearingRouteNext = routeNodes.get(currentRoute).bearingTo(routeNodes.get(currentRoute+1));
|
||||||
float bearing = currentLocation.hasBearing() ? currentLocation.getBearing() : lastFixedLocation.bearingTo(currentLocation);
|
float bearingMotion = currentLocation.hasBearing() ? currentLocation.getBearing() : lastFixedLocation.bearingTo(currentLocation);
|
||||||
if(Math.abs(bearing - bearingToPoint) >
|
if(Math.abs(bearingMotion - bearingToRoute) > Math.abs(bearingMotion - bearingRouteNext)){
|
||||||
Math.abs(bearing - bearingBetweenPoints)){
|
|
||||||
if(log.isDebugEnabled()){
|
if(log.isDebugEnabled()){
|
||||||
log.debug("Processed point bearing : " + Math.abs(currentLocation.getBearing() - bearingToPoint) + " " //$NON-NLS-1$ //$NON-NLS-2$
|
log.debug("Processed point bearing deltas : " + Math.abs(currentLocation.getBearing() - bearingToRoute) + " " //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
+ Math.abs(currentLocation.getBearing() - bearingBetweenPoints));
|
+ Math.abs(currentLocation.getBearing() - bearingRouteNext));
|
||||||
}
|
}
|
||||||
processed = true;
|
processed = true;
|
||||||
}
|
}
|
||||||
|
@ -376,29 +376,28 @@ public class RoutingHelper {
|
||||||
// 6. + 7. Direction detection, by Hardy, Feb 2012
|
// 6. + 7. Direction detection, by Hardy, Feb 2012
|
||||||
if(routeNodes.size() > 0){
|
if(routeNodes.size() > 0){
|
||||||
if (currentLocation.hasBearing() || lastFixedLocation != null) {
|
if (currentLocation.hasBearing() || lastFixedLocation != null) {
|
||||||
float bearing = currentLocation.hasBearing() ? currentLocation.getBearing() : lastFixedLocation.bearingTo(currentLocation);
|
float bearingMotion = currentLocation.hasBearing() ? currentLocation.getBearing() : lastFixedLocation.bearingTo(currentLocation);
|
||||||
float bearingRoute;
|
float bearingToRoute = currentLocation.bearingTo(routeNodes.get(currentRoute));
|
||||||
bearingRoute = currentLocation.bearingTo(routeNodes.get(currentRoute));
|
|
||||||
// 6. Suppress turn prompt if prescribed direction of motion is between 45 and 135 degrees off
|
// 6. Suppress turn prompt if prescribed direction of motion is between 45 and 135 degrees off
|
||||||
if (Math.abs(bearing - bearingRoute) > 45f && 360 - Math.abs(bearing - bearingRoute) > 45f) {
|
if (Math.abs(bearingMotion - bearingToRoute) > 45f && 360 - Math.abs(bearingMotion - bearingToRoute) > 45f) {
|
||||||
// disregard upper bound to suppress turn prompt also for recalculated still-opposite route
|
// disregard upper bound to suppress turn prompt also for recalculated still-opposite route
|
||||||
//if (Math.abs(bearing - bearingRoute) <= 135f && 360 - Math.abs(bearing - bearingRoute) <= 135f) {
|
//if (Math.abs(bearingMotion - bearingToRoute) <= 135f && 360 - Math.abs(bearingMotion - bearingToRoute) <= 135f) {
|
||||||
suppressTurnPrompt = true;
|
suppressTurnPrompt = true;
|
||||||
//log.info("Bearing is off from bearingRoute between >45 and <=135 degrees"); //$NON-NLS-1$
|
//log.info("bearingMotion is off from bearingToRoute between >45 and <=135 degrees"); //$NON-NLS-1$
|
||||||
//}
|
//}
|
||||||
}
|
}
|
||||||
// 7. Check necessity for unscheduled U-turn, Issue 863
|
// 7. Check necessity for unscheduled U-turn, Issue 863
|
||||||
if (Math.abs(bearing - bearingRoute) > 135f && 360 - Math.abs(bearing - bearingRoute) > 135f) {
|
if (Math.abs(bearingMotion - bearingToRoute) > 135f && 360 - Math.abs(bearingMotion - bearingToRoute) > 135f) {
|
||||||
float d = currentLocation.distanceTo(routeNodes.get(currentRoute));
|
float d = currentLocation.distanceTo(routeNodes.get(currentRoute));
|
||||||
// 60m tolerance to allow for GPS inaccuracy
|
// 60m tolerance to allow for GPS inaccuracy
|
||||||
if (d > 60) {
|
if (d > LOCATION_TOLERANCE) {
|
||||||
if (makeUTwpDetected == 0) {
|
if (makeUTwpDetected == 0) {
|
||||||
makeUTwpDetected = System.currentTimeMillis();
|
makeUTwpDetected = System.currentTimeMillis();
|
||||||
// require 5 sec since first detection, to avoid false positive announcements
|
// require 5 sec since first detection, to avoid false positive announcements
|
||||||
} else if ((System.currentTimeMillis() - makeUTwpDetected > 5000)) {
|
} else if ((System.currentTimeMillis() - makeUTwpDetected > 5000)) {
|
||||||
makeUturnWhenPossible = true;
|
makeUturnWhenPossible = true;
|
||||||
turnImminent = 1;
|
turnImminent = 1;
|
||||||
//log.info("Bearing is opposite to bearingRoute"); //$NON-NLS-1$
|
//log.info("bearingMotion is opposite to bearingRoute"); //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in a new issue