2016-05-05 21 views
1

私はnumpyメッシュグリッドを作成し、それをShapelyポリゴンに変換しようとしています。私はこれを非常に強引な方法で解決する可能性がありますが、これを達成するには良いトリックが必要だと感じていますが、まだそれを思いついていません。numpy meshgrid to Shapely polygons

これは(Jupyterで実行していると仮定)私の点のグリッドを取得します -

import numpy as np 
from matplotlib import pyplot 

fig = pyplot.figure(figsize=(10, 10)) 
ax = fig.add_subplot(111, aspect='equal') 

x,y = np.mgrid[-5:-1:8j, 1:5:8j] 
ax.plot(x,y, 'o', color='#000000') 
pyplot.show() 

今必要は格好の良い多角形を形成するために、水平方向と垂直方向のこれらの点のすべてを接続することです。私の最初の試みは、垂直線と水平線を描画し、ポリゴン化操作を実行するためにShapely MultiLineStringを生成することでした。これにより、メインの外側ポリゴンのみが作成されました。これは、MultiLineStringが外側ポリゴンの頂点のみを含むためです。

これは、ラスタとGDALを使用する方がより合理的かもしれませんが、私の状況では最終的な結果がシェープポリゴンである必要があります。

解決策を見つけるのに役立つヘルプがあります。

答えて

3

基本的には、MultiLineStringを構築する前にすべての行を定義する必要があります。

import numpy as np 
from shapely.geometry import MultiLineString 
from shapely.ops import polygonize 

x = np.linspace(-5, -1, 8) 
y = np.linspace(1, 5, 8) 

hlines = [((x1, yi), (x2, yi)) for x1, x2 in zip(x[:-1], x[1:]) for yi in y] 
vlines = [((xi, y1), (xi, y2)) for y1, y2 in zip(y[:-1], y[1:]) for xi in x] 

grids = list(polygonize(MultiLineString(hlines + vlines))) 
関連する問題