static inline void init_rescale_policy(Geometry const& geometry, Point& min_point, RobustPoint& min_robust_point, Factor& factor) { // Get bounding boxes model::box<Point> env = geometry::return_envelope<model::box<Point> >(geometry); scale_box_to_integer_range(env, min_point, min_robust_point, factor); }
static inline void init_rescale_policy(Geometry1 const& geometry1, Geometry2 const& geometry2, Point& min_point, RobustPoint& min_robust_point, Factor& factor) { // Get bounding boxes (when at least one of the geometries is not empty) bool const is_empty1 = geometry::is_empty(geometry1); bool const is_empty2 = geometry::is_empty(geometry2); if (is_empty1 && is_empty2) { return; } model::box<Point> env; if (is_empty1) { geometry::envelope(geometry2, env); } else if (is_empty2) { geometry::envelope(geometry1, env); } else { // The following approach (envelope + expand) may not give the // optimal MBR when then two geometries are in the spherical // equatorial or geographic coordinate systems. // TODO: implement envelope for two (or possibly more geometries) geometry::envelope(geometry1, env); model::box<Point> env2 = geometry::return_envelope < model::box<Point> >(geometry2); geometry::expand(env, env2); } scale_box_to_integer_range(env, min_point, min_robust_point, factor); }