Don't include turn costs when calculation weight/duration/speed annotations.

This commit is contained in:
Daniel Patterson
2017-07-24 12:47:05 -07:00
parent 6c0ab24100
commit dac6bb27aa
6 changed files with 71 additions and 12 deletions
+13 -5
View File
@@ -78,11 +78,19 @@ inline LegGeometry assembleGeometry(const datafacade::BaseDataFacade &facade,
}
prev_coordinate = coordinate;
geometry.annotations.emplace_back(
LegGeometry::Annotation{current_distance,
path_point.duration_until_turn / 10.,
path_point.weight_until_turn / facade.GetWeightMultiplier(),
path_point.datasource_id});
geometry.annotations.emplace_back(LegGeometry::Annotation{
current_distance,
// NOTE: we want annotations to include only the duration/weight
// of the segment itself. For segments immediately before
// a turn, the duration_until_turn/weight_until_turn values
// include the turn cost. To counter this, we subtract
// the duration_of_turn/weight_of_turn value, which is 0 for
// non-preceeding-turn segments, but contains the turn value
// for segments before a turn.
(path_point.duration_until_turn - path_point.duration_of_turn) / 10.,
(path_point.weight_until_turn - path_point.weight_of_turn) /
facade.GetWeightMultiplier(),
path_point.datasource_id});
geometry.locations.push_back(std::move(coordinate));
geometry.osm_node_ids.push_back(facade.GetOSMNodeIDOfNode(path_point.turn_via_node));
}
+6 -2
View File
@@ -38,8 +38,12 @@ struct LegGeometry
struct Annotation
{
double distance; // distance in meters
double duration; // duration in seconds
double weight; // weight value
// Total duration of a segment, in seconds, NOT including
// the turn penalty if the segment preceeds a turn
double duration;
double weight; // weight value, NOT including the turn weight
DatasourceID datasource;
};
std::vector<Annotation> annotations;