diff --git a/include/boost/geometry/policies/robustness/get_rescale_policy.hpp b/include/boost/geometry/policies/robustness/get_rescale_policy.hpp index 52570995f..0a1d7e355 100644 --- a/include/boost/geometry/policies/robustness/get_rescale_policy.hpp +++ b/include/boost/geometry/policies/robustness/get_rescale_policy.hpp @@ -27,6 +27,7 @@ #include #include +#include #include #include #include @@ -86,6 +87,11 @@ static inline void init_rescale_policy(Geometry const& geometry, RobustPoint& min_robust_point, Factor& factor) { + if (geometry::num_points(geometry) == 0) + { + return; + } + // Get bounding boxes model::box env = geometry::return_envelope >(geometry); @@ -99,10 +105,30 @@ static inline void init_rescale_policy(Geometry1 const& geometry1, RobustPoint& min_robust_point, Factor& factor) { - // Get bounding boxes - model::box env = geometry::return_envelope >(geometry1); - model::box env2 = geometry::return_envelope >(geometry2); - geometry::expand(env, env2); + // Get bounding boxes (when at least one of the geometries is not empty) + model::box env; + if (geometry::num_points(geometry1) == 0 + && geometry::num_points(geometry2) == 0) + { + return; + } + else if (geometry::num_points(geometry1) == 0) + { + geometry::envelope(geometry2, env); + } + else if (geometry::num_points(geometry2) == 0) + { + geometry::envelope(geometry1, env); + } + else + { + geometry::envelope(geometry1, env); + model::box env2 = geometry::return_envelope + < + model::box + >(geometry2); + geometry::expand(env, env2); + } scale_box_to_integer_range(env, min_point, min_robust_point, factor); }