Fix travel time computation

This commit is contained in:
Phyks (Lucas Verney) 2018-11-23 10:03:05 +01:00
parent 6e6c4a18b2
commit b27e6262b5
2 changed files with 56 additions and 58 deletions

View file

@ -369,7 +369,7 @@ abstract class OsmPath implements OsmLinkHolder
} }
} }
double elevation = ele2 == Short.MIN_VALUE ? 100. : ele2/4.; 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); traffic += dist*rc.expctxWay.getTrafficSourceDensity()*Math.pow(cost2/10000.f,rc.trafficSourceExponent);
} }
String wayKeyValues = ""; // compute kinematic
if ( message != null ) { computeKinematic( rc, dist, delta_h, detailMode );
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 = rc.expctxWay.getKeyValueDescription( isReverse, description );
} }
if ( message != null ) if ( stopAtEndpoint )
{ {
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 ( recordTransferNodes ) 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.cost = cost;
originElement.addTraffic( traffic ); if ( message != null )
traffic = 0; {
originElement.message = message;
}
} }
lon0 = lon1; if ( rc.nogomatch )
lat0 = lat1; {
lon1 = lon2; cost = -1;
lat1 = lat2; }
ele1 = ele2; 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) // check for nogo-matches (after the *actual* start of segment)
if ( rc.nogomatch ) if ( rc.nogomatch )
{ {

View file

@ -613,14 +613,14 @@ final class StdPath extends OsmPath
{ {
return; return;
} }
// compute incline // compute incline
double decayFactor = exp( - dist / 100. ); double decayFactor = exp( - dist / 100. );
elevation_buffer += delta_h; elevation_buffer += delta_h;
float new_elevation_buffer = (float)( elevation_buffer * decayFactor ); float new_elevation_buffer = (float)( elevation_buffer * decayFactor );
double incline = ( elevation_buffer - new_elevation_buffer ) / dist; double incline = ( elevation_buffer - new_elevation_buffer ) / dist;
elevation_buffer = new_elevation_buffer; elevation_buffer = new_elevation_buffer;
double speed; // Travel speed double speed; // Travel speed
if (rc.footMode ) if (rc.footMode )
{ {