![]() |
1
6
这里有一个更通用的方法:计算所有点(直线的起点和终点+要拆分的点)沿直线的距离,按这些点排序,然后按正确的顺序生成线段。一起发挥作用:
在示例中应用此函数:
唯一的一点是,这并没有保留原始行的角(但问题中的示例也没有这样做,所以我不知道这是否是一个要求。这是可能的,但会使它更复杂一些) 使现代化 一个保持原始行中的角完整的版本(我的方法是也保持0/1的列表,以指示坐标是否要拆分):
应用于示例:
|
|
2
2
我喜欢乔里斯的做法。不幸的是,我在尝试使用它时遇到了一个关键的困难:如果字符串中有两个点位于同一坐标,那么它们的投影就不明确了。两者都将得到相同的投影值并进行排序。 如果你有一条从同一点开始和结束的路径,这一点尤为明显。结束点得到一个0的投影,并在开始处进行排序,这将抛开整个算法,因为它在结尾处期望“cuts”值为“1”。 下面是一个适用于shapely 1.6.1的解决方案:
是的,真的很简单。这里的重点是 必须 完全在线上。如果没有,请按中所示将它们捕捉到线上 this answer .
返回值是
|
![]() |
3
1
这是我尝试通过joris调整函数,以便也包括线段的角。这还不够完美,因为除了包括包含角点的合并线段之外,它还包括原始未合并线段。
|
![]() |
4
1
@joris的方法很好,但如果你试图传递一个点列表,其中一些点实际上并不与直线相交,就会出错,在我的例子中,这是因为我从一个多条直线的列表中预先计算出一个相交点列表。 我能够通过在继续执行该函数之前将输入点列表预过滤为仅实际相交的点来解决这个问题。对于大的点列表来说,它不会有效,但在我的情况下,我的列表总是很小,所以它对我来说已经足够好了。如果没有点与线相交,它也会起作用,在这种情况下,它会短路返回原始线作为列表(为了一致性)
我最初使用
|