Merge pull request #495 from quaelnix/compute-kinematic-regression-fix

Fix regression of travel time calculation
This commit is contained in:
afischerdev 2023-01-11 17:05:56 +01:00 committed by GitHub
commit d081e5eb18
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -202,26 +202,20 @@ final class StdPath extends OsmPath {
elevation_buffer += delta_h; elevation_buffer += delta_h;
double incline = calcIncline(dist); double incline = calcIncline(dist);
double wayMaxspeed; double maxSpeed = rc.maxSpeed;
double speedLimit = rc.expctxWay.getMaxspeed() / 3.6f;
wayMaxspeed = rc.expctxWay.getMaxspeed() / 3.6f; if (speedLimit > 0) {
if (wayMaxspeed == 0) { maxSpeed = Math.min(maxSpeed, speedLimit);
wayMaxspeed = rc.maxSpeed;
} }
wayMaxspeed = Math.min(wayMaxspeed, rc.maxSpeed);
double speed; // Travel speed double speed = maxSpeed; // Travel speed
double f_roll = rc.totalMass * GRAVITY * (rc.defaultC_r + incline); double f_roll = rc.totalMass * GRAVITY * (rc.defaultC_r + incline);
if (rc.footMode || rc.expctxWay.getCostfactor() > 4.9) { if (rc.footMode) {
// Use Tobler's hiking function for walking sections // Use Tobler's hiking function for walking sections
speed = rc.maxSpeed * 3.6; speed = rc.maxSpeed * FastMath.exp(-3.5 * Math.abs(incline + 0.05));
speed = (speed * FastMath.exp(-3.5 * Math.abs(incline + 0.05))) / 3.6;
} else if (rc.bikeMode) { } else if (rc.bikeMode) {
speed = solveCubic(rc.S_C_x, f_roll, rc.bikerPower); speed = solveCubic(rc.S_C_x, f_roll, rc.bikerPower);
speed = Math.min(speed, wayMaxspeed); speed = Math.min(speed, maxSpeed);
} else // all other
{
speed = wayMaxspeed;
} }
float dt = (float) (dist / speed); float dt = (float) (dist / speed);
totalTime += dt; totalTime += dt;