2014-11-25 10:30:43 -05:00
|
|
|
#ifndef RAW_ROUTE_DATA_H
|
|
|
|
#define RAW_ROUTE_DATA_H
|
2011-07-07 13:03:32 -04:00
|
|
|
|
2016-03-01 16:30:31 -05:00
|
|
|
#include "extractor/guidance/turn_instruction.hpp"
|
2016-04-26 07:27:40 -04:00
|
|
|
#include "extractor/travel_mode.hpp"
|
2016-05-27 15:05:04 -04:00
|
|
|
#include "engine/phantom_node.hpp"
|
2016-01-02 11:13:44 -05:00
|
|
|
#include "osrm/coordinate.hpp"
|
2016-08-17 03:49:19 -04:00
|
|
|
#include "util/guidance/turn_bearing.hpp"
|
2016-06-15 08:38:24 -04:00
|
|
|
#include "util/guidance/turn_lanes.hpp"
|
|
|
|
#include "util/typedefs.hpp"
|
2013-12-17 11:59:44 -05:00
|
|
|
|
2013-08-14 07:41:23 -04:00
|
|
|
#include <vector>
|
|
|
|
|
2016-01-05 10:51:13 -05:00
|
|
|
namespace osrm
|
|
|
|
{
|
|
|
|
namespace engine
|
|
|
|
{
|
|
|
|
|
2016-02-24 04:29:23 -05:00
|
|
|
const constexpr unsigned INVALID_EXIT_NR = 0;
|
|
|
|
|
2014-05-07 12:39:16 -04:00
|
|
|
struct PathData
|
|
|
|
{
|
2016-01-28 10:28:44 -05:00
|
|
|
// id of via node of the turn
|
|
|
|
NodeID turn_via_node;
|
|
|
|
// name of the street that leads to the turn
|
2013-12-08 12:33:53 -05:00
|
|
|
unsigned name_id;
|
2016-01-28 10:28:44 -05:00
|
|
|
// duration that is traveled on the segment until the turn is reached
|
|
|
|
EdgeWeight duration_until_turn;
|
|
|
|
// instruction to execute at the turn
|
2016-03-01 16:30:31 -05:00
|
|
|
extractor::guidance::TurnInstruction turn_instruction;
|
2016-06-15 08:38:24 -04:00
|
|
|
// turn lane data
|
2016-10-04 15:28:13 -04:00
|
|
|
util::guidance::LaneTupleIdPair lane_data;
|
2016-01-28 10:28:44 -05:00
|
|
|
// travel mode of the street that leads to the turn
|
2016-01-05 10:51:13 -05:00
|
|
|
extractor::TravelMode travel_mode : 4;
|
2016-04-26 07:27:40 -04:00
|
|
|
// entry class of the turn, indicating possibility of turns
|
|
|
|
EntryClassID entry_classid;
|
2016-07-20 08:59:16 -04:00
|
|
|
|
|
|
|
// Source of the speed value on this road segment
|
|
|
|
DatasourceID datasource_id;
|
2016-08-17 03:49:19 -04:00
|
|
|
|
|
|
|
// bearing (as seen from the intersection) pre-turn
|
|
|
|
util::guidance::TurnBearing pre_turn_bearing;
|
|
|
|
// bearing (as seen from the intersection) post-turn
|
|
|
|
util::guidance::TurnBearing post_turn_bearing;
|
2012-08-27 11:40:59 -04:00
|
|
|
};
|
|
|
|
|
2014-11-25 10:30:43 -05:00
|
|
|
struct InternalRouteResult
|
2014-05-07 12:39:16 -04:00
|
|
|
{
|
|
|
|
std::vector<std::vector<PathData>> unpacked_path_segments;
|
|
|
|
std::vector<PathData> unpacked_alternative;
|
|
|
|
std::vector<PhantomNodes> segment_end_coordinates;
|
2014-05-27 10:54:10 -04:00
|
|
|
std::vector<bool> source_traversed_in_reverse;
|
|
|
|
std::vector<bool> target_traversed_in_reverse;
|
|
|
|
std::vector<bool> alt_source_traversed_in_reverse;
|
|
|
|
std::vector<bool> alt_target_traversed_in_reverse;
|
2014-05-07 12:39:16 -04:00
|
|
|
int shortest_path_length;
|
|
|
|
int alternative_path_length;
|
2014-03-28 12:13:00 -04:00
|
|
|
|
2016-01-04 04:19:25 -05:00
|
|
|
bool is_valid() const { return INVALID_EDGE_WEIGHT != shortest_path_length; }
|
|
|
|
|
|
|
|
bool has_alternative() const { return INVALID_EDGE_WEIGHT != alternative_path_length; }
|
|
|
|
|
2014-08-11 14:29:15 -04:00
|
|
|
bool is_via_leg(const std::size_t leg) const
|
|
|
|
{
|
|
|
|
return (leg != unpacked_path_segments.size() - 1);
|
|
|
|
}
|
|
|
|
|
2015-02-19 03:19:51 -05:00
|
|
|
InternalRouteResult()
|
|
|
|
: shortest_path_length(INVALID_EDGE_WEIGHT), alternative_path_length(INVALID_EDGE_WEIGHT)
|
2014-05-07 12:39:16 -04:00
|
|
|
{
|
|
|
|
}
|
2011-07-07 13:03:32 -04:00
|
|
|
};
|
2016-01-05 10:51:13 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-11-25 10:30:43 -05:00
|
|
|
#endif // RAW_ROUTE_DATA_H
|