2014-06-10 6 views
7

ich eine Gruppe von sieben überlappenden Kreisen und Ellipsen, die ich in eine Form zu kombinieren bin versucht, aber wenn ich cascaded_union() laufen bekomme ich den Fehler: Valueerror: No Shapely Geometrie von Nullwert erstellt werden istcascaded_union Mit Formen kombinieren

Hier ist, was ich bisher geschrieben haben:

import numpy as np 
import matplotlib.pyplot as plt 
from shapely.geometry import Polygon 
from shapely.ops import cascaded_union 

x = [-1.86203523, -1.91255406, -2.03575331, -2.16247874, -2.22159676, -2.17992322, 
    -2.06085035, -1.93121615, -1.86378696, -1.89641216, -1.838166, -1.88166833, 
    -1.98775658, -2.09688125, -2.14778844, -2.1119029, -2.00936791, -1.89773847, 
    -1.83967446, -1.86776838, -1.55136662, -1.60188546, -1.72508471, -1.85181013, 
    -1.91092815, -1.86925461, -1.75018174, -1.62054755, -1.55311836, -1.58574355, 
    -1.29187795, -1.33538028, -1.44146853, -1.5505932, -1.60150039, -1.56561485, 
    -1.46307986, -1.35145041, -1.2933864, -1.32148032, -1.07173048, -1.11382951, 
    -1.21649555, -1.32210007, -1.37136508, -1.33663714, -1.23740975, -1.12938125, 
    -1.07319027, -1.10037793, -1.87340556, -1.79563936, -1.5818673, -1.35208399, 
    -1.23527147, -1.29699902, -1.50261769, -1.73670954, -1.86787402, -1.82248584, 
    -1.98180156, -1.89591919, -1.66476691, -1.4180952, -1.29436593, -1.36303087, 
    -1.58554696, -1.83701142, -1.97627207, -1.92515911] 
y = [0.80459679, 0.9296353, 0.98448714, 0.93836285, 0.81715295, 0.68889502, 
    0.62558285, 0.66275485, 0.77954562, 0.91039814, 0.63006386, 0.73773591, 
    0.78496944, 0.74525131, 0.6408761, 0.53043177, 0.47591296, 0.50792219, 
    0.60849203, 0.72117057, 0.6981317, 0.82317021, 0.87802205, 0.83189777, 
    0.71068786, 0.58242993, 0.51911776, 0.55628977, 0.67308054, 0.80393305, 
    0.60213859, 0.70981064, 0.75704417, 0.71732605, 0.61295084, 0.50250651, 
    0.44798769, 0.47999693, 0.58056676, 0.6932453, 0.77841685, 0.8826156, 
    0.92832546, 0.88988856, 0.78888032, 0.6819987, 0.62923856, 0.66021523, 
    0.75754088, 0.86658463, 0.84706981, 0.76282008, 0.69418295, 0.67968584, 
    0.7274663, 0.81070415, 0.88267631, 0.90298332, 0.86022645, 0.77840601, 
    0.56517702, 0.48654992, 0.41794253, 0.39786557, 0.43758864, 0.51481438, 
    0.5861944, 0.61166165, 0.57692084, 0.50147268] 

m = 7 
n = 10 

x_1 = np.zeros(shape=(m,n)) 
y_1 = np.zeros(shape=(m,n)) 
for i in range(m): 
    for j in range(n): 
     x_1[i][j] = x[j+(n*i)] 
     y_1[i][j] = y[j+(n*i)] 
    plt.plot(x_1[i],y_1[i]) 
    plt.axis('scaled') 
plt.show() 

Poly1 = Polygon(zip(x_1[0],y_1[0])) 
Poly2 = Polygon(zip(x_1[1],y_1[1])) 
Poly3 = Polygon(zip(x_1[2],y_1[2])) 
Poly4 = Polygon(zip(x_1[3],y_1[3])) 
Poly5 = Polygon(zip(x_1[4],y_1[4])) 
Poly6 = Polygon(zip(x_1[5],y_1[5])) 
Poly7 = Polygon(zip(x_1[6],y_1[6])) 

polygons = [Poly1,Poly2,Poly3,Poly4,Poly5,Poly6,Poly7] 

boundary = cascaded_union(polygons) 

Mein Ziel etwas wie das Bild auf der rechten Seite zu bekommen, http://toblerity.org/shapely/code/cascaded_union.png , wo der Rest meines Codes zu bestimmen, wie viele Punkte in einer zufälligen Verteilung fallen in die Grenzen einer unregelmäßigen Form. Ich bin verwirrt darüber, worauf sich der Fehler bezieht, wenn der Kommentar "Nullwert" zurückgegeben wird. Übertreibe ich nicht die Überschneidung einzelner Formen in der richtigen Weise? Von dem, was ich schon gesucht habe cascaded_union nimmt eine Eingabe von einem Array von Formen, aber aus irgendeinem Grund, die in diesem Fall nicht funktioniert.

Antwort

5

Alle Ihre Geometrien sind ungültig.

Wenn Sie sich Ihr Diagramm genau ansehen, kreuzen sich die für jeden LinearRing verwendeten Linien in der Nähe von Anfang und Ende. Dies macht Polygone ungültig, was unberechenbare Ergebnisse liefert.

Hier ist meine Version von dem, was Sie tun:

# Discard the first and last points from each list of coordinates 
x_2 = x_1[:, 1:-1] 
y_2 = y_1[:, 1:-1] 
# Build a list of polygons 
polygons = [Polygon(zip(x_2[i], y_2[i])) for i in range(x_2.shape[0])] 
boundary = cascaded_union(polygons) # POLYGON ((-1.343821678336245 0.2... 
+0

Das half, vielen Dank! – user3555455