Boost Transform Производство Inf возвращаемых значений - PullRequest
2 голосов
/ 21 мая 2019

То, что я пытаюсь сделать, - это преобразовать две точки в сферических координатах в географические координаты, чтобы они использовали функцию расстояния Винсента, чтобы точно измерить расстояние между двумя точками на единичной сфере.

В следующем коде не удается преобразовать пару сферических точек в пары географических, возвращая значения 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);

1 Ответ

1 голос
/ 21 мая 2019

Вы, похоже, не понимаете, что такое spheres и spheroids.

A sphere - фактически идеально круглый шар.В то время как spheroid - это sphere, который был сдвинут (или расширен) вдоль оси, см .: https://en.wikipedia.org/wiki/Spheroid.
Другое название для spheroid - ellipsoid.Самый известный spheroid - это WGS-84 spheroid, используемый системами GPS.

Расстояния между точками на sphere можно относительно легко рассчитать с помощью haversine уравнение , в то время как расстояния между точками на spheroid требуют сложных уравнений, таких как уравнения Винсенти или (более точные) Карни.

Чтобы рассчитать расстояния на единичной сфере, просто используйте boost *Стратегия 1025 * haversine и затем умножьте на радиус, чтобы преобразовать расстояние от радиан до нужных вам единиц.Пример не декартового расстояния здесь показывает, что оно выполняется с координатами в градусах.

...