【问题标题】:Check for counter-clockwise orientation instead of clockwise检查逆时针方向而不是顺时针方向
【发布时间】:2021-02-10 03:10:33
【问题描述】:

我有一个 GeoJson 多边形,它使用以下类型的点和多边形映射到增强多边形:

typedef boost::geometry::model::d2::point_xy<double> point_type;
typedef boost::geometry::model::polygon<point_type> polygon_type;

我遇到了一个问题,我想验证 GeoJson 多边形的方向是否正确。对于 GeoJson 功能,这意味着:外环(外壳)必须是逆时针方向,内环(孔)必须是顺时针方向。这与 boost 所做的检查相矛盾,后者验证外环是顺时针方向的。

有没有办法在geometry::is_validgeometry::correct 中检查逆时针方向?

【问题讨论】:

    标签: c++ boost


    【解决方案1】:

    查看boost::geometry::model::polygon类模板,你会发现第二个模板参数是ClockWise,默认是true

    我建议将其设置为 false:

    using polygon_type = boost::geometry::model::polygon<point_type, false>;
    

    【讨论】:

    • 感谢分享。不过,看起来方向用于外环和内环。对于 GeoJson,外环必须是 ccw,而内环必须是 cw。在其他多边形中,孔必须处于相反方向的情况类似。这似乎没有包含在 boost 中?
    • @benjist 我明白了 - 只是以相反的顺序填充内环行不通?
    • 这取决于渲染引擎,例如 web 映射 sdk 是否被优雅地处理。就我而言,我正在开发一个后端系统。我无法控制使用什么前端。作为一种解决方法,我可以为外壳和不同类型的孔创建两个增强多边形。但这有点麻烦。
    • @benjist 奇数。我刚刚在boost 的页面上找到了这个:“如果 ring_type 下的多边形被定义为顺时针方向,则外环必须具有顺时针方向,并且任何内环都必须与定义的方向相反(所以:计数器顺时针为顺时针外环)。如果 ring_type 是逆时针定义的,反之亦然。" - 这听起来就像你想要的那样?
    • 我会试试看的。不过奇怪的是:Boost 多边形的 inner_container_type 具有 ring_type 的元素,这些元素获取模板参数 ClockWise。例如,它们将以相同的顺序初始化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    • 2015-06-28
    相关资源
    最近更新 更多