OK para Punto en Polígono solamente:
Creo que el problema se basa en la "naturaleza fractal" de los objetos 2d y en la distribución incierta y desequilibrada de la información espacial. Si se dispone de una cuadrícula regular, es fácil calcular la posición o la relación de una celda. Pero una isolínea de un modelo de terreno puede tener partes poco complicadas en un lado y otras matemáticamente complicadas en el otro (partes morfológicamente activas como crestas, valles...).
La indexación trata de manejar dos cosas:
-
Una rutina rápida que te da un conjunto de cubos en los que recoges objetos que puedes distiguir espacialmente (¡los cubos!). Y los BBoxes son fáciles de calcular y de manejar.
-
Un conjunto de relaciones (superposición, tacto) para distinguir o relacionar las cosas espaciales (los objetos).
Desgraciadamente, los BBoxes no le dan ninguna pista sobre cuántos puntos hay en cada BBox, sobre la forma de los objetos (agujeros, convexos, ...) y sobre la distribución local de la información (90% de los puntos en la esquina superior izquierda del BBox). Por lo tanto, usted puede encontrar miembros de la operación rápida en el nivel de los objetos y perder mucho tiempo en la construcción de la relación de la prueba.
Para utilizar un enfoque más irregular, la triangulación de la OMI en combinación con los quadtrees es una de las estrategias, en la que se puede acercar la parte de construcción de cubos y la parte de construcción de relaciones de un índice (bucketing == construcción de relaciones).
Para el ejemplo de Point-in-Polygon-Test es posible construir un caché irregular utilizando:
- Triangulación delaunay restringida de su cubierta de polímeros, con puntos de malla de borde adicionales para la detección del exterior de la cubierta
- poner esto en el esquema de indexación quadtree con no más de N triángulos por caja (cubos fractales)
- encontrar el conjunto de triángulos al que pertenece el punto - la hoja en el quadtree
- encontrar el triángulo en el que se encuentra el punto (la parte de prueba sobre un máximo de N triángulos)
- y pide los ID de los polígonos de los vértices del triángulo
- si el ID es único el punto pertenece al polígono, si no es así queda fuera
El coste de construir la lata y los quadtrees es muy alto y difícil de calcular y el quadtree tiene que equilibrar triángulos grandes y pequeños (triángulos que no caben en cajas de subárbol más pequeñas).
Algunas herramientas y enlaces:
Triángulo - Triangulación de polígono de restricción
Quadtrees - Con ejemplos de fuentes
Repositorio Stony Brook - Estructuras de datos y geometría de disco
1 votos
Los SIG utilizan muchas estructuras de datos especializadas, entre ellas varias formas de quadtrees, DCELs, etc., que se describen en los libros de texto de geometría computacional. ¿Preguntas por estos detalles de implementación o por los métodos que pueden emplear los usuarios en los lenguajes de programación?
0 votos
Gracias, creo que tengo que leer los libros de texto. El objetivo de mi pregunta era cómo esas estructuras de datos pueden ser precalculadas por adelantado. ¿Existen implementaciones precalculadas?
0 votos
Matthew, esa es una gran pregunta. Un SIG verdaderamente orientado al rendimiento ofrecería opciones a los usuarios para precalcular estructuras de datos para aplicaciones repetidas. En la actualidad, los programas que se anuncian como "SIG" suelen ofrecer este tipo de precomputación sólo en forma de "índices espaciales", mientras que otros programas de uso más general que también pueden realizar análisis SIG, como Mathematica (o hasta cierto punto
R
) ofrecerá al usuario mucho más control sobre estas cosas.0 votos
Creo que el problema se basa en la "naturaleza fractal" de los objetos 2d y la densidad de información de distribución incierta y desequilibrada.