use start direction (provided by locus) as turncost bias
This commit is contained in:
parent
372673be7a
commit
fdf06cbdd0
5 changed files with 34 additions and 1 deletions
|
@ -90,6 +90,9 @@ final class OsmPath implements OsmLinkHolder
|
||||||
this.link = link;
|
this.link = link;
|
||||||
targetNode = link.getTarget( null );
|
targetNode = link.getTarget( null );
|
||||||
selev = targetNode.getSElev();
|
selev = targetNode.getSElev();
|
||||||
|
|
||||||
|
originLon = -1;
|
||||||
|
originLat = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
OsmPath( OsmPath origin, OsmLink link, OsmTrack refTrack, boolean detailMode, RoutingContext rc )
|
OsmPath( OsmPath origin, OsmLink link, OsmTrack refTrack, boolean detailMode, RoutingContext rc )
|
||||||
|
@ -217,6 +220,9 @@ final class OsmPath implements OsmLinkHolder
|
||||||
cost = 0;
|
cost = 0;
|
||||||
ehbd = 0;
|
ehbd = 0;
|
||||||
ehbu = 0;
|
ehbu = 0;
|
||||||
|
lon0 = -1; // reset turncost-pipe
|
||||||
|
lat0 = -1;
|
||||||
|
|
||||||
if ( recordTransferNodes )
|
if ( recordTransferNodes )
|
||||||
{
|
{
|
||||||
if ( rc.wayfraction > 0. )
|
if ( rc.wayfraction > 0. )
|
||||||
|
@ -237,8 +243,20 @@ final class OsmPath implements OsmLinkHolder
|
||||||
}
|
}
|
||||||
linkdisttotal += dist;
|
linkdisttotal += dist;
|
||||||
|
|
||||||
|
// apply a start-direction if appropriate (by faking the origin position)
|
||||||
|
if ( lon0 == -1 && lat0 == -1 )
|
||||||
|
{
|
||||||
|
double coslat = Math.cos( ( lat1 - 90000000 ) * 0.00000001234134 );
|
||||||
|
if ( rc.startDirectionValid && coslat > 0. )
|
||||||
|
{
|
||||||
|
double dir = rc.startDirection.intValue() / 57.29578;
|
||||||
|
lon0 = lon1 - (int) ( 1000. * Math.sin( dir ) / coslat );
|
||||||
|
lat0 = lat1 - (int) ( 1000. * Math.cos( dir ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// *** penalty for turning angles
|
// *** penalty for turning angles
|
||||||
if ( !isTrafficBackbone && origin.originElement != null )
|
if ( !isTrafficBackbone && lon0 != -1 && lat0 != -1 )
|
||||||
{
|
{
|
||||||
// penalty proportional to direction change
|
// penalty proportional to direction change
|
||||||
double cos = rc.calcCosAngle( lon0, lat0, lon1, lat1, lon2, lat2 );
|
double cos = rc.calcCosAngle( lon0, lat0, lon1, lat1, lon2, lat2 );
|
||||||
|
|
|
@ -115,6 +115,9 @@ public final class RoutingContext
|
||||||
public List<OsmNodeNamed> nogopoints = null;
|
public List<OsmNodeNamed> nogopoints = null;
|
||||||
private List<OsmNodeNamed> keepnogopoints = null;
|
private List<OsmNodeNamed> keepnogopoints = null;
|
||||||
|
|
||||||
|
public Integer startDirection;
|
||||||
|
public boolean startDirectionValid;
|
||||||
|
|
||||||
private double coslat;
|
private double coslat;
|
||||||
public boolean nogomatch = false;
|
public boolean nogomatch = false;
|
||||||
public boolean isEndpoint = false;
|
public boolean isEndpoint = false;
|
||||||
|
|
|
@ -760,6 +760,11 @@ public class RoutingEngine extends Thread
|
||||||
|
|
||||||
if ( start1 == null || start2 == null ) return null;
|
if ( start1 == null || start2 == null ) return null;
|
||||||
|
|
||||||
|
if ( routingContext.startDirectionValid = ( fastPartialRecalc && routingContext.startDirection != null ) )
|
||||||
|
{
|
||||||
|
logInfo( "using start direction " + routingContext.startDirection );
|
||||||
|
}
|
||||||
|
|
||||||
OsmPath startPath1 = getStartPath( start1, start2, startWp, endPos, sameSegmentSearch );
|
OsmPath startPath1 = getStartPath( start1, start2, startWp, endPos, sameSegmentSearch );
|
||||||
OsmPath startPath2 = getStartPath( start2, start1, startWp, endPos, sameSegmentSearch );
|
OsmPath startPath2 = getStartPath( start2, start1, startWp, endPos, sameSegmentSearch );
|
||||||
|
|
||||||
|
|
|
@ -60,6 +60,12 @@ public class BRouterWorker
|
||||||
rc.turnInstructionMode = 2;
|
rc.turnInstructionMode = 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( params.containsKey( "direction" ) )
|
||||||
|
{
|
||||||
|
rc.startDirection = Integer.valueOf( params.getInt( "direction" ) );
|
||||||
|
}
|
||||||
|
|
||||||
if ( nogoList != null )
|
if ( nogoList != null )
|
||||||
{
|
{
|
||||||
rc.prepareNogoPoints( nogoList );
|
rc.prepareNogoPoints( nogoList );
|
||||||
|
|
|
@ -156,6 +156,7 @@ public class BRouter
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
c.memoryclass = (int) ( Runtime.getRuntime().maxMemory() / 1024 / 1024 );
|
c.memoryclass = (int) ( Runtime.getRuntime().maxMemory() / 1024 / 1024 );
|
||||||
|
// c.startDirection= Integer.valueOf( 150 );
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue