C++ Boost::geometry::缓冲区不使用地理坐标系

C++ Boost::geometry::缓冲区不使用地理坐标系,c++,boost,geometry,C++,Boost,Geometry,我在VisualStudio 2015中使用boost 1.69.0。我想做的是在使用地理坐标系的几何体周围创建一个缓冲区: #include <boost/geometry.hpp> int main() { // using point_type = boost::geometry::model::point<double, 2, boost::geometry::cs::cartesian>; using point_type = boost::ge

我在VisualStudio 2015中使用boost 1.69.0。我想做的是在使用地理坐标系的几何体周围创建一个缓冲区:

#include <boost/geometry.hpp>

int main()
{
//    using point_type = boost::geometry::model::point<double, 2, boost::geometry::cs::cartesian>;
    using point_type = boost::geometry::model::point<double, 2, boost::geometry::cs::geographic<boost::geometry::degree>>;
    using polygon_type = boost::geometry::model::polygon<point_type>;

    std::vector<point_type> v1{{0,0}, {0,10}, {10,10}, {10,0}, {0,0}};
    polygon_type poly1;
    boost::geometry::assign_points(poly1, v1);

    boost::geometry::correct(poly1);

    const double buffer_distance = 1;
    const int points_per_circle = 18;

    boost::geometry::strategy::buffer::distance_symmetric<double> distance_strategy(buffer_distance);
    boost::geometry::strategy::buffer::join_round join_strategy(points_per_circle);
    boost::geometry::strategy::buffer::end_round end_strategy(points_per_circle);
    boost::geometry::strategy::buffer::point_circle circle_strategy(points_per_circle);
    boost::geometry::strategy::buffer::side_straight side_strategy;

    boost::geometry::model::multi_polygon<polygon_type> poly2;

    boost::geometry::buffer(poly1, poly2, distance_strategy, side_strategy, join_strategy, end_strategy,
            circle_strategy);

    return 0;
}
#包括
int main()
{
//使用point_type=boost::geometry::model::point;
使用point_type=boost::geometry::model::point;
使用polygon_type=boost::geometry::model::polygon;
向量v1{0,0},{0,10},{10,10},{10,0},{0,0};
多边形_型poly1;
boost::geometry::分配_点(poly1,v1);
boost::geometry::correct(poly1);
常数双缓冲距离=1;
每个圆的常数int点=18;
boost::geometry::strategy::buffer::distance\u对称距离策略(buffer\u distance);
boost::geometry::strategy::buffer::join_round join_strategy(每个圆的点数);
boost::geometry::strategy::buffer::end_round_strategy(每个圆的点数);
boost::geometry::strategy::buffer::point\u circle\u strategy(每个圆的点数);
boost::geometry::strategy::buffer::side_straight side_策略;
boost::geometry::model::multi_poly2;
boost::geometry::buffer(poly1、poly2、距离策略、侧策略、连接策略、结束策略、,
循环策略);
返回0;
}
此示例代码适用于笛卡尔坐标系。当我使用地理(或球面)时,我会得到这种编译错误:

include\boost/geometry/strategies/cartesian/side\u of_intersection.hpp(58):错误C2338:boost::is_integral::value include\boost/geometry/strategies/cartesian/side\u of_intersection.hpp(158):注意:请参阅正在编译的类模板实例化“boost::geometry::strategy::side::detail::multipliable_integral” 具有 [ T=坐标类型 ] include\boost/geometry/strategies/cartesian/side\u of_intersection.hpp(212):注意:请参阅正在编译的函数模板实例化“int boost::geometry::strategy::side::side\u of_intersection::sign\u of_compare(const T&,const T&,const T&,const T&)” 具有 [ T=坐标类型 ] include\boost/geometry/strategies/cartesian/side\u of_intersection.hpp(321):注意:请参阅函数模板实例化的参考“int boost::geometry::strategy::side::side\u of_intersection::sign\u of_addition\u of_两个_产品(const T&,const T&,const T&,const T&),const T&)”正在编译 具有 [ T=坐标类型 ]

我可以理解编译器对double的未实现方法,但问题是为什么它对笛卡尔坐标系下的double有效,而对地理坐标系下的double无效?
有人知道解决这个问题的方法吗?

地理CS中的多边形不支持作为
缓冲区
函数的输入,您可以在上面看到
buffer
只能接受地面军事系统的
point
。但问题是我能否以合理的方式解决这个问题?@dioda将投影映射到笛卡尔平面,计算笛卡尔缓冲区,投影回椭球体。