Boost
C++ Libraries
...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
This is an older version of Boost and was released in 2023. The current version is 1.89.0.
Calculate the closest points between two geometries using the specified strategy.
The free function closest_points calculates the distance between two geometries using the specified strategy. Reasons to specify a strategy include: use another coordinate system for calculations; construct the strategy beforehand (e.g. with the radius of the Earth); select a strategy when there are more than one available for a calculation.
template<typename Geometry1, typename Geometry2, typename Segment, typename Strategy> void closest_points(Geometry1 const & geometry1, Geometry2 const & geometry2, Segment & shortest_seg, Strategy const & strategy)
|
Type |
Concept |
Name |
Description |
|---|---|---|---|
|
Geometry1 const & |
Any type fulfilling a Geometry Concept |
geometry1 |
A model of the specified concept |
|
Geometry2 const & |
Any type fulfilling a Geometry Concept |
geometry2 |
A model of the specified concept |
|
Segment & |
Any type fulfilling a Segment Concept |
shortest_seg |
Output segment containing the closest points |
|
Strategy const & |
Any type fulfilling a Closest Points Strategy Concept |
strategy |
The strategy which will be used for closest_points calculations |
Either
#include <boost/geometry.hpp>
Or
#include <boost/geometry/algorithms/closest_points.hpp>
Shows calculation of the two closest points between two geometries using strategies
#include <iostream> #include <boost/geometry.hpp> #include <boost/geometry/geometries/linestring.hpp> #include <boost/geometry/geometries/point_xy.hpp> #include <boost/geometry/geometries/polygon.hpp> #include <boost/geometry/geometries/multi_point.hpp> int main() { typedef boost::geometry::model::d2::point_xy < double, boost::geometry::cs::geographic<boost::geometry::degree> > point_type; typedef boost::geometry::model::polygon<point_type> polygon_type; typedef boost::geometry::model::linestring<point_type> linestring_type; typedef boost::geometry::model::multi_point<point_type> multi_point_type; point_type p(4.3,1.9); polygon_type poly; linestring_type line; multi_point_type mp; boost::geometry::strategies::closest_points::geographic<> strategies (boost::geometry::srs::spheroid<double>(6378137.0, 6356752.3142451793)); boost::geometry::read_wkt( "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3)" "(4.0 2.0, 4.2 1.4, 4.8 1.9, 4.4 2.2, 4.0 2.0))", poly); line.push_back(point_type(5,0)); line.push_back(point_type(2,0)); mp.push_back(point_type(2,0.5)); mp.push_back(point_type(2,3)); boost::geometry::model::segment<point_type> sout1,sout2,sout3; boost::geometry::closest_points(p, poly, sout1, strategies); std::cout << "Point-Poly: " << boost::geometry::wkt(sout1) << std::endl; boost::geometry::closest_points(poly, line, sout2, strategies); std::cout << "Poly-Line: " << boost::geometry::wkt(sout2) << std::endl; boost::geometry::closest_points(p, mp, sout3, strategies); std::cout << "Poly-MultiPoint: " << boost::geometry::wkt(sout3) << std::endl; return 0; }
Output:
Point-Poly: LINESTRING(4.3 1.9,4.20096 2.1005) Poly-Line: LINESTRING(2.9 0.7,2.9 0) Poly-MultiPoint: LINESTRING(4.3 1.9,2 3)