如何利用JTS找出线段集合相交形成的多边形?
如何找出线段相交后形成的多边形?
我有一组线段,希望找出这些线段相交后形成的多边形。例如,我有以下两组线段序列:
- 第一组:(-0.5, 0.5) 至 (0, -0.5) 至 (0, 1) 至 (1, 1) 至 (1, 0) 至 (-0.5, 0)
- 第二组:(0, 2) 至 (0.5, 0) 至 (1, 2)
需要找出下图中红色箭头标识的4个多边形:
具体实现步骤
1. 线段拆分与交点计算
- 遍历所有线段对,判断每对是否相交(涵盖端点重合、交叉相交等所有情况)
- 对相交的线段,计算精确交点坐标,将原线段在交点处拆分为子线段,确保所有线段的端点仅为原始端点或交点
2. 构建拓扑边图
- 将所有端点(原始点、交点)作为图的节点,拆分后的子线段作为连接节点的边
- 为每条边记录相邻边信息:比如从节点A到节点B的边,需明确在B点可转向的、非当前边反向的所有边
3. 追踪闭合多边形环
- 选取任意一条未被访问的边作为起点,沿边走到终点后,在终点选择**保持统一转向规则(如始终逆时针)**的下一条未被访问的边
- 持续追踪路径,直到回到起始点,形成闭合环,这就是一个多边形
- 标记已访问的边,重复此过程,直到所有边都被访问,即可得到所有闭合多边形
4. 筛选目标多边形(按需操作)
- 若仅需内部小多边形,可通过多边形面积的方向(逆时针为正、顺时针为负)或包含关系筛选;也可通过面积大小排除外围的大多边形
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

