...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
Distance calculation for spherical coordinates on a perfect sphere using haversine.
template<typename RadiusTypeOrSphere, typename CalculationType> class strategy::distance::haversine { // ... };
Parameter 
Default 
Description 

typename RadiusTypeOrSphere 
double 
numeric type for radius (of sphere, earth) or sphere model 
typename CalculationType 
void 
numeric type for calculation (e.g. high precision); if void then it is extracted automatically from the coordinate type and (if necessary) promoted to floating point 
Function 
Description 
Parameters 

haversine()

Default constructor, radius set to 1.0 for the unit sphere. 

template<typename RadiusOrSphere> haversine(RadiusOrSphere const & radius_or_sphere)

Constructor. 
RadiusOrSphere const &: radius_or_sphere: radius of the sphere or sphere model 
Function 
Description 
Parameters 
Returns 

template<typename Point1, typename Point2> calculation_type< Point1, Point2 >::type apply(Point1 const & p1, Point2 const & p2)

applies the distance calculation 
Point1 const &: p1: first point Point2 const &: p2: second point 
the calculated distance (including multiplying with radius) 
radius_type radius()

access to radius value 
the radius 
#include <boost/geometry/strategies/spherical/distance_haversine.hpp>