diff --git a/brouter-core/src/main/java/btools/router/OsmTrack.java b/brouter-core/src/main/java/btools/router/OsmTrack.java index 3a286fc..dca0212 100644 --- a/brouter-core/src/main/java/btools/router/OsmTrack.java +++ b/brouter-core/src/main/java/btools/router/OsmTrack.java @@ -334,6 +334,11 @@ public final class OsmTrack if ( t.voiceHints != null ) { + if (ourSize > 0){ + for (VoiceHint hint : t.voiceHints.list) { + hint.indexInTrack = hint.indexInTrack + ourSize -1; + } + } if ( voiceHints == null ) { voiceHints = t.voiceHints; @@ -435,14 +440,32 @@ public final class OsmTrack if ( turnInstructionMode == 3) // osmand style { + float lastRteTime = voiceHints.list.get(0).getTime(); + sb.append(" \n"); - for( VoiceHint hint: voiceHints.list ) + + for( int i = 0 ; i < voiceHints.list.size(); i++ ) { + VoiceHint hint = voiceHints.list.get(i); sb.append(" \n" ) - .append ( " " ).append( hint.getMessageString() ).append( "\n \n " ) - .append( hint.getCommandString() ).append("\n ").append( "" + hint.angle ) - .append("\n ").append( "" + hint.indexInTrack ).append("\n \n \n"); + .append ( " " ).append( hint.getMessageString() ).append( "\n \n"); + + float rteTime; + if (i < voiceHints.list.size() -1) { + rteTime = voiceHints.list.get(i + 1).getTime(); + } else { + rteTime = nodes.get(nodes.size() - 1).getTime(); + } + + if ( rteTime != lastRteTime ) // add timing only if available + { + double t = rteTime - lastRteTime; + sb.append( " \n" ); + lastRteTime = rteTime; + } + sb.append(" " ).append( hint.getCommandString() ).append("\n ").append( "" + (int)hint.angle ) + .append("\n ").append( "" + hint.indexInTrack ).append("\n \n \n"); } sb.append("\n"); } @@ -692,6 +715,22 @@ public final class OsmTrack { return format1( getTotalSeconds()/60. ) + "m"; } + + public String getFormattedTime2() + { + int seconds = (int)(getTotalSeconds() + 0.5); + int hours = seconds/3600; + int minutes = (seconds - hours * 3600) / 60; + seconds = seconds - hours * 3600 - minutes * 60; + String time = ""; + if (hours != 0) + time = "" + hours + "h "; + if (minutes != 0) + time = time + minutes + "m "; + if (seconds != 0) + time = time + seconds + "s"; + return time; + } public String getFormattedEnergy() { diff --git a/brouter-core/src/main/java/btools/router/RoutingEngine.java b/brouter-core/src/main/java/btools/router/RoutingEngine.java index 6174c3c..d377711 100644 --- a/brouter-core/src/main/java/btools/router/RoutingEngine.java +++ b/brouter-core/src/main/java/btools/router/RoutingEngine.java @@ -168,7 +168,7 @@ public class RoutingEngine extends Thread + " plain-ascend = " + track.plainAscend + " cost=" + track.cost; if ( track.energy != 0 ) { - track.message += " energy=" + track.getFormattedEnergy() + " time=" + track.getFormattedTime(); + track.message += " energy=" + track.getFormattedEnergy() + " time=" + track.getFormattedTime2(); } track.name = "brouter_" + routingContext.getProfileName() + "_" + i; @@ -1321,6 +1321,11 @@ public class RoutingEngine extends Thread { return foundTrack.plainAscend; } + + public String getTime() + { + return foundTrack.getFormattedTime2(); + } public OsmTrack getFoundTrack() { diff --git a/brouter-core/src/main/java/btools/router/StdPath.java b/brouter-core/src/main/java/btools/router/StdPath.java index 6f1502e..a1db614 100644 --- a/brouter-core/src/main/java/btools/router/StdPath.java +++ b/brouter-core/src/main/java/btools/router/StdPath.java @@ -238,6 +238,15 @@ final class StdPath extends OsmPath elevation_buffer += delta_h; double incline = calcIncline( dist ); + double wayMaxspeed; + + wayMaxspeed = rc.expctxWay.getMaxspeed() / 3.6f; + if (wayMaxspeed == 0) + { + wayMaxspeed = rc.maxSpeed; + } + wayMaxspeed = Math.min(wayMaxspeed,rc.maxSpeed); + double speed; // Travel speed double f_roll = rc.totalMass * GRAVITY * ( rc.defaultC_r + incline ); if (rc.footMode || rc.expctxWay.getCostfactor() > 4.9 ) @@ -248,7 +257,7 @@ final class StdPath extends OsmPath else if (rc.bikeMode) { speed = solveCubic( rc.S_C_x, f_roll, rc.bikerPower ); - speed = Math.min(speed, rc.maxSpeed); + speed = Math.min(speed, wayMaxspeed); } else { diff --git a/brouter-expressions/src/main/java/btools/expressions/BExpressionContextWay.java b/brouter-expressions/src/main/java/btools/expressions/BExpressionContextWay.java index 3adea96..a879cf4 100644 --- a/brouter-expressions/src/main/java/btools/expressions/BExpressionContextWay.java +++ b/brouter-expressions/src/main/java/btools/expressions/BExpressionContextWay.java @@ -13,7 +13,7 @@ public final class BExpressionContextWay extends BExpressionContext implements T private boolean decodeForbidden = true; private static String[] buildInVariables = - { "costfactor", "turncost", "uphillcostfactor", "downhillcostfactor", "initialcost", "nodeaccessgranted", "initialclassifier", "trafficsourcedensity", "istrafficbackbone", "priorityclassifier", "classifiermask" }; + { "costfactor", "turncost", "uphillcostfactor", "downhillcostfactor", "initialcost", "nodeaccessgranted", "initialclassifier", "trafficsourcedensity", "istrafficbackbone", "priorityclassifier", "classifiermask", "maxspeed" }; protected String[] getBuildInVariableNames() { @@ -31,6 +31,7 @@ public final class BExpressionContextWay extends BExpressionContext implements T public float getIsTrafficBackbone() { return getBuildInVariable(8); } public float getPriorityClassifier() { return getBuildInVariable(9); } public float getClassifierMask() { return getBuildInVariable(10); } + public float getMaxspeed() { return getBuildInVariable(11); } public BExpressionContextWay( BExpressionMetaData meta ) { diff --git a/brouter-routing-app/src/main/java/btools/routingapp/BRouterView.java b/brouter-routing-app/src/main/java/btools/routingapp/BRouterView.java index 57d7b5c..06bd320 100644 --- a/brouter-routing-app/src/main/java/btools/routingapp/BRouterView.java +++ b/brouter-routing-app/src/main/java/btools/routingapp/BRouterView.java @@ -807,8 +807,8 @@ public class BRouterView extends View else { String memstat = memoryClass + "mb pathPeak " + ((cr.getPathPeak()+500)/1000) + "k"; - String result = "version = BRouter-1.4.9\n" + "mem = " + memstat + "\ndistance = " + cr.getDistance() / 1000. + " km\n" + "filtered ascend = " + cr.getAscend() - + " m\n" + "plain ascend = " + cr.getPlainAscend(); + String result = "version = BRouter-1.4.11\n" + "mem = " + memstat + "\ndistance = " + cr.getDistance() / 1000. + " km\n" + "filtered ascend = " + cr.getAscend() + + " m\n" + "plain ascend = " + cr.getPlainAscend() + " m\n" + "estimated time = " + cr.getTime(); rawTrack = cr.getFoundRawTrack();