Shapely中MultiLineString对象中的LineStrings顺序

时间:2015-10-16 16:11:54

标签: shapely geopandas

我有一个MultiLineString对象,其中组成它的LineStrings没有正确排序(或者至少我希望它们如何排序)。

举个例子,假设我有以下两个LineStrings:

from shapely.geometry import *
LineIWant=MultiLineString([((0,0),(2,5)),((2,5),(7,10)),((7,10),(6,15))])
LineIHave=MultiLineString([((0,0),(2,5)),((7,10),(6,15)),((2,5),(7,10))])

正如您所看到的,坐标是所有段连接/匹配的,但在我拥有的对象中,它们不是有序的。当我尝试使用interpolate方法获得沿对象75%的点时,这是有问题的:

LineIHave.interpolate(.75, normalized=True)

关于如何在MultiLineString对象中重新排序LineStrings的任何建议?

1 个答案:

答案 0 :(得分:3)

尝试将MultiLineString编成单个LineString:

from shapely.ops import linemerge
linemerge(LineIHave)  # LINESTRING (0 0, 2 5, 7 10, 6 15)
linemerge(LineIWant)  # LINESTRING (0 0, 2 5, 7 10, 6 15)

如果linemerge以错误的方式定向该行,您可以将其反转:

LineString(linemerge(LineIWant).coords[::-1])  # LINESTRING (6 15, 7 10, 2 5, 0 0)