如何将 boost::geometry 多边形放入 STL 对象?
我确信这一定很简单,因为我在文档的任何地方都找不到示例。然而,我花了大约 4 个完整的工作日来尝试做这件小事。我是 C++ 新手(长期 R 程序员),但是这些小数据转换的事情让我发疯了。
是的,有一个问题的标题和我的很像:Getting the coordinates of points from a Boost Geometry polygon
但是代码太复杂了(而且发帖人一直在修改它很多次),以至于我无法对它做出正面或反面,我也无法想象其他 C++ 新手能够做到。
这是一个简单的示例,应该可以转换为其他一些 boost::geometry 数据类型,因此希望任何人都可以遵循它。
#include <iostream>
#include <boost/geometry.hpp>
#include <boost/geometry/geometries/polygon.hpp>
#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
//One thing I tried is a function to use with `for_each_point()` so I set that up first.
template <typename Point>
void get_coordinates(Point const& p)
{
using boost::geometry::get;
std::cout << get<0>(p) get<1>(p) << std::endl;
}
int main()
{
typedef boost::tuple<double, double> point;
typedef boost::geometry::model::polygon<point> polygon;
polygon poly;
boost::geometry::read_wkt("polygon((2.0 1.3, 2.4 1.7, 2.8 1.8, 3.4 1.2, 3.7 1.6, 3.4 2.0, 4.1 3.0, 5.3 2.6, 5.4 1.2, 4.9 0.8, 2.9 0.7, 2.0 1.3))", poly);
polygon hull;
boost::geometry::convex_hull(poly, hull);
// Now I know I can `dsv()` and print to the screen like this:
using boost::geometry::dsv;
std::cout
<< "hull: " << dsv(hull) << std::endl;
// And/Or I can use my function with for_each_point()
boost::geometry::for_each_point(hull, get_coordinates<point>);
return 0;
}
如何将这些坐标放入 STL 容器?我更喜欢两个 std::vector,一个用于 x,一个用于 y,但任何事情都可以。