osrm-backend/include/engine/guidance/post_processing.hpp

56 lines
2.4 KiB
C++
Raw Normal View History

2016-02-24 04:29:23 -05:00
#ifndef ENGINE_GUIDANCE_POST_PROCESSING_HPP
#define ENGINE_GUIDANCE_POST_PROCESSING_HPP
2018-02-09 13:32:09 -05:00
#include "engine/datafacade/datafacade_base.hpp"
#include "engine/guidance/leg_geometry.hpp"
2016-05-27 15:05:04 -04:00
#include "engine/guidance/route_step.hpp"
#include "engine/phantom_node.hpp"
2016-02-24 04:29:23 -05:00
#include <vector>
namespace osrm::engine::guidance
2016-02-24 04:29:23 -05:00
{
// passed as none-reference to modify in-place and move out again
[[nodiscard]] std::vector<RouteStep> handleRoundabouts(std::vector<RouteStep> steps);
2016-02-24 04:29:23 -05:00
2016-03-29 07:45:48 -04:00
// trim initial/final segment of very short length.
// This function uses in/out parameter passing to modify both steps and geometry in place.
// We use this method since both steps and geometry are closely coupled logically but
// are not coupled in the same way in the background. To avoid the additional overhead
// of introducing intermediate structions, we resolve to the in/out scheme at this point.
void trimShortSegments(std::vector<RouteStep> &steps, LegGeometry &geometry);
// assign relative locations to depart/arrive instructions
[[nodiscard]] std::vector<RouteStep> assignRelativeLocations(std::vector<RouteStep> steps,
const LegGeometry &geometry,
const PhantomNode &source_node,
const PhantomNode &target_node);
2016-03-29 07:45:48 -04:00
2016-05-30 11:42:28 -04:00
// collapse suppressed instructions remaining into intersections array
[[nodiscard]] std::vector<RouteStep> buildIntersections(std::vector<RouteStep> steps);
2016-05-30 11:42:28 -04:00
// postProcess will break the connection between the leg geometry
// for which a segment is supposed to represent exactly the coordinates
// between routing maneuvers and the route steps itself.
// If required, we can get both in sync again using this function.
// Move in LegGeometry for modification in place.
[[nodiscard]] LegGeometry resyncGeometry(LegGeometry leg_geometry,
const std::vector<RouteStep> &steps);
2018-02-09 13:32:09 -05:00
/**
* Apply maneuver override relations to the selected route.
* Should be called before any other post-processing is performed
* to ensure that all sequences of edge-based-nodes are still in the
* steps list.
*
* @param steps the steps of the route
*/
void applyOverrides(const datafacade::BaseDataFacade &facade,
std::vector<RouteStep> &steps,
const LegGeometry &geometry);
2022-12-20 12:00:11 -05:00
} // namespace osrm::engine::guidance
2016-02-24 04:29:23 -05:00
#endif // ENGINE_GUIDANCE_POST_PROCESSING_HPP