То, что я пытаюсь сделать, - это преобразовать две точки в сферических координатах в географические координаты, чтобы они использовали функцию расстояния Винсента, чтобы точно измерить расстояние между двумя точками на единичной сфере.
В следующем коде не удается преобразовать пару сферических точек в пары географических, возвращая значения inf для элементов в p1_g и p2_g.
Любое предположение о том, что я делаю неправильно, очень ценится.
VectorXd p1(2) ;
VectorXd p2(2) ;
p1 << -2.35619, 0.955317 ;
p2 << 1.47275, 2.53697 ;
namespace bg = boost::geometry;
typedef boost::geometry::srs::spheroid<double> SpheroidType;
SpheroidType spheriod(1.0,1.0);
typedef boost::geometry::strategy::distance::vincenty<SpheroidType>
VincentyStrategy;
VincentyStrategy vincenty(spheriod);
bg::model::point<double, 2, bg::cs::spherical<bg::radian>> p1_s(p1(0), p1(1));
bg::model::point<double, 2, bg::cs::spherical<bg::radian>> p2_s(p2(0), p2(1));
bg::model::point<double, 2, bg::cs::geographic<bg::radian> > p1_g;
bg::model::point<double, 2, bg::cs::geographic<bg::radian> > p2_g;
bg::transform(p1_s, p1_g, vincenty);
bg::transform(p2_s, p2_g, vincenty);
auto dist = bg::distance(p1_g, p2_g, vincenty);