2015-10-16 5 views
2

У меня есть объект MultiLineString, в котором строковые строки, которые его составляют, упорядочены неправильно (или, по крайней мере, как я хочу, чтобы они были упорядочены).Order of LineStrings в объекте MultiLineString в Shapely

В качестве примера, скажем, у меня есть два следующих объект LineString:

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))]) 

Как вы можете видеть, координаты таковы, что все сегменты подключения/матч, но в объекте у меня есть, они не являются в порядке. Это проблематично, когда я пытаюсь использовать метод интерполировать, чтобы получить точку 75% по объекту:

LineIHave.interpolate(.75, normalized=True) 

Любые предложения о том, как я могу изменить порядок объект LineString в моем объекте MultiLineString?

+1

Должен ли он остаться MultiLineString? Или это также нормально, чтобы закончить с LineString? ('Shapely.ops.linemerge (LineIHave)') – joris

ответ

2

Try делая 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)