多段线切割多边形

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多段线切割多边形相关的知识,希望对你有一定的参考价值。

参考技术A

多段线切割多边形,直观上来说首先就是求多段线与多边形之间的交点,然后利用这些交点与多边形顶点构成多边形,这样一个多边形就被切割成多个多边形。如下图所示:

以下图所示的分割为例,做简短说明:

对于上述难点,本文主要是利用geos中构建多边形的方法来解决,尤其是难点1,具体的原理可参考 直线切割凹多边形
1.获取带分割的几何图形,注意该几何图形是线形的,主要包括待切割的闭合环(如多边形的边界)以及分割线;

2.构建多边形,在geos主要是Polygonizer类,获取所有分割的多边形,当然也包括类似C23这样不合理的多边形,下一步是剔除这些多边形;

3.剔除不合理多边形,理论上来说,切割出来的多变如果被原始多边形包含就可以保留,调用geos中的Cover或Contains等拓扑计算便可以,但是在实际操作过程中有两个问题:
(1) 拓扑计算不正确 ,每次返回值都是false,猜测可能是精度问题,因为如果坐标都是整型,可以返回正确结果;
(2) 效率不高 ,相对于contain和within,建议在geos中优先使用cover或coverby。具体可参考 九交模型
所以选取一个折中方案,如下所示:

4.最后得到的就是一个vector集合,数据类型是geos::geom::Polygon*

GEOS库一些自己的见解和注意点
GEOS库学习之三:空间关系、DE-9IM和谓词

以上是关于多段线切割多边形的主要内容,如果未能解决你的问题,请参考以下文章

Cesium实现文字点多段线多边形的实时绘制

bzoj1091: [SCOI2003]切割多边形

切割多边形算法

切割多边形

openlayers绘制多边形

怎样在Unity 中绘制多边形