osrm-backend/include/engine/guidance/leg_geometry.hpp
2022-12-20 18:00:11 +01:00

66 lines
1.6 KiB
C++

#ifndef ENGINE_GUIDANCE_LEG_GEOMETRY_HPP
#define ENGINE_GUIDANCE_LEG_GEOMETRY_HPP
#include "util/coordinate.hpp"
#include "util/integer_range.hpp"
#include "util/typedefs.hpp"
#include <boost/assert.hpp>
#include <cstddef>
#include <cstdlib>
#include <vector>
namespace osrm::engine::guidance
{
// locations 0---1---2-...-n-1---n
// turns s x y t
// segment | 0 | 1 | 2 | sentinel
// offsets 0 2 n-1 n
struct LegGeometry
{
std::vector<util::Coordinate> locations;
// segment_offset[i] .. segment_offset[i+1] (inclusive)
// contains the geometry of segment i
std::vector<std::size_t> segment_offsets;
// length of the segment in meters
std::vector<double> segment_distances;
// original OSM node IDs for each coordinate
std::vector<NodeID> node_ids;
// Per-coordinate metadata
struct Annotation
{
double distance; // distance in meters
// Total duration of a segment, in seconds, NOT including
// the turn penalty if the segment preceeds a turn
double duration;
double weight; // weight value, NOT including the turn weight
DatasourceID datasource;
};
std::vector<Annotation> annotations;
std::size_t FrontIndex(std::size_t segment_index) const
{
return segment_offsets[segment_index];
}
std::size_t BackIndex(std::size_t segment_index) const
{
return segment_offsets[segment_index + 1];
}
std::size_t GetNumberOfSegments() const
{
BOOST_ASSERT(segment_offsets.size() > 0);
return segment_offsets.size() - 1;
}
};
} // namespace osrm::engine::guidance
#endif