2 #include <boost/version.hpp>
3 #if BOOST_VERSION < 106300 && BOOST_VERSION >= 106200
7 #include <boost/geometry/algorithms/distance.hpp>
8 #include <boost/geometry/geometries/geometries.hpp>
9 #include <boost/geometry/geometries/register/point.hpp>
10 #include <boost/geometry/strategies/strategies.hpp>
19 BOOST_GEOMETRY_REGISTER_POINT_2D(Eigen::Vector2d,
double, cs::cartesian, x(), y())
20 BOOST_GEOMETRY_REGISTER_POINT_2D(
lanelet::Point2d,
double, cs::cartesian, x(), y())
21 BOOST_GEOMETRY_REGISTER_POINT_2D_CONST(
lanelet::ConstPoint2d,
double, cs::cartesian, x(), y())
22 BOOST_GEOMETRY_REGISTER_POINT_3D(
lanelet::Point3d,
double, cs::cartesian, x(), y(), z())
23 BOOST_GEOMETRY_REGISTER_POINT_3D_CONST(
lanelet::ConstPoint3d,
double, cs::cartesian, x(), y(), z())
28 template <
typename Policy>
44 template <
typename T,
typename Enable =
void>
46 static inline auto twoD(
const T& geometry) {
return geometry; }
47 static inline auto threeD(
const T& geometry) {
return geometry; }
51 struct GetGeometry<T,
IfPT<T, void>> {
52 static inline auto twoD(
const T& geometry) {
return traits::to2D(geometry); }
53 static inline auto threeD(
const T& geometry) {
return traits::to3D(geometry); }
56 template <
typename T1,
typename T2>
57 constexpr
bool isTrivialDistance() {
58 return traits::noRegelem<T1>() && traits::noRegelem<T2>() &&
59 !(traits::isCategory<T1, traits::LineStringTag>() && traits::isCategory<T2, traits::LineStringTag>() &&
66 template <
typename Geometry1T,
typename Geometry2T>
68 -> std::enable_if_t<internal::isTrivialDistance<Geometry1T, Geometry2T>(),
double> {
69 return distance(internal::GetGeometry<Geometry1T>::twoD(
p1), internal::GetGeometry<Geometry2T>::twoD(
p2));
73 template <
typename Geometry1T,
typename Geometry2T>
75 -> std::enable_if_t<internal::isTrivialDistance<Geometry1T, Geometry2T>(),
double> {
76 return distance(internal::GetGeometry<Geometry1T>::threeD(
p1), internal::GetGeometry<Geometry2T>::threeD(
p2));