From b27e6262b59b9e316c1ac8e32095b2da33e80e19 Mon Sep 17 00:00:00 2001 From: "Phyks (Lucas Verney)" Date: Fri, 23 Nov 2018 10:03:05 +0100 Subject: [PATCH] Fix travel time computation --- .../src/main/java/btools/router/OsmPath.java | 110 +++++++++--------- .../src/main/java/btools/router/StdPath.java | 4 +- 2 files changed, 56 insertions(+), 58 deletions(-) diff --git a/brouter-core/src/main/java/btools/router/OsmPath.java b/brouter-core/src/main/java/btools/router/OsmPath.java index 0bf3455..9770b3e 100644 --- a/brouter-core/src/main/java/btools/router/OsmPath.java +++ b/brouter-core/src/main/java/btools/router/OsmPath.java @@ -369,7 +369,7 @@ abstract class OsmPath implements OsmLinkHolder } } - + double elevation = ele2 == Short.MIN_VALUE ? 100. : ele2/4.; @@ -396,69 +396,67 @@ abstract class OsmPath implements OsmLinkHolder traffic += dist*rc.expctxWay.getTrafficSourceDensity()*Math.pow(cost2/10000.f,rc.trafficSourceExponent); } - String wayKeyValues = ""; - if ( message != null ) { - wayKeyValues = rc.expctxWay.getKeyValueDescription( isReverse, description ); + // compute kinematic + computeKinematic( rc, dist, delta_h, detailMode ); + + if ( message != null ) + { + message.turnangle = (float)angle; + message.time = (float)getTotalTime(); + message.energy = (float)getTotalEnergy(); + message.priorityclassifier = priorityclassifier; + message.classifiermask = classifiermask; + message.lon = lon2; + message.lat = lat2; + message.ele = ele2; + message.wayKeyValues = rc.expctxWay.getKeyValueDescription( isReverse, description ); } - if ( message != null ) - { - message.turnangle = (float)angle; - message.time = (float)getTotalTime(); - message.energy = (float)getTotalEnergy(); - message.priorityclassifier = priorityclassifier; - message.classifiermask = classifiermask; - message.lon = lon2; - message.lat = lat2; - message.ele = ele2; - message.wayKeyValues = wayKeyValues; - } - - if ( stopAtEndpoint ) - { - if ( recordTransferNodes ) - { - originElement = OsmPathElement.create( rc.ilonshortest, rc.ilatshortest, ele2, originElement, rc.countTraffic ); - originElement.cost = cost; - if ( message != null ) - { - originElement.message = message; - } - } - if ( rc.nogomatch ) - { - cost = -1; - } - return; - } - - if ( transferNode == null ) - { - // *** penalty for being part of the reference track - if ( refTrack != null && refTrack.containsNode( targetNode ) && refTrack.containsNode( sourceNode ) ) - { - int reftrackcost = linkdisttotal; - cost += reftrackcost; - } - selev = ele2; - break; - } - transferNode = transferNode.next; - + if ( stopAtEndpoint ) + { if ( recordTransferNodes ) { - originElement = OsmPathElement.create( lon2, lat2, ele2, originElement, rc.countTraffic ); + originElement = OsmPathElement.create( rc.ilonshortest, rc.ilatshortest, ele2, originElement, rc.countTraffic ); originElement.cost = cost; - originElement.addTraffic( traffic ); - traffic = 0; + if ( message != null ) + { + originElement.message = message; + } } - lon0 = lon1; - lat0 = lat1; - lon1 = lon2; - lat1 = lat2; - ele1 = ele2; + if ( rc.nogomatch ) + { + cost = -1; + } + return; } + if ( transferNode == null ) + { + // *** penalty for being part of the reference track + if ( refTrack != null && refTrack.containsNode( targetNode ) && refTrack.containsNode( sourceNode ) ) + { + int reftrackcost = linkdisttotal; + cost += reftrackcost; + } + selev = ele2; + break; + } + transferNode = transferNode.next; + + if ( recordTransferNodes ) + { + originElement = OsmPathElement.create( lon2, lat2, ele2, originElement, rc.countTraffic ); + originElement.cost = cost; + originElement.addTraffic( traffic ); + traffic = 0; + } + lon0 = lon1; + lat0 = lat1; + lon1 = lon2; + lat1 = lat2; + ele1 = ele2; + } + // check for nogo-matches (after the *actual* start of segment) if ( rc.nogomatch ) { diff --git a/brouter-core/src/main/java/btools/router/StdPath.java b/brouter-core/src/main/java/btools/router/StdPath.java index cff572c..d0e607e 100644 --- a/brouter-core/src/main/java/btools/router/StdPath.java +++ b/brouter-core/src/main/java/btools/router/StdPath.java @@ -613,14 +613,14 @@ final class StdPath extends OsmPath { return; } - + // compute incline double decayFactor = exp( - dist / 100. ); elevation_buffer += delta_h; float new_elevation_buffer = (float)( elevation_buffer * decayFactor ); double incline = ( elevation_buffer - new_elevation_buffer ) / dist; elevation_buffer = new_elevation_buffer; - + double speed; // Travel speed if (rc.footMode ) {