26 #if Boost_VERSION_MACRO >= 105600 27 #include <boost/geometry/io/wkt/write.hpp> 29 #include <boost/bgeometry/io/wkt/write.hpp> 41 typename std::enable_if<!std::numeric_limits<T>::is_integer,
bool>::type
45 return std::abs(x-y) <= std::numeric_limits<T>::epsilon() * std::abs(x+y) * ulp
47 || std::abs(x-y) < std::numeric_limits<T>::min();
56 log << v.
id <<
"-" << bg::wkt(v.
point);
62 if (&rhs ==
this)
return true;
63 return this->
id == rhs.
id &&
70 std::vector < XY_vertex > vertices) {
71 auto count(vertices.size());
73 vertices.begin(), vertices.end(),
75 {
return lhs.
id < rhs.id;});
78 vertices.begin(), vertices.end(),
80 {
return lhs.
id == rhs.id;}), vertices.end());
82 return count - vertices.size();
85 std::vector < XY_vertex >
87 const std::vector <Pgr_edge_xy_t > &data_edges) {
89 std::vector< XY_vertex > vertices;
90 if (data_edges.empty())
return vertices;
92 vertices.reserve(data_edges.size() * 2);
94 for (
const auto &
edge : data_edges) {
96 vertices.push_back(v_source);
99 vertices.push_back(v_target);
106 vertices.begin(), vertices.end(),
108 {
return lhs.
id < rhs.id;});
111 vertices.begin(), vertices.end(),
113 {
return lhs.
id == rhs.id;}), vertices.end());
117 std::vector < XY_vertex >
121 std::vector < Pgr_edge_xy_t >(data_edges, data_edges + count));
127 std::vector < XY_vertex > vertices,
128 const std::vector < Pgr_edge_xy_t > data_edges) {
129 if (data_edges.empty())
return vertices;
131 vertices.reserve(vertices.size() + data_edges.size() * 2);
133 for (
const auto edge : data_edges) {
141 std::stable_sort(vertices.begin(), vertices.end(),
143 {
return lhs.
id < rhs.id;});
146 std::unique(vertices.begin(), vertices.end(),
148 {
return lhs.
id == rhs.id;}), vertices.end());
152 std::vector < XY_vertex > vertices,
155 std::vector < Pgr_edge_xy_t >(data_edges, data_edges + count));
std::ostream & operator<<(std::ostream &log, const Basic_vertex &v)
bool operator==(const XY_vertex &rhs) const
std::vector< Basic_vertex > extract_vertices(std::vector< Basic_vertex > vertices, const std::vector< pgr_edge_t > data_edges)
Book keeping class for swapping orders between vehicles.
size_t check_vertices(std::vector< Basic_vertex > vertices)
std::enable_if<!std::numeric_limits< T >::is_integer, bool >::type almost_equal(T x, T y, int ulp)