Es ist üblich, einen räumlichen Bounding-Box-Index zu verwenden, um die Leistung bei der Arbeit mit einer großen Anzahl von Features zu verbessern. Gibt es bei Operationen an einzelnen Geometrien mit einer großen Anzahl von Eckpunkten ähnliche Optimierungsstrategien?
Gibt es zum Beispiel Datenstrukturen, die Punkte in Polygonen oder Vereinigungsoperationen beschleunigen können?
algorithm
optimization
indexing
Matthew Snape
quelle
quelle
R
), dem Benutzer dies bietet viel mehr Kontrolle über solche Dinge.Antworten:
OK nur für Punkt im Polygon:
Ich denke, das Problem beruht auf der "fraktalen Natur" von 2D-Objekten und der unsicheren und unausgewogenen Verteilung von räumlichen Informationen. Wenn Sie ein reguläres Gitter haben, ist es einfach, eine Position oder Beziehung einer Zelle zu berechnen. Aber eine Isolinie eines Geländemodells kann unkomplizierte Teile auf der einen Seite und mathematisch komplizierte Teile auf der anderen Seite haben (morphologisch aktive Teile wie Grate, Täler ...).
Die Indizierung versucht, zwei Dinge zu handhaben:
Eine schnelle Routine, die Ihnen einen Satz von Eimern gibt, in dem Sie Objekte sammeln, die Sie räumlich unterscheiden können (die Eimer!). Und BBoxen sind einfach zu berechnen und zu handhaben.
Eine Reihe von Beziehungen (Überlappung, Berührung), um das räumliche Material (die Objekte) zu unterscheiden oder in Beziehung zu setzen.
Leider geben BBoxes keinen Hinweis darauf, wie viele Punkte in jeder BBox enthalten sind, wie die Objekte geformt sind (Löcher, konvex, ...) und wie die Informationen lokal verteilt sind (90% der Punkte in der oberen linken Ecke der BBox) BBox). So finden Sie möglicherweise schnelle Operationsmitglieder auf Objektebene und verlieren viel Zeit im Beziehungsaufbau des Tests.
Um einen unregelmäßigeren Ansatz zu verwenden, gehört die IMO-Triangulation in Kombination mit und Quadtrees zu den Strategien, bei denen Sie den Teil des Bucketing und den Teil des Beziehungsaufbaus eines Index näher zusammenrücken können (Bucketing == Beziehungsaufbau).
Für das Beispiel Point-in-Polygon-Test können Sie einen unregelmäßigen Cache erstellen, indem Sie Folgendes verwenden:
Die Kosten für den Bau der Dose und der Quadtrees sind sehr hoch und schwer zu berechnen, und der Quadtree muss große und kleine Dreiecke ausgleichen (Dreiecke, die nicht in kleinere Subtree-Boxen passen).
Einige Tools und Links:
Dreieck - Beschränkungspolygon-Triangulation
Quadtrees - Mit Quellbeispielen
Stony Brook Repository - Datenstrukturen und diskrete Geometrie
quelle