Métodos de indexação alternativos para operações de conjunto de pontos


17

É comum usar um índice espacial de caixa delimitadora para melhorar o desempenho ao trabalhar com um grande número de recursos. Onde as operações são executadas em geometrias individuais com um grande número de vértices, existem estratégias de otimização semelhantes?

Por exemplo, existem estruturas de dados que podem acelerar o ponto nas operações de polígono ou união?


1
Sob o capô, os GIS usam muitas estruturas de dados especializadas, incluindo várias formas de quadríceps, DCELs, etc., que são descritas em livros de geometria computacional. Você está perguntando sobre esses detalhes de implementação ou está perguntando sobre métodos que podem ser empregados pelos usuários nas linguagens de script?
whuber

Obrigado, acho que preciso ler os livros. O ponto da minha pergunta era como essas estruturas de dados podem ser pré-calculadas com antecedência. Existem implementações pré-calculadas?
23812 Matthew Snape

Matthew, essa é uma ótima pergunta. Um GIS verdadeiramente orientado para o desempenho ofereceria aos usuários opções de pré-cálculo de estruturas de dados para aplicação repetida. Tal como está, a publicidade de software como "GIS" geralmente oferece essa pré-computação apenas na forma de "índices espaciais", enquanto outros softwares de uso geral que também podem fazer análises GIS, como o Mathematica (ou até certo ponto R), oferecem ao usuário muito mais controle sobre essas coisas.
whuber

Penso que o problema se baseia na "natureza fractal" dos objetos 2D e na densidade de informações de distribuição incerta e desequilibrada.
Huckfinn 29/01

Respostas:


2

OK apenas para Ponto no polígono:

Penso que o problema se baseia na "natureza fractal" dos objetos 2D e na distribuição incerta e desequilibrada da informação espacial. Se você possui uma grade regular, é fácil calcular uma posição ou relação de uma célula. Mas um isoline de um modelo de terreno pode ter partes descomplicadas do lado e peças matematicamente complicadas do outro lado (partes morfologicamente ativas, como cumes, vales ...).

A indexação tenta lidar com duas coisas:

  1. Uma rotina rápida que fornece a você um conjunto de buckets nos quais você coleta objetos que você pode distinguir espacialmente (os buckets!). E BBoxes são fáceis de calcular e manipular.

  2. Um conjunto de relações (sobreposição, toque) para distinguir ou relacionar as coisas espaciais (os objetos).

Infelizmente, os BBoxes não dão idéia, quantos pontos existem em cada BBox, como os objetos são modelados (buracos, convexos, ...) e como as informações são distribuídas localmente (90% dos pontos no canto superior esquerdo do BBox). Portanto, você pode encontrar membros de operação rápida no nível do objeto e perder muito tempo na construção da relação do teste.

Para usar uma abordagem mais irregular, a triangulação da IMO em combinação com e quadtrees é uma das estratégias, nas quais você pode aproximar o bucket e a construção de relações de um índice (bucket == construção de relações).

Para o exemplo do Point-in-Polygon-Test, é possível criar um cache irregular usando:

  1. ! triangulação restrita delaunay da sua capa poli, com pontos de malha de borda adicionais para detecção fora da capa
  2. coloque isso no esquema de indexação quadtree com não mais de N triângulos por caixa (cubos fractais)
  3. encontre o conjunto triangular ao qual o ponto pertence - a folha na quadtree
  4. encontre o triângulo no qual o ponto se encontra (a parte do teste sobre o máximo de N triângulos)
  5. e solicite os IDs dos polígonos dos vértices do triângulo
  6. se o ID for único, o ponto pertence ao polígono; caso contrário, está fora

O custo para construir o estanho e os quadríceps é muito alto e difícil de calcular e o quadtree precisa equilibrar triângulos grandes e pequenos (triângulos que não cabem em caixas menores de subárvore).

Algumas ferramentas e links:

Triângulo - triangulação de polígonos de restrição

Quadtrees - com exemplos de fontes

Stony Brook Repository - Estruturas de dados e geometria de diskrete

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.