refactor ExtractionTurn and ProcessTurn c++ code
This commit is contained in:
parent
c95d845876
commit
cbc96ec492
@ -14,41 +14,33 @@ namespace extractor
|
|||||||
|
|
||||||
struct ExtractionTurn
|
struct ExtractionTurn
|
||||||
{
|
{
|
||||||
ExtractionTurn(const guidance::ConnectedRoad &turn,
|
ExtractionTurn(double angle,
|
||||||
|
int number_of_roads,
|
||||||
|
bool is_u_turn,
|
||||||
bool has_traffic_light,
|
bool has_traffic_light,
|
||||||
bool source_restricted,
|
bool source_restricted,
|
||||||
bool target_restricted,
|
bool target_restricted,
|
||||||
bool is_left_hand_driving)
|
bool is_left_hand_driving,
|
||||||
: angle(180. - turn.angle), turn_type(turn.instruction.type),
|
TravelMode source_mode,
|
||||||
direction_modifier(turn.instruction.direction_modifier),
|
TravelMode target_mode)
|
||||||
|
: angle(180. - angle), number_of_roads(number_of_roads), is_u_turn(is_u_turn),
|
||||||
has_traffic_light(has_traffic_light), source_restricted(source_restricted),
|
has_traffic_light(has_traffic_light), source_restricted(source_restricted),
|
||||||
target_restricted(target_restricted), is_left_hand_driving(is_left_hand_driving),
|
target_restricted(target_restricted), is_left_hand_driving(is_left_hand_driving),
|
||||||
weight(0.), duration(0.)
|
weight(0.), duration(0.), source_mode(source_mode), target_mode(target_mode)
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
ExtractionTurn(bool has_traffic_light,
|
|
||||||
bool source_restricted,
|
|
||||||
bool target_restricted,
|
|
||||||
bool is_left_hand_driving)
|
|
||||||
: angle(0), turn_type(guidance::TurnType::NoTurn),
|
|
||||||
direction_modifier(guidance::DirectionModifier::Straight),
|
|
||||||
has_traffic_light(has_traffic_light), source_restricted(source_restricted),
|
|
||||||
target_restricted(target_restricted), is_left_hand_driving(is_left_hand_driving),
|
|
||||||
weight(0.), duration(0.)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
const double angle;
|
const double angle;
|
||||||
const guidance::TurnType::Enum turn_type;
|
const int number_of_roads;
|
||||||
const guidance::DirectionModifier::Enum direction_modifier;
|
const bool is_u_turn;
|
||||||
const bool has_traffic_light;
|
const bool has_traffic_light;
|
||||||
const bool source_restricted;
|
const bool source_restricted;
|
||||||
const bool target_restricted;
|
const bool target_restricted;
|
||||||
const bool is_left_hand_driving;
|
const bool is_left_hand_driving;
|
||||||
|
|
||||||
double weight;
|
double weight;
|
||||||
double duration;
|
double duration;
|
||||||
|
TravelMode source_mode;
|
||||||
|
TravelMode target_mode;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -68,7 +68,7 @@ class Sol2ScriptingEnvironment final : public ScriptingEnvironment
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static const constexpr int SUPPORTED_MIN_API_VERSION = 0;
|
static const constexpr int SUPPORTED_MIN_API_VERSION = 0;
|
||||||
static const constexpr int SUPPORTED_MAX_API_VERSION = 3;
|
static const constexpr int SUPPORTED_MAX_API_VERSION = 4;
|
||||||
|
|
||||||
explicit Sol2ScriptingEnvironment(
|
explicit Sol2ScriptingEnvironment(
|
||||||
const std::string &file_name,
|
const std::string &file_name,
|
||||||
|
@ -569,12 +569,16 @@ void EdgeBasedGraphFactory::GenerateEdgeExpandedEdges(
|
|||||||
// compute weight and duration penalties
|
// compute weight and duration penalties
|
||||||
auto is_traffic_light = m_traffic_lights.count(node_at_center_of_intersection);
|
auto is_traffic_light = m_traffic_lights.count(node_at_center_of_intersection);
|
||||||
ExtractionTurn extracted_turn(
|
ExtractionTurn extracted_turn(
|
||||||
turn,
|
turn.angle,
|
||||||
|
m_node_based_graph.GetOutDegree(node_at_center_of_intersection),
|
||||||
|
turn.instruction.direction_modifier == guidance::DirectionModifier::UTurn,
|
||||||
is_traffic_light,
|
is_traffic_light,
|
||||||
edge_data1.flags.restricted,
|
edge_data1.flags.restricted,
|
||||||
edge_data2.flags.restricted,
|
edge_data2.flags.restricted,
|
||||||
m_edge_based_node_container.GetAnnotation(edge_data1.annotation_data)
|
m_edge_based_node_container.GetAnnotation(edge_data1.annotation_data)
|
||||||
.is_left_hand_driving);
|
.is_left_hand_driving,
|
||||||
|
m_edge_based_node_container.GetAnnotation(edge_data1.annotation_data).travel_mode,
|
||||||
|
m_edge_based_node_container.GetAnnotation(edge_data2.annotation_data).travel_mode);
|
||||||
scripting_environment.ProcessTurn(extracted_turn);
|
scripting_environment.ProcessTurn(extracted_turn);
|
||||||
|
|
||||||
// turn penalties are limited to [-2^15, 2^15) which roughly
|
// turn penalties are limited to [-2^15, 2^15) which roughly
|
||||||
|
@ -221,10 +221,15 @@ void GraphCompressor::Compress(
|
|||||||
|
|
||||||
// generate an artifical turn for the turn penalty generation
|
// generate an artifical turn for the turn penalty generation
|
||||||
ExtractionTurn extraction_turn(
|
ExtractionTurn extraction_turn(
|
||||||
|
0,
|
||||||
|
2,
|
||||||
|
false,
|
||||||
true,
|
true,
|
||||||
fwd_edge_data1.flags.restricted,
|
fwd_edge_data1.flags.restricted,
|
||||||
fwd_edge_data2.flags.restricted,
|
fwd_edge_data2.flags.restricted,
|
||||||
node_data_container[fwd_edge_data1.annotation_data].is_left_hand_driving);
|
node_data_container[fwd_edge_data1.annotation_data].is_left_hand_driving,
|
||||||
|
TRAVEL_MODE_DRIVING,
|
||||||
|
TRAVEL_MODE_DRIVING);
|
||||||
|
|
||||||
scripting_environment.ProcessTurn(extraction_turn);
|
scripting_environment.ProcessTurn(extraction_turn);
|
||||||
node_duration_penalty = extraction_turn.duration * 10;
|
node_duration_penalty = extraction_turn.duration * 10;
|
||||||
|
@ -159,80 +159,6 @@ void Sol2ScriptingEnvironment::InitContext(LuaScriptingContext &context)
|
|||||||
"connectivity",
|
"connectivity",
|
||||||
extractor::guidance::RoadPriorityClass::CONNECTIVITY);
|
extractor::guidance::RoadPriorityClass::CONNECTIVITY);
|
||||||
|
|
||||||
context.state.new_enum("turn_type",
|
|
||||||
"invalid",
|
|
||||||
extractor::guidance::TurnType::Invalid,
|
|
||||||
"new_name",
|
|
||||||
extractor::guidance::TurnType::NewName,
|
|
||||||
"continue",
|
|
||||||
extractor::guidance::TurnType::Continue,
|
|
||||||
"turn",
|
|
||||||
extractor::guidance::TurnType::Turn,
|
|
||||||
"merge",
|
|
||||||
extractor::guidance::TurnType::Merge,
|
|
||||||
"on_ramp",
|
|
||||||
extractor::guidance::TurnType::OnRamp,
|
|
||||||
"off_ramp",
|
|
||||||
extractor::guidance::TurnType::OffRamp,
|
|
||||||
"fork",
|
|
||||||
extractor::guidance::TurnType::Fork,
|
|
||||||
"end_of_road",
|
|
||||||
extractor::guidance::TurnType::EndOfRoad,
|
|
||||||
"notification",
|
|
||||||
extractor::guidance::TurnType::Notification,
|
|
||||||
"enter_roundabout",
|
|
||||||
extractor::guidance::TurnType::EnterRoundabout,
|
|
||||||
"enter_and_exit_roundabout",
|
|
||||||
extractor::guidance::TurnType::EnterAndExitRoundabout,
|
|
||||||
"enter_rotary",
|
|
||||||
extractor::guidance::TurnType::EnterRotary,
|
|
||||||
"enter_and_exit_rotary",
|
|
||||||
extractor::guidance::TurnType::EnterAndExitRotary,
|
|
||||||
"enter_roundabout_intersection",
|
|
||||||
extractor::guidance::TurnType::EnterRoundaboutIntersection,
|
|
||||||
"enter_and_exit_roundabout_intersection",
|
|
||||||
extractor::guidance::TurnType::EnterAndExitRoundaboutIntersection,
|
|
||||||
"use_lane",
|
|
||||||
extractor::guidance::TurnType::Suppressed,
|
|
||||||
"no_turn",
|
|
||||||
extractor::guidance::TurnType::NoTurn,
|
|
||||||
"suppressed",
|
|
||||||
extractor::guidance::TurnType::Suppressed,
|
|
||||||
"enter_roundabout_at_exit",
|
|
||||||
extractor::guidance::TurnType::EnterRoundaboutAtExit,
|
|
||||||
"exit_roundabout",
|
|
||||||
extractor::guidance::TurnType::ExitRoundabout,
|
|
||||||
"enter_rotary_at_exit",
|
|
||||||
extractor::guidance::TurnType::EnterRotaryAtExit,
|
|
||||||
"exit_rotary",
|
|
||||||
extractor::guidance::TurnType::ExitRotary,
|
|
||||||
"enter_roundabout_intersection_at_exit",
|
|
||||||
extractor::guidance::TurnType::EnterRoundaboutIntersectionAtExit,
|
|
||||||
"exit_roundabout_intersection",
|
|
||||||
extractor::guidance::TurnType::ExitRoundaboutIntersection,
|
|
||||||
"stay_on_roundabout",
|
|
||||||
extractor::guidance::TurnType::StayOnRoundabout,
|
|
||||||
"sliproad",
|
|
||||||
extractor::guidance::TurnType::Sliproad);
|
|
||||||
|
|
||||||
context.state.new_enum("direction_modifier",
|
|
||||||
"u_turn",
|
|
||||||
extractor::guidance::DirectionModifier::UTurn,
|
|
||||||
"sharp_right",
|
|
||||||
extractor::guidance::DirectionModifier::SharpRight,
|
|
||||||
"right",
|
|
||||||
extractor::guidance::DirectionModifier::Right,
|
|
||||||
"slight_right",
|
|
||||||
extractor::guidance::DirectionModifier::SlightRight,
|
|
||||||
"straight",
|
|
||||||
extractor::guidance::DirectionModifier::Straight,
|
|
||||||
"slight_left",
|
|
||||||
extractor::guidance::DirectionModifier::SlightLeft,
|
|
||||||
"left",
|
|
||||||
extractor::guidance::DirectionModifier::Left,
|
|
||||||
"sharp_left",
|
|
||||||
extractor::guidance::DirectionModifier::SharpLeft);
|
|
||||||
|
|
||||||
context.state.new_enum("item_type",
|
context.state.new_enum("item_type",
|
||||||
"node",
|
"node",
|
||||||
osmium::item_type::node,
|
osmium::item_type::node,
|
||||||
@ -487,26 +413,6 @@ void Sol2ScriptingEnvironment::InitContext(LuaScriptingContext &context)
|
|||||||
"duration",
|
"duration",
|
||||||
&ExtractionSegment::duration);
|
&ExtractionSegment::duration);
|
||||||
|
|
||||||
context.state.new_usertype<ExtractionTurn>("ExtractionTurn",
|
|
||||||
"angle",
|
|
||||||
&ExtractionTurn::angle,
|
|
||||||
"turn_type",
|
|
||||||
&ExtractionTurn::turn_type,
|
|
||||||
"direction_modifier",
|
|
||||||
&ExtractionTurn::direction_modifier,
|
|
||||||
"has_traffic_light",
|
|
||||||
&ExtractionTurn::has_traffic_light,
|
|
||||||
"weight",
|
|
||||||
&ExtractionTurn::weight,
|
|
||||||
"duration",
|
|
||||||
&ExtractionTurn::duration,
|
|
||||||
"source_restricted",
|
|
||||||
&ExtractionTurn::source_restricted,
|
|
||||||
"target_restricted",
|
|
||||||
&ExtractionTurn::target_restricted,
|
|
||||||
"is_left_hand_driving",
|
|
||||||
&ExtractionTurn::is_left_hand_driving);
|
|
||||||
|
|
||||||
// Keep in mind .location is available only if .pbf is preprocessed to set the location with the
|
// Keep in mind .location is available only if .pbf is preprocessed to set the location with the
|
||||||
// ref using osmium command "osmium add-locations-to-ways"
|
// ref using osmium command "osmium add-locations-to-ways"
|
||||||
context.state.new_usertype<osmium::NodeRef>(
|
context.state.new_usertype<osmium::NodeRef>(
|
||||||
@ -653,16 +559,155 @@ void Sol2ScriptingEnvironment::InitContext(LuaScriptingContext &context)
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
auto initialize_V3_extraction_turn = [&]() {
|
||||||
|
|
||||||
|
context.state.new_usertype<ExtractionTurn>(
|
||||||
|
"ExtractionTurn",
|
||||||
|
"angle",
|
||||||
|
&ExtractionTurn::angle,
|
||||||
|
"turn_type",
|
||||||
|
sol::property([](const ExtractionTurn &turn) {
|
||||||
|
if (turn.number_of_roads > 2 || turn.source_mode != turn.target_mode || turn.is_u_turn)
|
||||||
|
return guidance::TurnType::Turn;
|
||||||
|
else
|
||||||
|
return guidance::TurnType::NoTurn;
|
||||||
|
}),
|
||||||
|
"direction_modifier",
|
||||||
|
sol::property([](const ExtractionTurn &turn) {
|
||||||
|
if (turn.is_u_turn)
|
||||||
|
return guidance::DirectionModifier::UTurn;
|
||||||
|
else
|
||||||
|
return guidance::DirectionModifier::Straight;
|
||||||
|
}),
|
||||||
|
"has_traffic_light",
|
||||||
|
&ExtractionTurn::has_traffic_light,
|
||||||
|
"weight",
|
||||||
|
&ExtractionTurn::weight,
|
||||||
|
"duration",
|
||||||
|
&ExtractionTurn::duration,
|
||||||
|
"source_restricted",
|
||||||
|
&ExtractionTurn::source_restricted,
|
||||||
|
"target_restricted",
|
||||||
|
&ExtractionTurn::target_restricted,
|
||||||
|
"is_left_hand_driving",
|
||||||
|
&ExtractionTurn::is_left_hand_driving);
|
||||||
|
|
||||||
|
context.state.new_enum("turn_type",
|
||||||
|
"invalid",
|
||||||
|
extractor::guidance::TurnType::Invalid,
|
||||||
|
"new_name",
|
||||||
|
extractor::guidance::TurnType::NewName,
|
||||||
|
"continue",
|
||||||
|
extractor::guidance::TurnType::Continue,
|
||||||
|
"turn",
|
||||||
|
extractor::guidance::TurnType::Turn,
|
||||||
|
"merge",
|
||||||
|
extractor::guidance::TurnType::Merge,
|
||||||
|
"on_ramp",
|
||||||
|
extractor::guidance::TurnType::OnRamp,
|
||||||
|
"off_ramp",
|
||||||
|
extractor::guidance::TurnType::OffRamp,
|
||||||
|
"fork",
|
||||||
|
extractor::guidance::TurnType::Fork,
|
||||||
|
"end_of_road",
|
||||||
|
extractor::guidance::TurnType::EndOfRoad,
|
||||||
|
"notification",
|
||||||
|
extractor::guidance::TurnType::Notification,
|
||||||
|
"enter_roundabout",
|
||||||
|
extractor::guidance::TurnType::EnterRoundabout,
|
||||||
|
"enter_and_exit_roundabout",
|
||||||
|
extractor::guidance::TurnType::EnterAndExitRoundabout,
|
||||||
|
"enter_rotary",
|
||||||
|
extractor::guidance::TurnType::EnterRotary,
|
||||||
|
"enter_and_exit_rotary",
|
||||||
|
extractor::guidance::TurnType::EnterAndExitRotary,
|
||||||
|
"enter_roundabout_intersection",
|
||||||
|
extractor::guidance::TurnType::EnterRoundaboutIntersection,
|
||||||
|
"enter_and_exit_roundabout_intersection",
|
||||||
|
extractor::guidance::TurnType::EnterAndExitRoundaboutIntersection,
|
||||||
|
"use_lane",
|
||||||
|
extractor::guidance::TurnType::Suppressed,
|
||||||
|
"no_turn",
|
||||||
|
extractor::guidance::TurnType::NoTurn,
|
||||||
|
"suppressed",
|
||||||
|
extractor::guidance::TurnType::Suppressed,
|
||||||
|
"enter_roundabout_at_exit",
|
||||||
|
extractor::guidance::TurnType::EnterRoundaboutAtExit,
|
||||||
|
"exit_roundabout",
|
||||||
|
extractor::guidance::TurnType::ExitRoundabout,
|
||||||
|
"enter_rotary_at_exit",
|
||||||
|
extractor::guidance::TurnType::EnterRotaryAtExit,
|
||||||
|
"exit_rotary",
|
||||||
|
extractor::guidance::TurnType::ExitRotary,
|
||||||
|
"enter_roundabout_intersection_at_exit",
|
||||||
|
extractor::guidance::TurnType::EnterRoundaboutIntersectionAtExit,
|
||||||
|
"exit_roundabout_intersection",
|
||||||
|
extractor::guidance::TurnType::ExitRoundaboutIntersection,
|
||||||
|
"stay_on_roundabout",
|
||||||
|
extractor::guidance::TurnType::StayOnRoundabout,
|
||||||
|
"sliproad",
|
||||||
|
extractor::guidance::TurnType::Sliproad);
|
||||||
|
|
||||||
|
context.state.new_enum("direction_modifier",
|
||||||
|
"u_turn",
|
||||||
|
extractor::guidance::DirectionModifier::UTurn,
|
||||||
|
"sharp_right",
|
||||||
|
extractor::guidance::DirectionModifier::SharpRight,
|
||||||
|
"right",
|
||||||
|
extractor::guidance::DirectionModifier::Right,
|
||||||
|
"slight_right",
|
||||||
|
extractor::guidance::DirectionModifier::SlightRight,
|
||||||
|
"straight",
|
||||||
|
extractor::guidance::DirectionModifier::Straight,
|
||||||
|
"slight_left",
|
||||||
|
extractor::guidance::DirectionModifier::SlightLeft,
|
||||||
|
"left",
|
||||||
|
extractor::guidance::DirectionModifier::Left,
|
||||||
|
"sharp_left",
|
||||||
|
extractor::guidance::DirectionModifier::SharpLeft);
|
||||||
|
};
|
||||||
|
|
||||||
switch (context.api_version)
|
switch (context.api_version)
|
||||||
{
|
{
|
||||||
|
case 4:
|
||||||
|
{
|
||||||
|
context.state.new_usertype<ExtractionTurn>("ExtractionTurn",
|
||||||
|
"angle",
|
||||||
|
&ExtractionTurn::angle,
|
||||||
|
"number_of_roads",
|
||||||
|
&ExtractionTurn::number_of_roads,
|
||||||
|
"is_u_turn",
|
||||||
|
&ExtractionTurn::is_u_turn,
|
||||||
|
"has_traffic_light",
|
||||||
|
&ExtractionTurn::has_traffic_light,
|
||||||
|
"weight",
|
||||||
|
&ExtractionTurn::weight,
|
||||||
|
"duration",
|
||||||
|
&ExtractionTurn::duration,
|
||||||
|
"source_restricted",
|
||||||
|
&ExtractionTurn::source_restricted,
|
||||||
|
"target_restricted",
|
||||||
|
&ExtractionTurn::target_restricted,
|
||||||
|
"is_left_hand_driving",
|
||||||
|
&ExtractionTurn::is_left_hand_driving,
|
||||||
|
"source_mode",
|
||||||
|
&ExtractionTurn::source_mode,
|
||||||
|
"target_mode",
|
||||||
|
&ExtractionTurn::target_mode);
|
||||||
|
initV2Context();
|
||||||
|
break;
|
||||||
|
}
|
||||||
case 3:
|
case 3:
|
||||||
case 2:
|
case 2:
|
||||||
{
|
{
|
||||||
|
initialize_V3_extraction_turn();
|
||||||
initV2Context();
|
initV2Context();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 1:
|
case 1:
|
||||||
{
|
{
|
||||||
|
initialize_V3_extraction_turn();
|
||||||
|
|
||||||
// cache references to functions for faster execution
|
// cache references to functions for faster execution
|
||||||
context.turn_function = context.state["turn_function"];
|
context.turn_function = context.state["turn_function"];
|
||||||
context.node_function = context.state["node_function"];
|
context.node_function = context.state["node_function"];
|
||||||
@ -693,6 +738,8 @@ void Sol2ScriptingEnvironment::InitContext(LuaScriptingContext &context)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 0:
|
case 0:
|
||||||
|
initialize_V3_extraction_turn();
|
||||||
|
|
||||||
// cache references to functions for faster execution
|
// cache references to functions for faster execution
|
||||||
context.turn_function = context.state["turn_function"];
|
context.turn_function = context.state["turn_function"];
|
||||||
context.node_function = context.state["node_function"];
|
context.node_function = context.state["node_function"];
|
||||||
@ -851,6 +898,7 @@ std::vector<std::vector<std::string>> Sol2ScriptingEnvironment::GetExcludableCla
|
|||||||
auto &context = GetSol2Context();
|
auto &context = GetSol2Context();
|
||||||
switch (context.api_version)
|
switch (context.api_version)
|
||||||
{
|
{
|
||||||
|
case 4:
|
||||||
case 3:
|
case 3:
|
||||||
case 2:
|
case 2:
|
||||||
return Sol2ScriptingEnvironment::GetStringListsFromTable("excludable");
|
return Sol2ScriptingEnvironment::GetStringListsFromTable("excludable");
|
||||||
@ -864,6 +912,7 @@ std::vector<std::string> Sol2ScriptingEnvironment::GetClassNames()
|
|||||||
auto &context = GetSol2Context();
|
auto &context = GetSol2Context();
|
||||||
switch (context.api_version)
|
switch (context.api_version)
|
||||||
{
|
{
|
||||||
|
case 4:
|
||||||
case 3:
|
case 3:
|
||||||
case 2:
|
case 2:
|
||||||
return Sol2ScriptingEnvironment::GetStringListFromTable("classes");
|
return Sol2ScriptingEnvironment::GetStringListFromTable("classes");
|
||||||
@ -877,6 +926,7 @@ std::vector<std::string> Sol2ScriptingEnvironment::GetNameSuffixList()
|
|||||||
auto &context = GetSol2Context();
|
auto &context = GetSol2Context();
|
||||||
switch (context.api_version)
|
switch (context.api_version)
|
||||||
{
|
{
|
||||||
|
case 4:
|
||||||
case 3:
|
case 3:
|
||||||
case 2:
|
case 2:
|
||||||
return Sol2ScriptingEnvironment::GetStringListFromTable("suffix_list");
|
return Sol2ScriptingEnvironment::GetStringListFromTable("suffix_list");
|
||||||
@ -892,6 +942,7 @@ std::vector<std::string> Sol2ScriptingEnvironment::GetRestrictions()
|
|||||||
auto &context = GetSol2Context();
|
auto &context = GetSol2Context();
|
||||||
switch (context.api_version)
|
switch (context.api_version)
|
||||||
{
|
{
|
||||||
|
case 4:
|
||||||
case 3:
|
case 3:
|
||||||
case 2:
|
case 2:
|
||||||
return Sol2ScriptingEnvironment::GetStringListFromTable("restrictions");
|
return Sol2ScriptingEnvironment::GetStringListFromTable("restrictions");
|
||||||
@ -907,6 +958,7 @@ std::vector<std::string> Sol2ScriptingEnvironment::GetRelations()
|
|||||||
auto &context = GetSol2Context();
|
auto &context = GetSol2Context();
|
||||||
switch (context.api_version)
|
switch (context.api_version)
|
||||||
{
|
{
|
||||||
|
case 4:
|
||||||
case 3:
|
case 3:
|
||||||
return Sol2ScriptingEnvironment::GetStringListFromTable("relation_types");
|
return Sol2ScriptingEnvironment::GetStringListFromTable("relation_types");
|
||||||
default:
|
default:
|
||||||
@ -920,6 +972,7 @@ void Sol2ScriptingEnvironment::ProcessTurn(ExtractionTurn &turn)
|
|||||||
|
|
||||||
switch (context.api_version)
|
switch (context.api_version)
|
||||||
{
|
{
|
||||||
|
case 4:
|
||||||
case 3:
|
case 3:
|
||||||
case 2:
|
case 2:
|
||||||
if (context.has_turn_penalty_function)
|
if (context.has_turn_penalty_function)
|
||||||
@ -951,14 +1004,14 @@ void Sol2ScriptingEnvironment::ProcessTurn(ExtractionTurn &turn)
|
|||||||
case 0:
|
case 0:
|
||||||
if (context.has_turn_penalty_function)
|
if (context.has_turn_penalty_function)
|
||||||
{
|
{
|
||||||
if (turn.turn_type != guidance::TurnType::NoTurn)
|
if (turn.number_of_roads > 2)
|
||||||
{
|
{
|
||||||
// Get turn duration and convert deci-seconds to seconds
|
// Get turn duration and convert deci-seconds to seconds
|
||||||
turn.duration = static_cast<double>(context.turn_function(turn.angle)) / 10.;
|
turn.duration = static_cast<double>(context.turn_function(turn.angle)) / 10.;
|
||||||
BOOST_ASSERT(turn.weight == 0);
|
BOOST_ASSERT(turn.weight == 0);
|
||||||
|
|
||||||
// add U-turn penalty
|
// add U-turn penalty
|
||||||
if (turn.direction_modifier == guidance::DirectionModifier::UTurn)
|
if (turn.is_u_turn)
|
||||||
turn.duration += context.properties.GetUturnPenalty();
|
turn.duration += context.properties.GetUturnPenalty();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -987,6 +1040,7 @@ void Sol2ScriptingEnvironment::ProcessSegment(ExtractionSegment &segment)
|
|||||||
{
|
{
|
||||||
switch (context.api_version)
|
switch (context.api_version)
|
||||||
{
|
{
|
||||||
|
case 4:
|
||||||
case 3:
|
case 3:
|
||||||
case 2:
|
case 2:
|
||||||
context.segment_function(context.profile_table, segment);
|
context.segment_function(context.profile_table, segment);
|
||||||
@ -1011,6 +1065,7 @@ void LuaScriptingContext::ProcessNode(const osmium::Node &node,
|
|||||||
|
|
||||||
switch (api_version)
|
switch (api_version)
|
||||||
{
|
{
|
||||||
|
case 4:
|
||||||
case 3:
|
case 3:
|
||||||
node_function(profile_table, node, result, relations);
|
node_function(profile_table, node, result, relations);
|
||||||
break;
|
break;
|
||||||
@ -1032,6 +1087,7 @@ void LuaScriptingContext::ProcessWay(const osmium::Way &way,
|
|||||||
|
|
||||||
switch (api_version)
|
switch (api_version)
|
||||||
{
|
{
|
||||||
|
case 4:
|
||||||
case 3:
|
case 3:
|
||||||
way_function(profile_table, way, result, relations);
|
way_function(profile_table, way, result, relations);
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user