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

66 lines
1.4 KiB
C++
Raw Normal View History

2016-01-28 10:28:44 -05:00
#ifndef ENGINE_GUIDANCE_LEG_GEOMETRY_HPP
#define ENGINE_GUIDANCE_LEG_GEOMETRY_HPP
#include "util/coordinate.hpp"
#include "util/integer_range.hpp"
2016-05-18 16:09:14 -04:00
#include "util/typedefs.hpp"
2016-01-28 10:28:44 -05:00
#include <boost/assert.hpp>
#include <cstddef>
2016-01-28 10:28:44 -05:00
#include <cstdlib>
2016-05-27 15:05:04 -04:00
#include <vector>
2016-01-28 10:28:44 -05:00
namespace osrm
{
namespace engine
{
namespace guidance
{
// locations 0---1---2-...-n-1---n
// turns s x y t
2016-03-15 12:07:49 -04:00
// segment | 0 | 1 | 2 | sentinel
2016-01-28 10:28:44 -05:00
// offsets 0 2 n-1 n
struct LegGeometry
{
std::vector<util::Coordinate> locations;
2016-01-28 10:28:44 -05:00
// 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;
2016-05-18 16:09:14 -04:00
// original OSM node IDs for each coordinate
std::vector<OSMNodeID> osm_node_ids;
2016-01-28 10:28:44 -05:00
// Per-coordinate metadata
2016-05-27 15:05:04 -04:00
struct Annotation
{
double distance;
double duration;
};
std::vector<Annotation> annotations;
2016-01-28 10:28:44 -05:00
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;
}
};
}
}
}
#endif