Hi Brook,

Brook Milligan Via Geometry wrote:
I would like to use the "with strategies" option for some of the algorithms in Boost.Geometry.  However, I am having trouble determining which strategies go with which algorithms, because the type deduction seems to involve a (convoluted to me and undocumented as far as I can tell) multilevel process.

Yes, currently it's very complicated and not documented well enough.

Is there a means of understanding the strategy type deduction process?  Could a clear description of that be added to the documentation?

You can get this info by:
- reading documentation of algorithms, there are strategies mentioned at the bottom, not in all cases though,
- asking here or at GitHub,
- reading code,
- debugging algorithm overload using default strategy for various input geometries to see which strategy is used.

Yes, I agree that it should be documented but documentation has low priority. Besides this structure is so complex that I think it should be slightly redesigned.

Which algorithms and strategies would you like to use?

Set operations and relational operations (equals, within, relate, intersection, difference, etc.) take:
- within::point_in_point strategy for PointLike geometries
- within::point_in_box for PointLike v.s. Box geometries
- within::box_in_box for Box v.s. Box
- within winding strategy (within::cartesian_winding, within::spherical_winding) for PointLike v.s. Linear and PointLike v.s. Areal geometries
- intersection strategy (intersection::cartesian_segments, intersection::geographic_segments) for Linear v.s. Areal and Areal v.s. Areal geometries

distance:
- Point-Point distance strategy, e.g. distance::pythagoras (should probably be renamed to cartesian_points} for PointLike geometries
- Point-Segment distance strategy, e.g. distance::projected_point for other geometries (however this will change when support for geographic distance between Linear and Areal geometries is added I think)

length, perimeter
- Point-Point distance strategy

expand, envelope
- envelope strategy, e.g. envelope::cartesian_segment

The rest of the strategies should correspond (with namespace) to algorithms.

Adam