Merge pull request #126 from Phyks/travelTime
Fix travel time computation
This commit is contained in:
commit
0faae6dea7
2 changed files with 56 additions and 58 deletions
|
@ -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 )
|
||||||
{
|
{
|
||||||
|
|
|
@ -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 )
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue