Il est courant d'utiliser un index spatial de boîte englobante pour améliorer les performances lorsque vous travaillez avec un grand nombre de fonctionnalités. Lorsque des opérations sont effectuées sur des géométries individuelles avec un grand nombre de sommets, existe-t-il des stratégies d'optimisation similaires?
Par exemple, existe-t-il des structures de données qui peuvent accélérer le point dans un polygone ou les opérations d'union?
algorithm
optimization
indexing
Matthew Snape
la source
la source
R
), offriront à l'utilisateur beaucoup plus de contrôle sur de telles choses.Réponses:
OK pour Point dans le polygone uniquement:
Je pense que le problème est basé sur la "nature fractale" des objets 2D et la distribution incertaine et déséquilibrée de l'information spatiale. Si vous avez une grille régulière, il est facile de calculer la position ou la relation d'une cellule. Mais une isoline d'un modèle de terrain peut avoir des parties simples sur le côté et des parties mathématiquement compliquées de l'autre côté (parties morphologiquement actives sur les crêtes, les vallées ...).
L'indexation tente de gérer deux choses:
Une routine rapide qui vous donne un ensemble de seaux dans lequel vous collectez des objets que vous pouvez distinguer spatialement (les seaux!). Et les BBox sont faciles à calculer et à manipuler.
Un ensemble de relations (chevauchement, toucher) pour distinguer ou relier les éléments spatiaux (les objets).
Malheureusement, les BBox ne vous donneront aucune indication, combien de points se trouvent dans chaque BBox, comment les objets sont façonnés (trous, convexes, ...) et comment les informations sont distribuées localement (90% des points dans le coin supérieur gauche du BBox). Ainsi, vous pouvez trouver des membres d'opération rapide au niveau de l'objet et perdre beaucoup de temps dans la construction de relations du test.
Pour utiliser une approche plus irrégulière, la triangulation IMO en combinaison avec et quadtrees est l'une des stratégies, où vous pouvez rapprocher le bucketing et la partie construction de relations d'un index (bucketing == construction de relations).
Pour l'exemple Point-in-Polygon-Test, il est possible de créer un cache irrégulier en utilisant:
Le coût de construction de l'étain et des quadtrees est très élevé et difficile à calculer et le quadtree doit équilibrer les grands et les petits triangles (triangles qui ne rentreront pas dans des boîtes de sous-arbres plus petites).
Quelques outils et liens:
Triangle - Triangulation par polygone de contrainte
Quadtrees - Avec des exemples de sources
Dépôt de Stony Brook - Structures de données et géométrie du disque
la source