Ich habe eine große Anzahl von Polygonen (~ 100000) und versuchen, eine intelligente Möglichkeit zur Berechnung ihrer Schnittfläche mit einem regelmäßigen Gitter Zellen zu finden.Schneller Weg der Polygon-Kreuzung mit formschönen
Momentan erstelle ich die Polygone und Gitterzellen mit Hilfe von formschönen (basierend auf ihren Eckkoordinaten). Dann gehe ich mit einer einfachen For-Schleife durch jedes Polygon und vergleiche es mit benachbarten Gitterzellen.
Nur ein kleines Beispiel zur Veranschaulichung der Polygone/Gitterzellen.
from shapely.geometry import box, Polygon
# Example polygon
xy = [[130.21001, 27.200001], [129.52, 27.34], [129.45, 27.1], [130.13, 26.950001]]
polygon_shape = Polygon(xy)
# Example grid cell
gridcell_shape = box(129.5, -27.0, 129.75, 27.25)
# The intersection
polygon_shape.intersection(gridcell_shape).area
(BTW: die Gitterzellen haben die Abmessungen und den Polygonen 0.25x0.25 1x1 bei max)
Eigentlich dies für ein einzelnes Polygon/Rasterzelle Combo mit etwa 0,003 Sekunden ist recht schnell. Wenn Sie diesen Code jedoch auf einer großen Anzahl von Polygonen ausführen (jeder kann Dutzende von Gitterzellen schneiden), dauert das auf meinem Rechner etwa 15+ Minuten (bis zu 30+ Minuten, abhängig von der Anzahl der sich kreuzenden Gitterzellen), was nicht akzeptabel ist. Leider habe ich keine Ahnung, wie es möglich ist, einen Code für Polygonschnittpunkte zu schreiben, um den Überlappungsbereich zu erhalten. Hast du irgendwelche Tipps? Gibt es eine Alternative zu formschön?
Ich bin gespannt, wie Sie Ihre Polygone schleifen und schneiden. Können Sie mehr Code für den Prozess zeigen? Es wäre einfacher herauszufinden, wie dies optimiert werden kann. – tdedecko
Ich nehme grundsätzlich eine Reihe von lat/lon Eckwerten und wandle sie in einer for-Schleife in die Polygone um. Dann vergleiche ich jedes Polygon mit einer bestimmten Gitterzelle, was wiederum in einer For-Schleife erfolgt. Siehe dies: http://StackOverflow.com/a/13956110/1740928 – HyperCube