2013-09-01 46 views
0

我一直在製作小地圖來定位自己以使用勻稱。numpy格林美麗的線條座標

例如:

from shapely.geometry import MultiLineString 
from pprint import pprint 
import pylab 

coords = [((1,1),(1,13)),((3,1),(3,13)),((5,1),(5,13)),((7,1),(7,13)),((9,1),(9,13)), ((11,1),(11,13)),((13,1),(13,13)),((1,1),(13,1)),((1,3),(13,3)), ((1,5),(13,5)),((1,7),(13,7)),((1,9),(13,9)),((1,11),(13,11)),((1,13),(13,13)),((1,1),(13,13)),((3.5,1),(13,10.5)),((6.5,1),(13,7.5)),((9.5,1),(13,4.5)),((1,3.5),(10.5,13)),((1,6.5),(7.5,13)),((1,9.5),(4.5,13))] 
lines_1 = MultiLineString(coords) 
mow = lines_1.buffer(0.25)} 

我發現我是一個糟糕的打字員,這是很難寫的座標的長列表。

我注意到numpy的mgrid,並想知道是否有方法使用它來創建任意的 矩形xy網格,然後將mgrid轉換爲一個整齊的LineString列表。

網格通常被設計成像棋盤一樣。網格中的一些水平線然後被緩衝以變成多邊形,然後垂直線被緩衝,然後兩個級聯結合,並且我有我的棋盤。然後我採取不同的對角線,將它們與檢查板結合在一起,並從線性環中提取所得到的多邊形。

隨着地圖尺寸變大,不是最好的打字員,我希望有 可能是一種使用mgrid來做我的一些輸入更好的方法。

即。 x,y = np.mgrid [:55,:35]#rectangular

這給出了預期的x和y值。我很困惑,我可能會如何將這些 結果返回到Linestring(s)的Nx2數組作爲整形列表。

預先感謝您的任何指導。 克里斯

回答

1

您可以將vstack與轉置組合:

>>> x, y = np.mgrid[:2, :3] 
>>> np.vstack((x.ravel(),y.ravel())).T 
array([[0, 0], 
     [0, 1], 
     [0, 2], 
     [1, 0], 
     [1, 1], 
     [1, 2]]) 

如果您需要元組的列表:

>>> [(x,y) for x,y in zip(x.ravel(),y.ravel())] 
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2)] 
+0

這是偉大的多點和坦白說,我永遠也不會 – Chris

+0

我相信你已經解決了我的不好的打字問題,我會利用這些多點來播放和回報。謝謝,克里斯 – Chris

+0

它正是我所要求的。現在反思,認爲我實際上想要基本上包圍盒子成員。再次感謝您的解決方案,我也會參加邊界框。 – Chris