2016-03-03 60 views
0

我想用Python中使用Shapely庫的多邊形相交複合線。不幸的是,Shapely會破壞我的原始線條,以便它返回一條簡單的線條。如何在形狀相交期間保留一條複雜的線

例如:

# complex line folded back on itself (A-B-A) 
ls = shapely.geometry.LineString([(1,0), (1,2), (1,0)]) 
ls.length == 4.0 

# intersected with a covering bounding box 
bounding_box = shapely.geometry.Polygon([(0,0), (0,2), (2,2), (2,0)]) 

intersected = bounding_box.intersection(ls) 
# LINESTRING (1 0, 1 2) - (A-B) 
intersected.length == 2.0 

你可以看到,在原線路重複的組件已經一去不復返了。我可以理解這種行爲來自哪裏,在大多數情況下這可能是理智的選擇。

我正在尋找一種方法來完成交集,以便保留原始的行信息。在這種退化的情況下,我希望最終會得到完全相同的幾何形狀,一條長度爲4的摺疊線。在其他更復雜的情況下,我交叉的多邊形將切出原始線條,但我仍然需要在交集內保留任何重複的線段。

+1

你的行不是簡單的(即'ls.is_simple是False'),這就是重疊不被保留的原因。您可能需要提取重疊線段,這聽起來不太容易。 –

+0

這就是我使用的方法。其實,會在下面發帖。最初我實際上堆積了一系列三維線,希望能夠獨立切片。恥辱它不起作用,將在我的情況下超級有用! –

回答

0

目前,我正在通過做1線1段的蠻力。

segments = [shapely.geometry.LineString(x) for x in zip(line.coords, line.coords[1:])] 

for segment in segments: 
    intersected = polygon.intersection(segment) 
    # ... 

看起來像一個應該很容易矢量化的問題!

相關問題