Merge pull request #9820 from osmandapp/plan_a_route_executor_bugfix
Plan a route executor multiple calculations bug fix
This commit is contained in:
commit
076f91e760
2 changed files with 10 additions and 2 deletions
|
@ -243,6 +243,9 @@ public class RoutePlannerFrontEnd {
|
||||||
start = gpxPoints.get(0);
|
start = gpxPoints.get(0);
|
||||||
}
|
}
|
||||||
while (start != null && !gctx.ctx.calculationProgress.isCancelled) {
|
while (start != null && !gctx.ctx.calculationProgress.isCancelled) {
|
||||||
|
if (Thread.currentThread().isInterrupted()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
double routeDist = gctx.MAXIMUM_STEP_APPROXIMATION;
|
double routeDist = gctx.MAXIMUM_STEP_APPROXIMATION;
|
||||||
GpxPoint next = findNextGpxPointWithin(gctx, gpxPoints, start, routeDist);
|
GpxPoint next = findNextGpxPointWithin(gctx, gpxPoints, start, routeDist);
|
||||||
boolean routeFound = false;
|
boolean routeFound = false;
|
||||||
|
@ -256,7 +259,7 @@ public class RoutePlannerFrontEnd {
|
||||||
if (routeFound) {
|
if (routeFound) {
|
||||||
// route is found - cut the end of the route and move to next iteration
|
// route is found - cut the end of the route and move to next iteration
|
||||||
// start.stepBackRoute = new ArrayList<RouteSegmentResult>();
|
// start.stepBackRoute = new ArrayList<RouteSegmentResult>();
|
||||||
// boolean stepBack = true;
|
// boolean stepBack = true;
|
||||||
boolean stepBack = stepBackAndFindPrevPointInRoute(gctx, gpxPoints, start, next);
|
boolean stepBack = stepBackAndFindPrevPointInRoute(gctx, gpxPoints, start, next);
|
||||||
if (!stepBack) {
|
if (!stepBack) {
|
||||||
// not supported case (workaround increase MAXIMUM_STEP_APPROXIMATION)
|
// not supported case (workaround increase MAXIMUM_STEP_APPROXIMATION)
|
||||||
|
|
|
@ -22,6 +22,7 @@ import org.apache.commons.logging.Log;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.concurrent.Future;
|
||||||
import java.util.concurrent.LinkedBlockingQueue;
|
import java.util.concurrent.LinkedBlockingQueue;
|
||||||
import java.util.concurrent.ThreadPoolExecutor;
|
import java.util.concurrent.ThreadPoolExecutor;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
@ -44,6 +45,7 @@ public class GpxApproximator {
|
||||||
|
|
||||||
private ThreadPoolExecutor singleThreadedExecutor;
|
private ThreadPoolExecutor singleThreadedExecutor;
|
||||||
private GpxApproximationProgressCallback approximationProgress;
|
private GpxApproximationProgressCallback approximationProgress;
|
||||||
|
private Future<?> currentApproximationTask;
|
||||||
|
|
||||||
public interface GpxApproximationProgressCallback {
|
public interface GpxApproximationProgressCallback {
|
||||||
|
|
||||||
|
@ -152,7 +154,10 @@ public class GpxApproximator {
|
||||||
this.gctx = gctx;
|
this.gctx = gctx;
|
||||||
startProgress();
|
startProgress();
|
||||||
updateProgress(gctx);
|
updateProgress(gctx);
|
||||||
singleThreadedExecutor.submit(new Runnable() {
|
if (currentApproximationTask != null) {
|
||||||
|
currentApproximationTask.cancel(true);
|
||||||
|
}
|
||||||
|
currentApproximationTask = singleThreadedExecutor.submit(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
try {
|
try {
|
||||||
|
|
Loading…
Reference in a new issue