changed alternative logic to not crosstalk over

This commit is contained in:
Arndt 2015-02-07 10:28:53 +01:00
parent afc0d765d0
commit c6fed3d5bb

View file

@ -133,12 +133,14 @@ public class RoutingEngine extends Thread
startTime = System.currentTimeMillis(); startTime = System.currentTimeMillis();
this.maxRunningTime = maxRunningTime; this.maxRunningTime = maxRunningTime;
OsmTrack sum = null; int nsections = waypoints.size() - 1;
OsmTrack[] refTracks = new OsmTrack[nsections]; // used ways for alternatives
OsmTrack[] lastTracks = new OsmTrack[nsections];
OsmTrack track = null; OsmTrack track = null;
ArrayList<String> messageList = new ArrayList<String>(); ArrayList<String> messageList = new ArrayList<String>();
for( int i=0; !terminated; i++ ) for( int i=0; !terminated; i++ )
{ {
track = findTrack( sum ); track = findTrack( refTracks, lastTracks );
track.message = "track-length = " + track.distance + " filtered ascend = " + track.ascend track.message = "track-length = " + track.distance + " filtered ascend = " + track.ascend
+ " plain-ascend = " + track.plainAscend + " cost=" + track.cost; + " plain-ascend = " + track.plainAscend + " cost=" + track.cost;
track.name = "brouter_" + routingContext.getProfileName() + "_" + i; track.name = "brouter_" + routingContext.getProfileName() + "_" + i;
@ -152,8 +154,6 @@ public class RoutingEngine extends Thread
oldTrack.readGpx(filename); oldTrack.readGpx(filename);
if ( track.equalsTrack( oldTrack ) ) if ( track.equalsTrack( oldTrack ) )
{ {
if ( sum == null ) sum = new OsmTrack();
sum.addNodes( track );
continue; continue;
} }
track.writeGpx( filename ); track.writeGpx( filename );
@ -179,8 +179,6 @@ public class RoutingEngine extends Thread
} }
else else
{ {
if ( sum == null ) sum = new OsmTrack();
sum.addNodes( track );
continue; continue;
} }
} }
@ -240,14 +238,14 @@ public class RoutingEngine extends Thread
private OsmTrack findTrack( OsmTrack refTrack ) private OsmTrack findTrack( OsmTrack[] refTracks, OsmTrack[] lastTracks )
{ {
OsmTrack totaltrack = new OsmTrack(); OsmTrack totaltrack = new OsmTrack();
MatchedWaypoint[] wayointIds = new MatchedWaypoint[waypoints.size()]; MatchedWaypoint[] wayointIds = new MatchedWaypoint[waypoints.size()];
// check for a track for that target // check for a track for that target
OsmTrack nearbyTrack = null; OsmTrack nearbyTrack = null;
if ( refTrack == null ) if ( refTracks[waypoints.size()-2] == null )
{ {
nearbyTrack = OsmTrack.readBinary( routingContext.rawTrackPath, waypoints.get( waypoints.size()-1), routingContext.getNogoChecksums() ); nearbyTrack = OsmTrack.readBinary( routingContext.rawTrackPath, waypoints.get( waypoints.size()-1), routingContext.getNogoChecksums() );
if ( nearbyTrack != null ) if ( nearbyTrack != null )
@ -267,9 +265,16 @@ public class RoutingEngine extends Thread
for( int i=0; i<waypoints.size() -1; i++ ) for( int i=0; i<waypoints.size() -1; i++ )
{ {
OsmTrack seg = searchTrack( wayointIds[i], wayointIds[i+1], i == waypoints.size()-2 ? nearbyTrack : null, refTrack ); if ( lastTracks[i] != null )
{
if ( refTracks[i] == null ) refTracks[i] = new OsmTrack();
refTracks[i].addNodes( lastTracks[i] );
}
OsmTrack seg = searchTrack( wayointIds[i], wayointIds[i+1], i == waypoints.size()-2 ? nearbyTrack : null, refTracks[i] );
if ( seg == null ) return null; if ( seg == null ) return null;
totaltrack.appendTrack( seg ); totaltrack.appendTrack( seg );
lastTracks[i] = seg;
} }
return totaltrack; return totaltrack;
} }