update lua interface to speed and mode

This commit is contained in:
Emil Tin 2014-08-18 15:38:07 +02:00
parent 6cdc590db5
commit 30362cfc0c
14 changed files with 100 additions and 100 deletions

View File

@ -27,7 +27,7 @@ struct EdgeBasedNode
packed_geometry_id(SPECIAL_EDGEID), packed_geometry_id(SPECIAL_EDGEID),
fwd_segment_position( std::numeric_limits<unsigned short>::max() ), fwd_segment_position( std::numeric_limits<unsigned short>::max() ),
is_in_tiny_cc(false), is_in_tiny_cc(false),
travel_mode(TRAVEL_MODE_INACCESSIBLE), forward_travel_mode(TRAVEL_MODE_INACCESSIBLE),
backward_travel_mode(TRAVEL_MODE_INACCESSIBLE) backward_travel_mode(TRAVEL_MODE_INACCESSIBLE)
{ } { }
@ -44,7 +44,7 @@ struct EdgeBasedNode
unsigned packed_geometry_id, unsigned packed_geometry_id,
unsigned short fwd_segment_position, unsigned short fwd_segment_position,
bool belongs_to_tiny_component, bool belongs_to_tiny_component,
TravelMode travel_mode , TravelMode forward_travel_mode,
TravelMode backward_travel_mode TravelMode backward_travel_mode
) : ) :
forward_edge_based_node_id(forward_edge_based_node_id), forward_edge_based_node_id(forward_edge_based_node_id),
@ -59,7 +59,7 @@ struct EdgeBasedNode
packed_geometry_id(packed_geometry_id), packed_geometry_id(packed_geometry_id),
fwd_segment_position(fwd_segment_position), fwd_segment_position(fwd_segment_position),
is_in_tiny_cc(belongs_to_tiny_component), is_in_tiny_cc(belongs_to_tiny_component),
travel_mode(travel_mode), forward_travel_mode(forward_travel_mode),
backward_travel_mode(backward_travel_mode) backward_travel_mode(backward_travel_mode)
{ {
BOOST_ASSERT((forward_edge_based_node_id != SPECIAL_NODEID) || BOOST_ASSERT((forward_edge_based_node_id != SPECIAL_NODEID) ||
@ -92,7 +92,7 @@ struct EdgeBasedNode
unsigned packed_geometry_id; // if set, then the edge represents a packed geometry unsigned packed_geometry_id; // if set, then the edge represents a packed geometry
unsigned short fwd_segment_position; // segment id in a compressed geometry unsigned short fwd_segment_position; // segment id in a compressed geometry
bool is_in_tiny_cc; bool is_in_tiny_cc;
TravelMode travel_mode : 4; TravelMode forward_travel_mode : 4;
TravelMode backward_travel_mode : 4; TravelMode backward_travel_mode : 4;
}; };

View File

@ -41,7 +41,7 @@ struct PhantomNode
int forward_weight, int reverse_weight, int forward_offset, int reverse_offset, int forward_weight, int reverse_weight, int forward_offset, int reverse_offset,
unsigned packed_geometry_id, FixedPointCoordinate &location, unsigned packed_geometry_id, FixedPointCoordinate &location,
unsigned short fwd_segment_position, unsigned short fwd_segment_position,
TravelMode travel_mode, TravelMode backward_travel_mode) : TravelMode forward_travel_mode, TravelMode backward_travel_mode) :
forward_node_id(forward_node_id), forward_node_id(forward_node_id),
reverse_node_id(reverse_node_id), reverse_node_id(reverse_node_id),
name_id(name_id), name_id(name_id),
@ -52,7 +52,7 @@ struct PhantomNode
packed_geometry_id(packed_geometry_id), packed_geometry_id(packed_geometry_id),
location(location), location(location),
fwd_segment_position(fwd_segment_position), fwd_segment_position(fwd_segment_position),
travel_mode(travel_mode), forward_travel_mode(forward_travel_mode),
backward_travel_mode(backward_travel_mode) backward_travel_mode(backward_travel_mode)
{ } { }
@ -66,7 +66,7 @@ struct PhantomNode
reverse_offset(0), reverse_offset(0),
packed_geometry_id(SPECIAL_EDGEID), packed_geometry_id(SPECIAL_EDGEID),
fwd_segment_position(0), fwd_segment_position(0),
travel_mode(TRAVEL_MODE_INACCESSIBLE), forward_travel_mode(TRAVEL_MODE_INACCESSIBLE),
backward_travel_mode(TRAVEL_MODE_INACCESSIBLE) backward_travel_mode(TRAVEL_MODE_INACCESSIBLE)
{ } { }
@ -80,7 +80,7 @@ struct PhantomNode
unsigned packed_geometry_id; unsigned packed_geometry_id;
FixedPointCoordinate location; FixedPointCoordinate location;
unsigned short fwd_segment_position; unsigned short fwd_segment_position;
TravelMode travel_mode : 4; TravelMode forward_travel_mode : 4;
TravelMode backward_travel_mode : 4; TravelMode backward_travel_mode : 4;
int GetForwardWeightPlusOffset() const int GetForwardWeightPlusOffset() const

View File

@ -802,7 +802,7 @@ class StaticRTree
current_segment.packed_geometry_id, current_segment.packed_geometry_id,
foot_point_coordinate_on_segment, foot_point_coordinate_on_segment,
current_segment.fwd_segment_position, current_segment.fwd_segment_position,
current_segment.travel_mode, current_segment.forward_travel_mode,
current_segment.backward_travel_mode); current_segment.backward_travel_mode);
// Hack to fix rounding errors and wandering via nodes. // Hack to fix rounding errors and wandering via nodes.
@ -1080,7 +1080,7 @@ class StaticRTree
current_edge.packed_geometry_id, current_edge.packed_geometry_id,
nearest, nearest,
current_edge.fwd_segment_position, current_edge.fwd_segment_position,
current_edge.travel_mode, current_edge.forward_travel_mode,
current_edge.backward_travel_mode}; current_edge.backward_travel_mode};
nearest_edge = current_edge; nearest_edge = current_edge;
} }

View File

@ -46,7 +46,7 @@ void DescriptionFactory::SetStartSegment(const PhantomNode &source, const bool t
const EdgeWeight segment_duration = const EdgeWeight segment_duration =
(traversed_in_reverse ? source.reverse_weight : source.forward_weight); (traversed_in_reverse ? source.reverse_weight : source.forward_weight);
const TravelMode travel_mode = const TravelMode travel_mode =
(traversed_in_reverse ? source.backward_travel_mode : source.travel_mode); (traversed_in_reverse ? source.backward_travel_mode : source.forward_travel_mode);
AppendSegment(source.location, AppendSegment(source.location,
PathData(0, source.name_id, TurnInstruction::HeadOn, segment_duration, travel_mode)); PathData(0, source.name_id, TurnInstruction::HeadOn, segment_duration, travel_mode));
BOOST_ASSERT(path_description.back().duration == segment_duration); BOOST_ASSERT(path_description.back().duration == segment_duration);
@ -60,7 +60,7 @@ void DescriptionFactory::SetEndSegment(const PhantomNode &target,
const EdgeWeight segment_duration = const EdgeWeight segment_duration =
(traversed_in_reverse ? target.reverse_weight : target.forward_weight); (traversed_in_reverse ? target.reverse_weight : target.forward_weight);
const TravelMode travel_mode = const TravelMode travel_mode =
(traversed_in_reverse ? target.backward_travel_mode : target.travel_mode); (traversed_in_reverse ? target.backward_travel_mode : target.forward_travel_mode);
path_description.emplace_back(target.location, path_description.emplace_back(target.location,
target.name_id, target.name_id,
segment_duration, segment_duration,

View File

@ -45,7 +45,7 @@ struct ExtractionWay
nameID = INVALID_NAMEID; nameID = INVALID_NAMEID;
path.clear(); path.clear();
keyVals.Clear(); keyVals.Clear();
speed = -1; forward_speed = -1;
backward_speed = -1; backward_speed = -1;
duration = -1; duration = -1;
type = -1; type = -1;
@ -53,7 +53,7 @@ struct ExtractionWay
roundabout = false; roundabout = false;
isAccessRestricted = false; isAccessRestricted = false;
ignoreInGrid = false; ignoreInGrid = false;
travel_mode = TRAVEL_MODE_DEFAULT; forward_travel_mode = TRAVEL_MODE_DEFAULT;
backward_travel_mode = TRAVEL_MODE_DEFAULT; backward_travel_mode = TRAVEL_MODE_DEFAULT;
} }
@ -67,28 +67,28 @@ struct ExtractionWay
{ {
if (Directions::oneway == m ) if (Directions::oneway == m )
{ {
travel_mode = TRAVEL_MODE_DEFAULT; forward_travel_mode = TRAVEL_MODE_DEFAULT;
backward_travel_mode = TRAVEL_MODE_INACCESSIBLE; backward_travel_mode = TRAVEL_MODE_INACCESSIBLE;
} }
else if (Directions::opposite == m ) else if (Directions::opposite == m )
{ {
travel_mode = TRAVEL_MODE_INACCESSIBLE; forward_travel_mode = TRAVEL_MODE_INACCESSIBLE;
backward_travel_mode = TRAVEL_MODE_DEFAULT; backward_travel_mode = TRAVEL_MODE_DEFAULT;
} }
else if (Directions::bidirectional == m ) else if (Directions::bidirectional == m )
{ {
travel_mode = TRAVEL_MODE_DEFAULT; forward_travel_mode = TRAVEL_MODE_DEFAULT;
backward_travel_mode = TRAVEL_MODE_DEFAULT; backward_travel_mode = TRAVEL_MODE_DEFAULT;
} }
} }
inline const Directions get_direction() inline const Directions get_direction()
{ {
if (TRAVEL_MODE_INACCESSIBLE != travel_mode && TRAVEL_MODE_INACCESSIBLE != backward_travel_mode ) if (TRAVEL_MODE_INACCESSIBLE != forward_travel_mode && TRAVEL_MODE_INACCESSIBLE != backward_travel_mode )
{ {
return Directions::bidirectional; return Directions::bidirectional;
} }
else if (TRAVEL_MODE_INACCESSIBLE != travel_mode ) else if (TRAVEL_MODE_INACCESSIBLE != forward_travel_mode )
{ {
return Directions::oneway; return Directions::oneway;
} }
@ -102,14 +102,14 @@ struct ExtractionWay
} }
} }
inline void set_mode(const TravelMode m) { travel_mode = m; } inline void set_forward_mode(const TravelMode m) { forward_travel_mode = m; }
inline const TravelMode get_mode() { return travel_mode; } inline const TravelMode get_forward_mode() { return forward_travel_mode; }
inline void set_backward_mode(const TravelMode m) { backward_travel_mode = m; } inline void set_backward_mode(const TravelMode m) { backward_travel_mode = m; }
inline const TravelMode get_backward_mode() { return backward_travel_mode; } inline const TravelMode get_backward_mode() { return backward_travel_mode; }
unsigned id; unsigned id;
unsigned nameID; unsigned nameID;
double speed; double forward_speed;
double backward_speed; double backward_speed;
double duration; double duration;
std::string name; std::string name;
@ -120,7 +120,7 @@ struct ExtractionWay
bool ignoreInGrid; bool ignoreInGrid;
std::vector<NodeID> path; std::vector<NodeID> path;
HashTable<std::string, std::string> keyVals; HashTable<std::string, std::string> keyVals;
TravelMode travel_mode : 4; TravelMode forward_travel_mode : 4;
TravelMode backward_travel_mode : 4; TravelMode backward_travel_mode : 4;
}; };

View File

@ -63,7 +63,7 @@ bool ExtractorCallbacks::ProcessRestriction(const InputRestrictionContainer &res
/** warning: caller needs to take care of synchronization! */ /** warning: caller needs to take care of synchronization! */
void ExtractorCallbacks::ProcessWay(ExtractionWay &parsed_way) void ExtractorCallbacks::ProcessWay(ExtractionWay &parsed_way)
{ {
if ((0 >= parsed_way.speed) && (0 >= parsed_way.duration)) if ((0 >= parsed_way.forward_speed) && (0 >= parsed_way.duration))
{ // Only true if the way is specified by the speed profile { // Only true if the way is specified by the speed profile
return; return;
} }
@ -84,10 +84,10 @@ void ExtractorCallbacks::ProcessWay(ExtractionWay &parsed_way)
{ {
// TODO: iterate all way segments and set duration corresponding to the length of each // TODO: iterate all way segments and set duration corresponding to the length of each
// segment // segment
parsed_way.speed = parsed_way.duration / (parsed_way.path.size() - 1); parsed_way.forward_speed = parsed_way.duration / (parsed_way.path.size() - 1);
} }
if (std::numeric_limits<double>::epsilon() >= std::abs(-1. - parsed_way.speed)) if (std::numeric_limits<double>::epsilon() >= std::abs(-1. - parsed_way.forward_speed))
{ {
SimpleLogger().Write(logDEBUG) << "found way with bogus speed, id: " << parsed_way.id; SimpleLogger().Write(logDEBUG) << "found way with bogus speed, id: " << parsed_way.id;
return; return;
@ -106,20 +106,20 @@ void ExtractorCallbacks::ProcessWay(ExtractionWay &parsed_way)
parsed_way.nameID = string_map_iterator->second; parsed_way.nameID = string_map_iterator->second;
} }
if (TRAVEL_MODE_INACCESSIBLE == parsed_way.travel_mode) if (TRAVEL_MODE_INACCESSIBLE == parsed_way.forward_travel_mode)
{ {
std::reverse(parsed_way.path.begin(), parsed_way.path.end()); std::reverse(parsed_way.path.begin(), parsed_way.path.end());
parsed_way.travel_mode = parsed_way.backward_travel_mode; parsed_way.forward_travel_mode = parsed_way.backward_travel_mode;
parsed_way.backward_travel_mode = TRAVEL_MODE_INACCESSIBLE; parsed_way.backward_travel_mode = TRAVEL_MODE_INACCESSIBLE;
} }
const bool split_edge = const bool split_edge =
(parsed_way.speed>0) && (TRAVEL_MODE_INACCESSIBLE != parsed_way.travel_mode) && (parsed_way.forward_speed>0) && (TRAVEL_MODE_INACCESSIBLE != parsed_way.forward_travel_mode) &&
(parsed_way.backward_speed>0) && (TRAVEL_MODE_INACCESSIBLE != parsed_way.backward_travel_mode) && (parsed_way.backward_speed>0) && (TRAVEL_MODE_INACCESSIBLE != parsed_way.backward_travel_mode) &&
((parsed_way.speed != parsed_way.backward_speed) || ((parsed_way.forward_speed != parsed_way.backward_speed) ||
(parsed_way.travel_mode != parsed_way.backward_travel_mode)); (parsed_way.forward_travel_mode != parsed_way.backward_travel_mode));
BOOST_ASSERT(parsed_way.travel_mode>0); BOOST_ASSERT(parsed_way.forward_travel_mode>0);
for (unsigned n = 0; n < (parsed_way.path.size() - 1); ++n) for (unsigned n = 0; n < (parsed_way.path.size() - 1); ++n)
{ {
external_memory.all_edges_list.push_back(InternalExtractorEdge( external_memory.all_edges_list.push_back(InternalExtractorEdge(
@ -128,13 +128,13 @@ void ExtractorCallbacks::ProcessWay(ExtractionWay &parsed_way)
parsed_way.type, parsed_way.type,
((split_edge || TRAVEL_MODE_INACCESSIBLE == parsed_way.backward_travel_mode) ? ExtractionWay::oneway ((split_edge || TRAVEL_MODE_INACCESSIBLE == parsed_way.backward_travel_mode) ? ExtractionWay::oneway
: ExtractionWay::bidirectional), : ExtractionWay::bidirectional),
parsed_way.speed, parsed_way.forward_speed,
parsed_way.nameID, parsed_way.nameID,
parsed_way.roundabout, parsed_way.roundabout,
parsed_way.ignoreInGrid, parsed_way.ignoreInGrid,
(0 < parsed_way.duration), (0 < parsed_way.duration),
parsed_way.isAccessRestricted, parsed_way.isAccessRestricted,
parsed_way.travel_mode, parsed_way.forward_travel_mode,
split_edge)); split_edge));
external_memory.used_node_id_list.push_back(parsed_way.path[n]); external_memory.used_node_id_list.push_back(parsed_way.path[n]);
} }

View File

@ -76,7 +76,7 @@ void ScriptingEnvironment::initLuaState(lua_State* lua_state)
// .def(luabind::constructor<>()) // .def(luabind::constructor<>())
.def_readonly("id", &ExtractionWay::id) .def_readonly("id", &ExtractionWay::id)
.def_readwrite("name", &ExtractionWay::name) .def_readwrite("name", &ExtractionWay::name)
.def_readwrite("speed", &ExtractionWay::speed) .def_readwrite("forward_speed", &ExtractionWay::forward_speed)
.def_readwrite("backward_speed", &ExtractionWay::backward_speed) .def_readwrite("backward_speed", &ExtractionWay::backward_speed)
.def_readwrite("duration", &ExtractionWay::duration) .def_readwrite("duration", &ExtractionWay::duration)
.def_readwrite("type", &ExtractionWay::type) .def_readwrite("type", &ExtractionWay::type)
@ -86,7 +86,7 @@ void ScriptingEnvironment::initLuaState(lua_State* lua_state)
.def_readwrite("ignore_in_grid", &ExtractionWay::ignoreInGrid) .def_readwrite("ignore_in_grid", &ExtractionWay::ignoreInGrid)
.def_readwrite("tags", &ExtractionWay::keyVals) .def_readwrite("tags", &ExtractionWay::keyVals)
.property("direction", &ExtractionWay::get_direction, &ExtractionWay::set_direction) .property("direction", &ExtractionWay::get_direction, &ExtractionWay::set_direction)
.property("mode", &ExtractionWay::get_mode, &ExtractionWay::set_mode) .property("forward_mode", &ExtractionWay::get_forward_mode, &ExtractionWay::set_forward_mode)
.property("backward_mode", &ExtractionWay::get_backward_mode, &ExtractionWay::set_backward_mode) .property("backward_mode", &ExtractionWay::get_backward_mode, &ExtractionWay::set_backward_mode)
.enum_("constants")[ .enum_("constants")[
luabind::value("notSure", 0), luabind::value("notSure", 0),

View File

@ -306,7 +306,7 @@ template <class DataFacadeT> class BasicRoutingInterface
phantom_node_pair.target_phantom.name_id, phantom_node_pair.target_phantom.name_id,
TurnInstruction::NoTurn, TurnInstruction::NoTurn,
0, 0,
phantom_node_pair.target_phantom.travel_mode}); phantom_node_pair.target_phantom.forward_travel_mode});
} }
} }

View File

@ -223,42 +223,42 @@ function way_function (way)
-- speed -- speed
if route_speeds[route] then if route_speeds[route] then
-- ferries (doesn't cover routes tagged using relations) -- ferries (doesn't cover routes tagged using relations)
way.mode = mode_ferry way.forward_mode = mode_ferry
way.backward_mode = mode_ferry way.backward_mode = mode_ferry
way.ignore_in_grid = true way.ignore_in_grid = true
if durationIsValid(duration) then if durationIsValid(duration) then
way.duration = math.max( 1, parseDuration(duration) ) way.duration = math.max( 1, parseDuration(duration) )
else else
way.speed = route_speeds[route] way.forward_speed = route_speeds[route]
way.backward_speed = route_speeds[route] way.backward_speed = route_speeds[route]
end end
elseif railway and platform_speeds[railway] then elseif railway and platform_speeds[railway] then
-- railway platforms (old tagging scheme) -- railway platforms (old tagging scheme)
way.speed = platform_speeds[railway] way.forward_speed = platform_speeds[railway]
way.backward_speed = platform_speeds[railway] way.backward_speed = platform_speeds[railway]
elseif platform_speeds[public_transport] then elseif platform_speeds[public_transport] then
-- public_transport platforms (new tagging platform) -- public_transport platforms (new tagging platform)
way.speed = platform_speeds[public_transport] way.forward_speed = platform_speeds[public_transport]
way.backward_speed = platform_speeds[public_transport] way.backward_speed = platform_speeds[public_transport]
elseif railway and railway_speeds[railway] then elseif railway and railway_speeds[railway] then
way.mode = mode_train way.forward_mode = mode_train
way.backward_mode = mode_train way.backward_mode = mode_train
-- railways -- railways
if access and access_tag_whitelist[access] then if access and access_tag_whitelist[access] then
way.speed = railway_speeds[railway] way.forward_speed = railway_speeds[railway]
way.backward_speed = railway_speeds[railway] way.backward_speed = railway_speeds[railway]
end end
elseif amenity and amenity_speeds[amenity] then elseif amenity and amenity_speeds[amenity] then
-- parking areas -- parking areas
way.speed = amenity_speeds[amenity] way.forward_speed = amenity_speeds[amenity]
way.backward_speed = amenity_speeds[amenity] way.backward_speed = amenity_speeds[amenity]
elseif bicycle_speeds[highway] then elseif bicycle_speeds[highway] then
-- regular ways -- regular ways
way.speed = bicycle_speeds[highway] way.forward_speed = bicycle_speeds[highway]
way.backward_speed = bicycle_speeds[highway] way.backward_speed = bicycle_speeds[highway]
elseif access and access_tag_whitelist[access] then elseif access and access_tag_whitelist[access] then
-- unknown way, but valid access tag -- unknown way, but valid access tag
way.speed = default_speed way.forward_speed = default_speed
way.backward_speed = default_speed way.backward_speed = default_speed
else else
-- biking not allowed, maybe we can push our bike? -- biking not allowed, maybe we can push our bike?
@ -266,25 +266,25 @@ function way_function (way)
if foot ~= 'no' and junction ~= "roundabout" then if foot ~= 'no' and junction ~= "roundabout" then
if pedestrian_speeds[highway] then if pedestrian_speeds[highway] then
-- pedestrian-only ways and areas -- pedestrian-only ways and areas
way.speed = pedestrian_speeds[highway] way.forward_speed = pedestrian_speeds[highway]
way.mode = mode_pushing way.forward_mode = mode_pushing
way.backward_mode = mode_pushing way.backward_mode = mode_pushing
elseif man_made and man_made_speeds[man_made] then elseif man_made and man_made_speeds[man_made] then
-- man made structures -- man made structures
way.speed = man_made_speeds[man_made] way.forward_speed = man_made_speeds[man_made]
way.mode = mode_pushing way.forward_mode = mode_pushing
way.backward_mode = mode_pushing way.backward_mode = mode_pushing
elseif foot == 'yes' then elseif foot == 'yes' then
way.speed = walking_speed way.forward_speed = walking_speed
way.mode = mode_pushing way.forward_mode = mode_pushing
way.backward_mode = mode_pushing way.backward_mode = mode_pushing
elseif foot_forward == 'yes' then elseif foot_forward == 'yes' then
way.speed = walking_speed way.forward_speed = walking_speed
way.mode = mode_pushing way.forward_mode = mode_pushing
way.backward_mode = 0 way.backward_mode = 0
elseif foot_backward == 'yes' then elseif foot_backward == 'yes' then
way.speed = walking_speed way.forward_speed = walking_speed
way.mode = 0 way.forward_mode = 0
way.backward_mode = mode_pushing way.backward_mode = mode_pushing
end end
end end
@ -301,28 +301,28 @@ function way_function (way)
elseif onewayClass == "no" or onewayClass == "0" or onewayClass == "false" then elseif onewayClass == "no" or onewayClass == "0" or onewayClass == "false" then
-- prevent implied oneway -- prevent implied oneway
elseif onewayClass == "-1" then elseif onewayClass == "-1" then
way.mode = 0 way.forward_mode = 0
elseif oneway == "no" or oneway == "0" or oneway == "false" then elseif oneway == "no" or oneway == "0" or oneway == "false" then
-- prevent implied oneway -- prevent implied oneway
elseif cycleway and string.find(cycleway, "opposite") == 1 then elseif cycleway and string.find(cycleway, "opposite") == 1 then
if impliedOneway then if impliedOneway then
way.mode = 0 way.forward_mode = 0
way.backward_mode = mode_normal way.backward_mode = mode_normal
end end
elseif cycleway_left and cycleway_tags[cycleway_left] and cycleway_right and cycleway_tags[cycleway_right] then elseif cycleway_left and cycleway_tags[cycleway_left] and cycleway_right and cycleway_tags[cycleway_right] then
-- prevent implied -- prevent implied
elseif cycleway_left and cycleway_tags[cycleway_left] then elseif cycleway_left and cycleway_tags[cycleway_left] then
if impliedOneway then if impliedOneway then
way.mode = 0 way.forward_mode = 0
way.backward_mode = mode_normal way.backward_mode = mode_normal
end end
elseif cycleway_right and cycleway_tags[cycleway_right] then elseif cycleway_right and cycleway_tags[cycleway_right] then
if impliedOneway then if impliedOneway then
way.mode = mode_normal way.forward_mode = mode_normal
way.backward_mode = 0 way.backward_mode = 0
end end
elseif oneway == "-1" then elseif oneway == "-1" then
way.mode = 0 way.forward_mode = 0
elseif oneway == "yes" or oneway == "1" or oneway == "true" or impliedOneway then elseif oneway == "yes" or oneway == "1" or oneway == "true" or impliedOneway then
way.backward_mode = 0 way.backward_mode = 0
end end
@ -333,27 +333,27 @@ function way_function (way)
if way.backward_mode == 0 then if way.backward_mode == 0 then
way.backward_speed = walking_speed way.backward_speed = walking_speed
way.backward_mode = mode_pushing way.backward_mode = mode_pushing
elseif way.mode == 0 then elseif way.forward_mode == 0 then
way.speed = walking_speed way.forward_speed = walking_speed
way.mode = mode_pushing way.forward_mode = mode_pushing
end end
end end
end end
-- cycleways -- cycleways
if cycleway and cycleway_tags[cycleway] then if cycleway and cycleway_tags[cycleway] then
way.speed = bicycle_speeds["cycleway"] way.forward_speed = bicycle_speeds["cycleway"]
elseif cycleway_left and cycleway_tags[cycleway_left] then elseif cycleway_left and cycleway_tags[cycleway_left] then
way.speed = bicycle_speeds["cycleway"] way.forward_speed = bicycle_speeds["cycleway"]
elseif cycleway_right and cycleway_tags[cycleway_right] then elseif cycleway_right and cycleway_tags[cycleway_right] then
way.speed = bicycle_speeds["cycleway"] way.forward_speed = bicycle_speeds["cycleway"]
end end
-- dismount -- dismount
if bicycle == "dismount" then if bicycle == "dismount" then
way.mode = mode_pushing way.forward_mode = mode_pushing
way.backward_mode = mode_pushing way.backward_mode = mode_pushing
way.speed = walking_speed way.forward_speed = walking_speed
way.backward_speed = walking_speed way.backward_speed = walking_speed
end end
@ -361,8 +361,8 @@ function way_function (way)
if surface then if surface then
surface_speed = surface_speeds[surface] surface_speed = surface_speeds[surface]
if surface_speed then if surface_speed then
if way.speed > 0 then if way.forward_speed > 0 then
way.speed = surface_speed way.forward_speed = surface_speed
end end
if way.backward_speed > 0 then if way.backward_speed > 0 then
way.backward_speed = surface_speed way.backward_speed = surface_speed

20
profiles/car.lua Normal file → Executable file
View File

@ -170,7 +170,7 @@ function way_function (way)
way.duration = max( parseDuration(duration), 1 ); way.duration = max( parseDuration(duration), 1 );
end end
way.direction = Way.bidirectional way.direction = Way.bidirectional
way.speed = route_speed way.forward_speed = route_speed
end end
-- leave early of this way is not accessible -- leave early of this way is not accessible
@ -178,30 +178,30 @@ function way_function (way)
return return
end end
if way.speed == -1 then if way.forward_speed == -1 then
local highway_speed = speed_profile[highway] local highway_speed = speed_profile[highway]
local max_speed = parse_maxspeed( way.tags:Find("maxspeed") ) local max_speed = parse_maxspeed( way.tags:Find("maxspeed") )
-- Set the avg speed on the way if it is accessible by road class -- Set the avg speed on the way if it is accessible by road class
if highway_speed then if highway_speed then
if max_speed > highway_speed then if max_speed > highway_speed then
way.speed = max_speed way.forward_speed = max_speed
-- max_speed = math.huge -- max_speed = math.huge
else else
way.speed = highway_speed way.forward_speed = highway_speed
end end
else else
-- Set the avg speed on ways that are marked accessible -- Set the avg speed on ways that are marked accessible
if access_tag_whitelist[access] then if access_tag_whitelist[access] then
way.speed = speed_profile["default"] way.forward_speed = speed_profile["default"]
end end
end end
if 0 == max_speed then if 0 == max_speed then
max_speed = math.huge max_speed = math.huge
end end
way.speed = min(way.speed, max_speed) way.forward_speed = min(way.forward_speed, max_speed)
end end
if -1 == way.speed then if -1 == way.forward_speed then
return return
end end
@ -256,9 +256,9 @@ function way_function (way)
local maxspeed_backward = parse_maxspeed(way.tags:Find( "maxspeed:backward")) local maxspeed_backward = parse_maxspeed(way.tags:Find( "maxspeed:backward"))
if maxspeed_forward > 0 then if maxspeed_forward > 0 then
if Way.bidirectional == way.direction then if Way.bidirectional == way.direction then
way.backward_speed = way.speed way.backward_speed = way.forward_speed
end end
way.speed = maxspeed_forward way.forward_speed = maxspeed_forward
end end
if maxspeed_backward > 0 then if maxspeed_backward > 0 then
way.backward_speed = maxspeed_backward way.backward_speed = maxspeed_backward
@ -271,7 +271,7 @@ function way_function (way)
way.type = 1 way.type = 1
-- scale speeds to get better avg driving times -- scale speeds to get better avg driving times
way.speed = way.speed * speed_reduction way.forward_speed = way.forward_speed * speed_reduction
if maxspeed_backward > 0 then if maxspeed_backward > 0 then
way.backward_speed = way.backward_speed*speed_reduction way.backward_speed = way.backward_speed*speed_reduction
end end

View File

@ -65,11 +65,11 @@ function way_function (way)
local cursor = assert( sql_con:execute(sql_query) ) -- execute querty local cursor = assert( sql_con:execute(sql_query) ) -- execute querty
local row = cursor:fetch( {}, "a" ) -- fetch first (and only) row local row = cursor:fetch( {}, "a" ) -- fetch first (and only) row
way.speed = 20.0 -- default speed way.forward_speed = 20.0 -- default speed
if row then if row then
local val = tonumber(row.val) -- read 'val' from row local val = tonumber(row.val) -- read 'val' from row
if val > 10 then if val > 10 then
way.speed = way.speed / math.log10( val ) -- reduce speed by amount of industry close by way.forward_speed = way.forward_speed / math.log10( val ) -- reduce speed by amount of industry close by
end end
end end
cursor:close() -- done with this query cursor:close() -- done with this query

View File

@ -161,23 +161,23 @@ function way_function (way)
if durationIsValid(duration) then if durationIsValid(duration) then
way.duration = math.max( 1, parseDuration(duration) ) way.duration = math.max( 1, parseDuration(duration) )
else else
way.speed = route_speeds[route] way.forward_speed = route_speeds[route]
end end
elseif railway and platform_speeds[railway] then elseif railway and platform_speeds[railway] then
-- railway platforms (old tagging scheme) -- railway platforms (old tagging scheme)
way.speed = platform_speeds[railway] way.forward_speed = platform_speeds[railway]
elseif platform_speeds[public_transport] then elseif platform_speeds[public_transport] then
-- public_transport platforms (new tagging platform) -- public_transport platforms (new tagging platform)
way.speed = platform_speeds[public_transport] way.forward_speed = platform_speeds[public_transport]
elseif amenity and amenity_speeds[amenity] then elseif amenity and amenity_speeds[amenity] then
-- parking areas -- parking areas
way.speed = amenity_speeds[amenity] way.forward_speed = amenity_speeds[amenity]
elseif speeds[highway] then elseif speeds[highway] then
-- regular ways -- regular ways
way.speed = speeds[highway] way.forward_speed = speeds[highway]
elseif access and access_tag_whitelist[access] then elseif access and access_tag_whitelist[access] then
-- unknown way, but valid access tag -- unknown way, but valid access tag
way.speed = walking_speed way.forward_speed = walking_speed
end end
-- oneway -- oneway
@ -195,7 +195,7 @@ function way_function (way)
if surface then if surface then
surface_speed = surface_speeds[surface] surface_speed = surface_speeds[surface]
if surface_speed then if surface_speed then
way.speed = math.min(way.speed, surface_speed) way.forward_speed = math.min(way.forward_speed, surface_speed)
way.backward_speed = math.min(way.backward_speed, surface_speed) way.backward_speed = math.min(way.backward_speed, surface_speed)
end end
end end

View File

@ -4,9 +4,9 @@ module "MaxSpeed"
function limit(way,max,maxf,maxb) function limit(way,max,maxf,maxb)
if maxf and maxf>0 then if maxf and maxf>0 then
way.speed = math.min(way.speed, maxf) way.forward_speed = math.min(way.forward_speed, maxf)
elseif max and max>0 then elseif max and max>0 then
way.speed = math.min(way.speed, max) way.forward_speed = math.min(way.forward_speed, max)
end end
if maxb and maxb>0 then if maxb and maxb>0 then

View File

@ -70,22 +70,22 @@ function way_function (way)
if route ~= nil and durationIsValid(duration) then if route ~= nil and durationIsValid(duration) then
way.duration = math.max( 1, parseDuration(duration) ) way.duration = math.max( 1, parseDuration(duration) )
way.mode = 2 way.forward_mode = 2
way.backward_mode = 2 way.backward_mode = 2
else else
local speed_forw = speed_profile[highway] or speed_profile['default'] local speed_forw = speed_profile[highway] or speed_profile['default']
local speed_back = speed_forw local speed_back = speed_forw
if highway == "river" then if highway == "river" then
local temp_speed = speed_forw; local temp_speed = speed_forw;
way.mode = 3 way.forward_mode = 3
way.backward_mode = 4 way.backward_mode = 4
speed_forw = temp_speed*1.5 speed_forw = temp_speed*1.5
speed_back = temp_speed/1.5 speed_back = temp_speed/1.5
elseif highway == "steps" then elseif highway == "steps" then
way.mode = 5 way.forward_mode = 5
way.backward_mode = 6 way.backward_mode = 6
end end
if maxspeed_forward ~= nil and maxspeed_forward > 0 then if maxspeed_forward ~= nil and maxspeed_forward > 0 then
speed_forw = maxspeed_forward speed_forw = maxspeed_forward
@ -103,14 +103,14 @@ function way_function (way)
end end
end end
way.speed = speed_forw way.forward_speed = speed_forw
way.backward_speed = speed_back way.backward_speed = speed_back
end end
if oneway == "no" or oneway == "0" or oneway == "false" then if oneway == "no" or oneway == "0" or oneway == "false" then
-- nothing to do -- nothing to do
elseif oneway == "-1" then elseif oneway == "-1" then
way.mode = 0 way.forward_mode = 0
elseif oneway == "yes" or oneway == "1" or oneway == "true" or junction == "roundabout" then elseif oneway == "yes" or oneway == "1" or oneway == "true" or junction == "roundabout" then
way.backward_mode = 0 way.backward_mode = 0
end end