2016-05-05 11 views
1

Ich versuche, ein numpy Meshgitter zu erstellen und es in formschöne Polygone zu konvertieren. Ich kann das wahrscheinlich mit einer sehr brutalen Methode lösen, aber es fühlt sich an, als müsste es einen guten Trick geben, um das zu erreichen, aber ich bin noch nicht dazu gekommen.numpy Meshgrid zu formschönen Polygonen

Das mir das Gitter von Punkten bekommt (angenommener in Jupyter läuft) -

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

Jetzt ist die Notwendigkeit, alle diese Punkte horizontal und vertikal verbinden Shapely Polygone zu bilden. Mein erster Versuch war es, einen Shapely MultiLineString zu erzeugen, um vertikale und horizontale Linien zu zeichnen und dann eine Polygon-Operation auszuführen. Dies führte dazu, dass nur das äußere Hauptpolygon erstellt wurde - dies ist darauf zurückzuführen, dass der MultiLineString nur Scheitelpunkte auf dem äußeren Polygon enthält.

Ich weiß, dass dies unter Verwendung von Rastern und GDAL vernünftiger sein könnte, aber meine Umstände erfordern, dass das Endergebnis formschöne Polygone ist.

Jede Hilfe, die eine Lösung aufspürt, wird geschätzt!

Antwort

3

Sie müssen grundsätzlich jede Zeile definieren, bevor Sie den MultiLineString konstruieren.

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