implements relative position feature based on coordinates
This commit is contained in:
committed by
Patrick Niklaus
parent
4309ccfa02
commit
29fff4f51b
@@ -8,6 +8,7 @@
|
||||
#include "engine/hint.hpp"
|
||||
|
||||
#include <boost/assert.hpp>
|
||||
#include <boost/range/algorithm/transform.hpp>
|
||||
|
||||
#include <vector>
|
||||
|
||||
@@ -33,24 +34,22 @@ class BaseAPI
|
||||
|
||||
util::json::Array waypoints;
|
||||
waypoints.values.resize(parameters.coordinates.size());
|
||||
waypoints.values[0] = MakeWaypoint(parameters.coordinates.front(),
|
||||
segment_end_coordinates.front().source_phantom);
|
||||
waypoints.values[0] = MakeWaypoint(segment_end_coordinates.front().source_phantom);
|
||||
|
||||
auto coord_iter = std::next(parameters.coordinates.begin());
|
||||
auto out_iter = std::next(waypoints.values.begin());
|
||||
for (const auto &phantoms : segment_end_coordinates)
|
||||
{
|
||||
*out_iter++ = MakeWaypoint(*coord_iter++, phantoms.target_phantom);
|
||||
}
|
||||
boost::range::transform(segment_end_coordinates, out_iter,
|
||||
[this](const PhantomNodes &phantom_pair)
|
||||
{
|
||||
return MakeWaypoint(phantom_pair.target_phantom);
|
||||
});
|
||||
return waypoints;
|
||||
}
|
||||
|
||||
protected:
|
||||
util::json::Object MakeWaypoint(const util::Coordinate input_coordinate,
|
||||
const PhantomNode &phantom) const
|
||||
util::json::Object MakeWaypoint(const PhantomNode &phantom) const
|
||||
{
|
||||
return json::makeWaypoint(phantom.location, facade.get_name_for_id(phantom.name_id),
|
||||
Hint{input_coordinate, phantom, facade.GetCheckSum()});
|
||||
Hint{phantom, facade.GetCheckSum()});
|
||||
}
|
||||
|
||||
const datafacade::BaseDataFacade &facade;
|
||||
|
||||
@@ -98,7 +98,7 @@ class MatchAPI final : public RouteAPI
|
||||
}
|
||||
const auto &phantom =
|
||||
sub_matchings[matching_index.sub_matching_index].nodes[matching_index.point_index];
|
||||
auto waypoint = BaseAPI::MakeWaypoint(parameters.coordinates[trace_index], phantom);
|
||||
auto waypoint = BaseAPI::MakeWaypoint(phantom);
|
||||
waypoint.values["matchings_index"] = matching_index.sub_matching_index;
|
||||
waypoint.values["waypoint_index"] = matching_index.point_index;
|
||||
waypoints.values.push_back(std::move(waypoint));
|
||||
|
||||
@@ -38,8 +38,7 @@ class NearestAPI final : public BaseAPI
|
||||
waypoints.values.begin(),
|
||||
[this](const PhantomNodeWithDistance &phantom_with_distance)
|
||||
{
|
||||
auto waypoint = MakeWaypoint(parameters.coordinates.front(),
|
||||
phantom_with_distance.phantom_node);
|
||||
auto waypoint = MakeWaypoint(phantom_with_distance.phantom_node);
|
||||
waypoint.values["distance"] = phantom_with_distance.distance;
|
||||
return waypoint;
|
||||
});
|
||||
|
||||
@@ -17,6 +17,8 @@
|
||||
|
||||
#include "util/integer_range.hpp"
|
||||
|
||||
#include <boost/range/algorithm/transform.hpp>
|
||||
|
||||
namespace osrm
|
||||
{
|
||||
namespace engine
|
||||
@@ -72,13 +74,12 @@ class TableAPI final : public BaseAPI
|
||||
util::json::Array json_waypoints;
|
||||
json_waypoints.values.reserve(phantoms.size());
|
||||
BOOST_ASSERT(phantoms.size() == parameters.coordinates.size());
|
||||
auto phantom_iter = phantoms.begin();
|
||||
auto coordinate_iter = parameters.coordinates.begin();
|
||||
for (; phantom_iter != phantoms.end() && coordinate_iter != parameters.coordinates.end();
|
||||
++phantom_iter, ++coordinate_iter)
|
||||
{
|
||||
json_waypoints.values.push_back(BaseAPI::MakeWaypoint(*coordinate_iter, *phantom_iter));
|
||||
}
|
||||
|
||||
boost::range::transform(phantoms, std::back_inserter(json_waypoints.values),
|
||||
[this](const PhantomNode &phantom)
|
||||
{
|
||||
return BaseAPI::MakeWaypoint(phantom);
|
||||
});
|
||||
return json_waypoints;
|
||||
}
|
||||
|
||||
@@ -87,12 +88,12 @@ class TableAPI final : public BaseAPI
|
||||
{
|
||||
util::json::Array json_waypoints;
|
||||
json_waypoints.values.reserve(indices.size());
|
||||
for (auto idx : indices)
|
||||
{
|
||||
BOOST_ASSERT(idx < phantoms.size() && idx < parameters.coordinates.size());
|
||||
json_waypoints.values.push_back(
|
||||
BaseAPI::MakeWaypoint(parameters.coordinates[idx], phantoms[idx]));
|
||||
}
|
||||
boost::range::transform(indices, std::back_inserter(json_waypoints.values),
|
||||
[this, phantoms](const std::size_t idx)
|
||||
{
|
||||
BOOST_ASSERT(idx < phantoms.size());
|
||||
return BaseAPI::MakeWaypoint(phantoms[idx]);
|
||||
});
|
||||
return json_waypoints;
|
||||
}
|
||||
|
||||
|
||||
@@ -36,10 +36,10 @@ class TripAPI final : public RouteAPI
|
||||
BOOST_ASSERT(sub_trips.size() == sub_routes.size());
|
||||
for (auto index : util::irange<std::size_t>(0UL, sub_trips.size()))
|
||||
{
|
||||
auto route = MakeRoute(
|
||||
sub_routes[index].segment_end_coordinates, sub_routes[index].unpacked_path_segments,
|
||||
sub_routes[index].source_traversed_in_reverse,
|
||||
sub_routes[index].target_traversed_in_reverse);
|
||||
auto route = MakeRoute(sub_routes[index].segment_end_coordinates,
|
||||
sub_routes[index].unpacked_path_segments,
|
||||
sub_routes[index].source_traversed_in_reverse,
|
||||
sub_routes[index].target_traversed_in_reverse);
|
||||
routes.values.push_back(std::move(route));
|
||||
}
|
||||
response.values["waypoints"] = MakeWaypoints(sub_trips, phantoms);
|
||||
@@ -90,8 +90,7 @@ class TripAPI final : public RouteAPI
|
||||
auto trip_index = input_idx_to_trip_idx[input_index];
|
||||
BOOST_ASSERT(!trip_index.NotUsed());
|
||||
|
||||
auto waypoint =
|
||||
BaseAPI::MakeWaypoint(parameters.coordinates[input_index], phantoms[input_index]);
|
||||
auto waypoint = BaseAPI::MakeWaypoint(phantoms[input_index]);
|
||||
waypoint.values["trips_index"] = trip_index.sub_trip_index;
|
||||
waypoint.values["waypoint_index"] = trip_index.point_index;
|
||||
waypoints.values.push_back(std::move(waypoint));
|
||||
|
||||
Reference in New Issue
Block a user