If geometry is only one point, encode as Point not as LineString
This commit is contained in:
parent
6e04da9f8f
commit
5f9ccadd6c
@ -48,13 +48,24 @@ template <typename ForwardIter> util::json::String makePolyline(ForwardIter begi
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename ForwardIter>
|
template <typename ForwardIter>
|
||||||
util::json::Object makeGeoJSONLineString(ForwardIter begin, ForwardIter end)
|
util::json::Object makeGeoJSONGeometry(ForwardIter begin, ForwardIter end)
|
||||||
{
|
{
|
||||||
|
auto distance = std::distance(begin, end);
|
||||||
util::json::Object geojson;
|
util::json::Object geojson;
|
||||||
geojson.values["type"] = "LineString";
|
if (distance > 1)
|
||||||
util::json::Array coordinates;
|
{
|
||||||
std::transform(begin, end, std::back_inserter(coordinates.values), &detail::coordinateToLonLat);
|
geojson.values["type"] = "LineString";
|
||||||
geojson.values["coordinates"] = std::move(coordinates);
|
util::json::Array coordinates;
|
||||||
|
std::transform(begin, end, std::back_inserter(coordinates.values), &detail::coordinateToLonLat);
|
||||||
|
geojson.values["coordinates"] = std::move(coordinates);
|
||||||
|
}
|
||||||
|
else if (distance > 0)
|
||||||
|
{
|
||||||
|
geojson.values["type"] = "Point";
|
||||||
|
util::json::Array coordinates;
|
||||||
|
coordinates.values.push_back(detail::coordinateToLonLat(*begin));
|
||||||
|
geojson.values["coordinates"] = std::move(coordinates);
|
||||||
|
}
|
||||||
return geojson;
|
return geojson;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,7 +69,7 @@ class RouteAPI : public BaseAPI
|
|||||||
}
|
}
|
||||||
|
|
||||||
BOOST_ASSERT(parameters.geometries == RouteParameters::GeometriesType::GeoJSON);
|
BOOST_ASSERT(parameters.geometries == RouteParameters::GeometriesType::GeoJSON);
|
||||||
return json::makeGeoJSONLineString(begin, end);
|
return json::makeGeoJSONGeometry(begin, end);
|
||||||
}
|
}
|
||||||
|
|
||||||
util::json::Object MakeRoute(const std::vector<PhantomNodes> &segment_end_coordinates,
|
util::json::Object MakeRoute(const std::vector<PhantomNodes> &segment_end_coordinates,
|
||||||
@ -169,7 +169,7 @@ class RouteAPI : public BaseAPI
|
|||||||
leg_geometry.locations.begin() + step.geometry_end));
|
leg_geometry.locations.begin() + step.geometry_end));
|
||||||
}
|
}
|
||||||
BOOST_ASSERT(parameters.geometries == RouteParameters::GeometriesType::GeoJSON);
|
BOOST_ASSERT(parameters.geometries == RouteParameters::GeometriesType::GeoJSON);
|
||||||
return static_cast<util::json::Value>(json::makeGeoJSONLineString(
|
return static_cast<util::json::Value>(json::makeGeoJSONGeometry(
|
||||||
leg_geometry.locations.begin() + step.geometry_begin,
|
leg_geometry.locations.begin() + step.geometry_begin,
|
||||||
leg_geometry.locations.begin() + step.geometry_end));
|
leg_geometry.locations.begin() + step.geometry_end));
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user