From fdf06cbdd00bcb1d7f423dc40d218f06f6660970 Mon Sep 17 00:00:00 2001 From: Arndt Date: Fri, 14 Oct 2016 19:18:21 +0200 Subject: [PATCH] use start direction (provided by locus) as turncost bias --- .../src/main/java/btools/router/OsmPath.java | 20 ++++++++++++++++++- .../java/btools/router/RoutingContext.java | 3 +++ .../java/btools/router/RoutingEngine.java | 5 +++++ .../java/btools/routingapp/BRouterWorker.java | 6 ++++++ .../src/main/java/btools/server/BRouter.java | 1 + 5 files changed, 34 insertions(+), 1 deletion(-) diff --git a/brouter-core/src/main/java/btools/router/OsmPath.java b/brouter-core/src/main/java/btools/router/OsmPath.java index 1c9a443..a87ea9c 100644 --- a/brouter-core/src/main/java/btools/router/OsmPath.java +++ b/brouter-core/src/main/java/btools/router/OsmPath.java @@ -90,6 +90,9 @@ final class OsmPath implements OsmLinkHolder this.link = link; targetNode = link.getTarget( null ); selev = targetNode.getSElev(); + + originLon = -1; + originLat = -1; } OsmPath( OsmPath origin, OsmLink link, OsmTrack refTrack, boolean detailMode, RoutingContext rc ) @@ -217,6 +220,9 @@ final class OsmPath implements OsmLinkHolder cost = 0; ehbd = 0; ehbu = 0; + lon0 = -1; // reset turncost-pipe + lat0 = -1; + if ( recordTransferNodes ) { if ( rc.wayfraction > 0. ) @@ -237,8 +243,20 @@ final class OsmPath implements OsmLinkHolder } 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 - if ( !isTrafficBackbone && origin.originElement != null ) + if ( !isTrafficBackbone && lon0 != -1 && lat0 != -1 ) { // penalty proportional to direction change double cos = rc.calcCosAngle( lon0, lat0, lon1, lat1, lon2, lat2 ); diff --git a/brouter-core/src/main/java/btools/router/RoutingContext.java b/brouter-core/src/main/java/btools/router/RoutingContext.java index 59e9cc0..4a36029 100644 --- a/brouter-core/src/main/java/btools/router/RoutingContext.java +++ b/brouter-core/src/main/java/btools/router/RoutingContext.java @@ -115,6 +115,9 @@ public final class RoutingContext public List nogopoints = null; private List keepnogopoints = null; + public Integer startDirection; + public boolean startDirectionValid; + private double coslat; public boolean nogomatch = false; public boolean isEndpoint = false; diff --git a/brouter-core/src/main/java/btools/router/RoutingEngine.java b/brouter-core/src/main/java/btools/router/RoutingEngine.java index 04755c9..b9656f9 100644 --- a/brouter-core/src/main/java/btools/router/RoutingEngine.java +++ b/brouter-core/src/main/java/btools/router/RoutingEngine.java @@ -760,6 +760,11 @@ public class RoutingEngine extends Thread 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 startPath2 = getStartPath( start2, start1, startWp, endPos, sameSegmentSearch ); diff --git a/brouter-routing-app/src/main/java/btools/routingapp/BRouterWorker.java b/brouter-routing-app/src/main/java/btools/routingapp/BRouterWorker.java index dc82b9f..ac5dea6 100644 --- a/brouter-routing-app/src/main/java/btools/routingapp/BRouterWorker.java +++ b/brouter-routing-app/src/main/java/btools/routingapp/BRouterWorker.java @@ -60,6 +60,12 @@ public class BRouterWorker rc.turnInstructionMode = 2; } } + + if ( params.containsKey( "direction" ) ) + { + rc.startDirection = Integer.valueOf( params.getInt( "direction" ) ); + } + if ( nogoList != null ) { rc.prepareNogoPoints( nogoList ); diff --git a/brouter-server/src/main/java/btools/server/BRouter.java b/brouter-server/src/main/java/btools/server/BRouter.java index a1acf05..e4aece6 100644 --- a/brouter-server/src/main/java/btools/server/BRouter.java +++ b/brouter-server/src/main/java/btools/server/BRouter.java @@ -156,6 +156,7 @@ public class BRouter } } c.memoryclass = (int) ( Runtime.getRuntime().maxMemory() / 1024 / 1024 ); + // c.startDirection= Integer.valueOf( 150 ); return c; } }