Fix geometries type in steps

This commit is contained in:
Patrick Niklaus
2016-02-25 17:55:52 +01:00
parent dd1f9e5a6a
commit 690a2a41a4
3 changed files with 30 additions and 15 deletions
+1 -1
View File
@@ -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::Array makeRouteLegs(std::vector<guidance::RouteLeg> &&legs,
const std::vector<guidance::LegGeometry> &leg_geometries);
std::vector<util::json::Value> step_geometries);
}
}
} // namespace engine
+23 -1
View File
@@ -112,7 +112,29 @@ class RouteAPI : public BaseAPI
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));
}