Fix geometries type in steps
This commit is contained in:
parent
804816f014
commit
1090339331
@ -81,7 +81,7 @@ makeWaypoint(const util::Coordinate location, std::string &&name, const Hint &hi
|
|||||||
util::json::Object makeRouteLeg(guidance::RouteLeg &&leg, util::json::Array &&steps);
|
util::json::Object makeRouteLeg(guidance::RouteLeg &&leg, util::json::Array &&steps);
|
||||||
|
|
||||||
util::json::Array makeRouteLegs(std::vector<guidance::RouteLeg> &&legs,
|
util::json::Array makeRouteLegs(std::vector<guidance::RouteLeg> &&legs,
|
||||||
const std::vector<guidance::LegGeometry> &leg_geometries);
|
std::vector<util::json::Value> step_geometries);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} // namespace engine
|
} // namespace engine
|
||||||
|
@ -112,7 +112,29 @@ class RouteAPI : public BaseAPI
|
|||||||
json_overview = MakeGeometry(overview.begin(), overview.end());
|
json_overview = MakeGeometry(overview.begin(), overview.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
return json::makeRoute(route, json::makeRouteLegs(std::move(legs), leg_geometries),
|
std::vector<util::json::Value> step_geometries;
|
||||||
|
for (const auto idx : util::irange(0UL, legs.size()))
|
||||||
|
{
|
||||||
|
auto &leg_geometry = leg_geometries[idx];
|
||||||
|
std::transform(
|
||||||
|
legs[idx].steps.begin(), legs[idx].steps.end(), std::back_inserter(step_geometries),
|
||||||
|
[this, &leg_geometry](const guidance::RouteStep &step)
|
||||||
|
{
|
||||||
|
if (parameters.geometries == RouteParameters::GeometriesType::Polyline)
|
||||||
|
{
|
||||||
|
return static_cast<util::json::Value>(
|
||||||
|
json::makePolyline(leg_geometry.locations.begin() + step.geometry_begin,
|
||||||
|
leg_geometry.locations.begin() + step.geometry_end));
|
||||||
|
}
|
||||||
|
BOOST_ASSERT(parameters.geometries == RouteParameters::GeometriesType::GeoJSON);
|
||||||
|
return static_cast<util::json::Value>(json::makeGeoJSONLineString(
|
||||||
|
leg_geometry.locations.begin() + step.geometry_begin,
|
||||||
|
leg_geometry.locations.begin() + step.geometry_end));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return json::makeRoute(route,
|
||||||
|
json::makeRouteLegs(std::move(legs), std::move(step_geometries)),
|
||||||
std::move(json_overview));
|
std::move(json_overview));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -133,7 +133,7 @@ util::json::Object makeStepManeuver(const guidance::StepManeuver &maneuver)
|
|||||||
}
|
}
|
||||||
|
|
||||||
util::json::Object makeRouteStep(guidance::RouteStep &&step,
|
util::json::Object makeRouteStep(guidance::RouteStep &&step,
|
||||||
boost::optional<util::json::Value> geometry)
|
util::json::Value geometry)
|
||||||
{
|
{
|
||||||
util::json::Object route_step;
|
util::json::Object route_step;
|
||||||
route_step.values["distance"] = step.distance;
|
route_step.values["distance"] = step.distance;
|
||||||
@ -141,10 +141,7 @@ util::json::Object makeRouteStep(guidance::RouteStep &&step,
|
|||||||
route_step.values["name"] = std::move(step.name);
|
route_step.values["name"] = std::move(step.name);
|
||||||
route_step.values["mode"] = detail::modeToString(step.mode);
|
route_step.values["mode"] = detail::modeToString(step.mode);
|
||||||
route_step.values["maneuver"] = makeStepManeuver(step.maneuver);
|
route_step.values["maneuver"] = makeStepManeuver(step.maneuver);
|
||||||
if (geometry)
|
route_step.values["geometry"] = std::move(geometry);
|
||||||
{
|
|
||||||
route_step.values["geometry"] = std::move(*geometry);
|
|
||||||
}
|
|
||||||
return route_step;
|
return route_step;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -184,24 +181,20 @@ util::json::Object makeRouteLeg(guidance::RouteLeg &&leg, util::json::Array &&st
|
|||||||
}
|
}
|
||||||
|
|
||||||
util::json::Array makeRouteLegs(std::vector<guidance::RouteLeg> &&legs,
|
util::json::Array makeRouteLegs(std::vector<guidance::RouteLeg> &&legs,
|
||||||
const std::vector<guidance::LegGeometry> &leg_geometries)
|
std::vector<util::json::Value> step_geometries)
|
||||||
{
|
{
|
||||||
util::json::Array json_legs;
|
util::json::Array json_legs;
|
||||||
|
auto step_geometry_iter = step_geometries.begin();
|
||||||
for (const auto idx : boost::irange(0UL, legs.size()))
|
for (const auto idx : boost::irange(0UL, legs.size()))
|
||||||
{
|
{
|
||||||
auto &&leg = std::move(legs[idx]);
|
auto &&leg = std::move(legs[idx]);
|
||||||
const auto &leg_geometry = leg_geometries[idx];
|
|
||||||
util::json::Array json_steps;
|
util::json::Array json_steps;
|
||||||
json_steps.values.reserve(leg.steps.size());
|
json_steps.values.reserve(leg.steps.size());
|
||||||
const auto begin_iter = leg_geometry.locations.begin();
|
|
||||||
std::transform(
|
std::transform(
|
||||||
std::make_move_iterator(leg.steps.begin()), std::make_move_iterator(leg.steps.end()),
|
std::make_move_iterator(leg.steps.begin()), std::make_move_iterator(leg.steps.end()),
|
||||||
std::back_inserter(json_steps.values), [&begin_iter](guidance::RouteStep &&step)
|
std::back_inserter(json_steps.values), [&step_geometry_iter](guidance::RouteStep &&step)
|
||||||
{
|
{
|
||||||
// FIXME we only support polyline here
|
return makeRouteStep(std::move(step), std::move(*step_geometry_iter++));
|
||||||
auto geometry = boost::make_optional<util::json::Value>(
|
|
||||||
makePolyline(begin_iter + step.geometry_begin, begin_iter + step.geometry_end));
|
|
||||||
return makeRouteStep(std::move(step), std::move(geometry));
|
|
||||||
});
|
});
|
||||||
json_legs.values.push_back(makeRouteLeg(std::move(leg), std::move(json_steps)));
|
json_legs.values.push_back(makeRouteLeg(std::move(leg), std::move(json_steps)));
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user