clang-format
This commit is contained in:
parent
6b0bcb5171
commit
d7035291ea
@ -15,7 +15,8 @@ namespace engine
|
|||||||
namespace detail
|
namespace detail
|
||||||
{
|
{
|
||||||
std::string encode(std::vector<int> &numbers);
|
std::string encode(std::vector<int> &numbers);
|
||||||
std::int32_t decode_polyline_integer(std::string::const_iterator &first, std::string::const_iterator last);
|
std::int32_t decode_polyline_integer(std::string::const_iterator &first,
|
||||||
|
std::string::const_iterator last);
|
||||||
}
|
}
|
||||||
using CoordVectorForwardIter = std::vector<util::Coordinate>::const_iterator;
|
using CoordVectorForwardIter = std::vector<util::Coordinate>::const_iterator;
|
||||||
// Encodes geometry into polyline format.
|
// Encodes geometry into polyline format.
|
||||||
@ -59,7 +60,7 @@ std::string encodePolyline(CoordVectorForwardIter begin, CoordVectorForwardIter
|
|||||||
template <unsigned POLYLINE_PRECISION = 100000>
|
template <unsigned POLYLINE_PRECISION = 100000>
|
||||||
std::vector<util::Coordinate> decodePolyline(const std::string &polyline)
|
std::vector<util::Coordinate> decodePolyline(const std::string &polyline)
|
||||||
{
|
{
|
||||||
double polyline_to_coordinate = COORDINATE_PRECISION / POLYLINE_PRECISION ;
|
double polyline_to_coordinate = COORDINATE_PRECISION / POLYLINE_PRECISION;
|
||||||
std::vector<util::Coordinate> coordinates;
|
std::vector<util::Coordinate> coordinates;
|
||||||
std::int32_t latitude = 0, longitude = 0;
|
std::int32_t latitude = 0, longitude = 0;
|
||||||
|
|
||||||
@ -73,9 +74,9 @@ std::vector<util::Coordinate> decodePolyline(const std::string &polyline)
|
|||||||
latitude += dlat;
|
latitude += dlat;
|
||||||
longitude += dlon;
|
longitude += dlon;
|
||||||
|
|
||||||
coordinates.emplace_back(
|
coordinates.emplace_back(util::Coordinate{
|
||||||
util::Coordinate{util::FixedLongitude{static_cast<std::int32_t>(longitude*polyline_to_coordinate)},
|
util::FixedLongitude{static_cast<std::int32_t>(longitude * polyline_to_coordinate)},
|
||||||
util::FixedLatitude{static_cast<std::int32_t>(latitude*polyline_to_coordinate)}});
|
util::FixedLatitude{static_cast<std::int32_t>(latitude * polyline_to_coordinate)}});
|
||||||
}
|
}
|
||||||
return coordinates;
|
return coordinates;
|
||||||
}
|
}
|
||||||
|
@ -136,8 +136,8 @@ struct BaseParametersGrammar : boost::spirit::qi::grammar<Iterator, Signature>
|
|||||||
qi::_1)];
|
qi::_1)];
|
||||||
|
|
||||||
query_rule =
|
query_rule =
|
||||||
((location_rule % ';') |
|
((location_rule % ';') | polyline_rule |
|
||||||
polyline_rule | polyline6_rule)[ph::bind(&engine::api::BaseParameters::coordinates, qi::_r1) = qi::_1];
|
polyline6_rule)[ph::bind(&engine::api::BaseParameters::coordinates, qi::_r1) = qi::_1];
|
||||||
|
|
||||||
radiuses_rule = qi::lit("radiuses=") >
|
radiuses_rule = qi::lit("radiuses=") >
|
||||||
(-(qi::double_ | unlimited_rule) %
|
(-(qi::double_ | unlimited_rule) %
|
||||||
|
@ -53,8 +53,10 @@ std::string encode(std::vector<int> &numbers)
|
|||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://developers.google.com/maps/documentation/utilities/polylinealgorithm
|
// https://developers.google.com/maps/documentation/utilities/polylinealgorithm
|
||||||
std::int32_t decode_polyline_integer(std::string::const_iterator &first, std::string::const_iterator last) {
|
std::int32_t decode_polyline_integer(std::string::const_iterator &first,
|
||||||
|
std::string::const_iterator last)
|
||||||
|
{
|
||||||
// varint coding parameters
|
// varint coding parameters
|
||||||
const std::uint32_t bits_in_chunk = 5;
|
const std::uint32_t bits_in_chunk = 5;
|
||||||
const std::uint32_t continuation_bit = 1 << bits_in_chunk;
|
const std::uint32_t continuation_bit = 1 << bits_in_chunk;
|
||||||
|
@ -14,26 +14,19 @@ BOOST_AUTO_TEST_CASE(polyline5_test_case)
|
|||||||
using namespace osrm::engine;
|
using namespace osrm::engine;
|
||||||
using namespace osrm::util;
|
using namespace osrm::util;
|
||||||
|
|
||||||
const std::vector<Coordinate> coords({
|
const std::vector<Coordinate> coords({{FixedLongitude{-73990171}, FixedLatitude{40714701}},
|
||||||
{FixedLongitude{-73990171}, FixedLatitude{40714701}},
|
|
||||||
{FixedLongitude{-73991801}, FixedLatitude{40717571}},
|
{FixedLongitude{-73991801}, FixedLatitude{40717571}},
|
||||||
{FixedLongitude{-73985751}, FixedLatitude{40715651}}
|
{FixedLongitude{-73985751}, FixedLatitude{40715651}}});
|
||||||
});
|
|
||||||
|
|
||||||
const std::vector<Coordinate> coords_truncated({
|
const std::vector<Coordinate> coords_truncated(
|
||||||
{FixedLongitude{-73990170}, FixedLatitude{40714700}},
|
{{FixedLongitude{-73990170}, FixedLatitude{40714700}},
|
||||||
{FixedLongitude{-73991800}, FixedLatitude{40717570}},
|
{FixedLongitude{-73991800}, FixedLatitude{40717570}},
|
||||||
{FixedLongitude{-73985750}, FixedLatitude{40715650}}
|
{FixedLongitude{-73985750}, FixedLatitude{40715650}}});
|
||||||
});
|
|
||||||
|
|
||||||
BOOST_CHECK_EQUAL(encodePolyline(coords.begin(), coords.end()), "{aowFperbM}PdI~Jyd@");
|
BOOST_CHECK_EQUAL(encodePolyline(coords.begin(), coords.end()), "{aowFperbM}PdI~Jyd@");
|
||||||
BOOST_CHECK(
|
BOOST_CHECK(std::equal(coords_truncated.begin(),
|
||||||
std::equal(
|
|
||||||
coords_truncated.begin(),
|
|
||||||
coords_truncated.end(),
|
coords_truncated.end(),
|
||||||
decodePolyline(encodePolyline(coords.begin(), coords.end())).begin()
|
decodePolyline(encodePolyline(coords.begin(), coords.end())).begin()));
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(polyline6_test_case)
|
BOOST_AUTO_TEST_CASE(polyline6_test_case)
|
||||||
@ -41,20 +34,16 @@ BOOST_AUTO_TEST_CASE(polyline6_test_case)
|
|||||||
using namespace osrm::engine;
|
using namespace osrm::engine;
|
||||||
using namespace osrm::util;
|
using namespace osrm::util;
|
||||||
|
|
||||||
const std::vector<Coordinate> coords({
|
const std::vector<Coordinate> coords({{FixedLongitude{-73990171}, FixedLatitude{40714701}},
|
||||||
{FixedLongitude{-73990171}, FixedLatitude{40714701}},
|
|
||||||
{FixedLongitude{-73991801}, FixedLatitude{40717571}},
|
{FixedLongitude{-73991801}, FixedLatitude{40717571}},
|
||||||
{FixedLongitude{-73985751}, FixedLatitude{40715651}}
|
{FixedLongitude{-73985751}, FixedLatitude{40715651}}});
|
||||||
});
|
|
||||||
|
|
||||||
BOOST_CHECK_EQUAL(encodePolyline<1000000>(coords.begin(), coords.end()), "y{_tlAt`_clCkrDzdB~vBcyJ");
|
BOOST_CHECK_EQUAL(encodePolyline<1000000>(coords.begin(), coords.end()),
|
||||||
BOOST_CHECK(
|
"y{_tlAt`_clCkrDzdB~vBcyJ");
|
||||||
std::equal(
|
BOOST_CHECK(std::equal(
|
||||||
coords.begin(),
|
coords.begin(),
|
||||||
coords.end(),
|
coords.end(),
|
||||||
decodePolyline<1000000>(encodePolyline<1000000>(coords.begin(), coords.end())).begin()
|
decodePolyline<1000000>(encodePolyline<1000000>(coords.begin(), coords.end())).begin()));
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_SUITE_END()
|
BOOST_AUTO_TEST_SUITE_END()
|
||||||
|
Loading…
Reference in New Issue
Block a user