first cut at porting travel mode, some tests fail
This commit is contained in:
@@ -53,6 +53,8 @@ struct ExtractionWay
|
||||
roundabout = false;
|
||||
isAccessRestricted = false;
|
||||
ignoreInGrid = false;
|
||||
travel_mode = 0;
|
||||
backward_travel_mode = 0;
|
||||
}
|
||||
|
||||
enum Directions
|
||||
@@ -60,6 +62,22 @@ struct ExtractionWay
|
||||
oneway,
|
||||
bidirectional,
|
||||
opposite };
|
||||
|
||||
inline bool IsBidirectional() { return travel_mode!=0 && backward_travel_mode!=0; }
|
||||
inline bool IsOneway() { return travel_mode!=0 && backward_travel_mode==0; }
|
||||
inline bool IsOpposite() { return travel_mode==0 && backward_travel_mode!=0; }
|
||||
inline bool HasDiffDirections() { return (travel_mode != backward_travel_mode) || (speed != backward_speed); }
|
||||
inline Directions Direction()
|
||||
{
|
||||
if( IsOneway() ) {
|
||||
return ExtractionWay::oneway;
|
||||
}
|
||||
if( IsOpposite() ) {
|
||||
return ExtractionWay::opposite;
|
||||
}
|
||||
return ExtractionWay::bidirectional;
|
||||
}
|
||||
|
||||
unsigned id;
|
||||
unsigned nameID;
|
||||
double speed;
|
||||
@@ -74,6 +92,8 @@ struct ExtractionWay
|
||||
bool ignoreInGrid;
|
||||
std::vector<NodeID> path;
|
||||
HashTable<std::string, std::string> keyVals;
|
||||
TravelMode travel_mode;
|
||||
TravelMode backward_travel_mode;
|
||||
};
|
||||
|
||||
#endif // EXTRACTION_WAY_H
|
||||
|
||||
@@ -112,8 +112,10 @@ void ExtractorCallbacks::ProcessWay(ExtractionWay &parsed_way)
|
||||
parsed_way.direction = ExtractionWay::oneway;
|
||||
}
|
||||
|
||||
const bool split_edge =
|
||||
(parsed_way.backward_speed > 0) && (parsed_way.speed != parsed_way.backward_speed);
|
||||
bool split_edge = parsed_way.IsBidirectional() && parsed_way.HasDiffDirections();
|
||||
|
||||
//const bool split_edge =
|
||||
// (parsed_way.backward_speed > 0) && (parsed_way.speed != parsed_way.backward_speed);
|
||||
|
||||
for (unsigned n = 0; n < (parsed_way.path.size() - 1); ++n)
|
||||
{
|
||||
@@ -128,7 +130,7 @@ void ExtractorCallbacks::ProcessWay(ExtractionWay &parsed_way)
|
||||
parsed_way.ignoreInGrid,
|
||||
(0 < parsed_way.duration),
|
||||
parsed_way.isAccessRestricted,
|
||||
false,
|
||||
parsed_way.travel_mode,
|
||||
split_edge));
|
||||
external_memory.used_node_id_list.push_back(parsed_way.path[n]);
|
||||
}
|
||||
@@ -158,7 +160,7 @@ void ExtractorCallbacks::ProcessWay(ExtractionWay &parsed_way)
|
||||
parsed_way.ignoreInGrid,
|
||||
(0 < parsed_way.duration),
|
||||
parsed_way.isAccessRestricted,
|
||||
(ExtractionWay::oneway == parsed_way.direction),
|
||||
parsed_way.backward_travel_mode,
|
||||
split_edge));
|
||||
}
|
||||
external_memory.way_start_end_id_list.push_back(
|
||||
|
||||
@@ -65,12 +65,12 @@ struct InternalExtractorEdge
|
||||
// necessary static util functions for stxxl's sorting
|
||||
static InternalExtractorEdge min_value()
|
||||
{
|
||||
return InternalExtractorEdge(0, 0, 0, 0, 0, 0, false, false, false, false, false, false);
|
||||
return InternalExtractorEdge(0, 0, 0, 0, 0, 0, false, false, false, false, 0, false);
|
||||
}
|
||||
static InternalExtractorEdge max_value()
|
||||
{
|
||||
return InternalExtractorEdge(
|
||||
SPECIAL_NODEID, SPECIAL_NODEID, 0, 0, 0, 0, false, false, false, false, false, false);
|
||||
SPECIAL_NODEID, SPECIAL_NODEID, 0, 0, 0, 0, false, false, false, false, 0, false);
|
||||
}
|
||||
|
||||
NodeID start;
|
||||
|
||||
@@ -86,6 +86,8 @@ void ScriptingEnvironment::initLuaState(lua_State* lua_state)
|
||||
.def_readwrite("ignore_in_grid", &ExtractionWay::ignoreInGrid)
|
||||
.def_readwrite("tags", &ExtractionWay::keyVals)
|
||||
.def_readwrite("direction", &ExtractionWay::direction)
|
||||
.def_readwrite("mode", &ExtractionWay::travel_mode)
|
||||
.def_readwrite("backward_mode", &ExtractionWay::backward_travel_mode)
|
||||
.enum_("constants")[
|
||||
luabind::value("notSure", 0),
|
||||
luabind::value("oneway", 1),
|
||||
|
||||
Reference in New Issue
Block a user