Boost logo

Geometry :

Subject: [geometry] Dissolve rescale_policy
From: Johan Doré (jdh_at_[hidden])
Date: 2016-03-04 12:43:11


Dear Boost Geometry



In version 1.60 wonder if there is an reason for the no_rescale_policy in the dissolve function:


inline void dissolve(Geometry const& geometry, Collection& output_collection)
{
  concept::check<Geometry const>();

  typedef typename boost::range_value<Collection>::type geometry_out;

  concept::check<geometry_out>();

  dispatch::dissolve
  <
    typename tag<Geometry>::type,
    typename tag<geometry_out>::type,
    Geometry,
    geometry_out
>::apply(geometry, detail::no_rescale_policy(), std::back_inserter(output_collection));
}




Changing it to the robust policy:




inline void dissolve(Geometry const& geometry, Collection& output_collection)
{
  concept::check<Geometry const>();

  typedef typename boost::range_value<Collection>::type geometry_out;

  concept::check<geometry_out>();

  typedef typename geometry::rescale_policy_type
  <
    typename geometry::point_type<Geometry>::type
>::type rescale_policy_type;

  rescale_policy_type robust_policy = geometry::get_rescale_policy<rescale_policy_type>(geometry);

  dispatch::dissolve
  <
    typename tag<Geometry>::type,
    typename tag<geometry_out>::type,
    Geometry,
    geometry_out
>::apply(geometry, robust_policy, std::back_inserter(output_collection));
}




Seems to correctly dissolve a larger range of invalid polygons.

I therefore wonder if this change I recommendable and should be included?

Best regards

Johan




Geometry list run by mateusz at loskot.net