Mais

Consulta para obter o casco convexo

Consulta para obter o casco convexo


A consulta abaixo está correta para obter uma forma de casco convexa:

DATA "the_geom from (select ST_ConvexHull (ST_Collect (the_geom)) As the_geom FROM xyz) como foo usando id único usando SRID = XXXX"


EDITAR: Update, tendo percebido tardiamente que esta é uma questão do Map Server.

Em geral, para obter o casco convexo, você desejará agrupar por id / gid, já que produzir o (s) casco (s) é uma operação agregada. Portanto, sem a parte Mapserver, a consulta seria semelhante a:

SELECT id, ST_ConvexHull (ST_Collect (the_geom)) como the_geom do grupo xyz por id;

Agora, para fazer o MapServer entender isso em uma definição de DADOS, você faria:

DATA "the_geom FROM (SELECT id como oid, ST_ConvexHull (ST_Collect (the_geom)) como the_geom FROM xyz grupo por id) como alguma_tabela USANDO oid UNIQUE USING SRID = 4326"

onde assumi que seu SRID é 4326.

Resposta original incorreta:
Você não precisa do SRID de forma alguma, a menos que você deseje transformar de um sistema de coordenadas para outro, ou você deseja apenas selecionar geometrias com um certo srid na consulta - mas seria um pouco incomum ter geometrias srid misturadas na mesma coluna. Não há necessidade de uma subconsulta, você pode apenas escrever,

SELECT ST_ConvexHull (ST_Collect (the_geom)) como the_hull FROM xyz WHERE id = someid;

onde mudei a saída parao cascopara diferenciar da entradathe_geom. Se você realmente pretende incluir geometrias com um certo srid, adicione e st_srid (the_geom) = some_srid 'no final da cláusula where.


Consulta para obter casco convexo - Sistemas de Informação Geográfica

Exemplos de programação GeoSpark (Scala)

val objectRDD = new RectangleRDD (sc, inputLocation, offset, "csv")

val resultSize = RangeQuery.SpatialRangeQuery (objectRDD, queryEnvelope, 0) .getRawRectangleRDD (). count ()

val objectRDD = new RectangleRDD (sc, inputLocation, offset, "csv")

val result = KNNQuery.SpatialKnnQuery (objectRDD, queryPoint, 1000) #### Consulta de junção espacial com índice val rectangleRDD = new RectangleRDD (sc, inputLocation2, offset2, "csv")

val objectRDD = new RectangleRDD (sc, inputLocation, offset, "wkt", "rtree", numPartitions)

val joinQuery = new JoinQuery (sc, objectRDD, rectangleRDD)

val resultSize = joinQuery.SpatialJoinQueryUsingIndex (objectRDD, rectangleRDD) .count ()

Conjuntos de dados distribuídos resilientes espaciais (SRDDs)

O GeoSpark estende RDDs para formar RDDs espaciais (SRDDs) e particiona de forma eficiente elementos de dados SRDD entre máquinas e apresenta transformações e ações (para SRDD) mais intuitivas espaciais paralelizadas (operações geométricas que seguem o padrão Open Geosptial Consortium (OGC)) para os usuários escreverem programas de análise de dados espaciais. Além disso, o GeoSpark estende a camada SRDD para executar consultas espaciais (por exemplo, consulta de intervalo, consulta de KNN e consulta de junção) em conjuntos de dados espaciais de grande escala. Depois que os objetos geométricos são recuperados na camada Spatial RDD, os usuários podem invocar as operações de processamento de consulta espacial fornecidas na Camada de Processamento de Consulta Espacial do GeoSpark que é executada no cluster na memória, decide como as tuplas relacionais do objeto espacial podem ser armazenadas, indexadas acessado usando SRDDs e retorna os resultados da consulta espacial exigidos pelo usuário.

(coluna, coluna. Longitude, latitude, coluna, coluna.)

(coluna, coluna. Longitude 1, Longitude 2, Latitude 1, Latitude 2, coluna, coluna.)

Dois pares de longitude e latitude apresentam os vértices na diagonal de um retângulo.

(coluna, coluna. Longitude 1, Latitude 1, Longitude 2, Latitude 2,.)

Cada tupla contém pontos ilimitados.

## Formato de dados com suporte GeoSpark oferece suporte a valores separados por vírgula ("csv"), valores separados por tabulação ("tsv"), texto conhecido ("wkt") e GeoJSON ("geojson") como os formatos de entrada. Os usuários só precisam especificar o formato de entrada como Divisor e a coluna inicial (se necessário) das informações espaciais em uma tupla como Deslocamento ao chamar Construtores.

O GeoSpark suporta métodos de particionamento espacial de tamanho igual ("equalgrid"), R-Tree ("rtree") e diagrama de Voronoi ("voronoi"). O particionamento espacial consiste em reparticionar o RDD de acordo com as localizações espaciais dos objetos. A junção espacial em RDD com partição espacial será muito rápida.

GeoSpark suporta dois índices espaciais, Quad-Tree e R-Tree.

GeoSpark atualmente fornece suporte nativo para Inside, Overlap, DatasetBoundary, Minimum Bounding Rectangle e Polygon Union em SRDDS seguindo o padrão Open Geospatial Consortium (OGC).

O GeoSpark até agora fornece consulta de intervalo espacial, consulta de junção e consulta KNN em SRDDs.

Jia Yu, Jinxuan Wu, Mohamed Sarwat. "A Demonstration of GeoSpark: A Cluster Computing Framework for Processing Big Spatial Data". (papel de demonstração) Em Proceeding of IEEE International Conference on Data Engineering ICDE 2016, Helsinki, FI, maio de 2016

Jia Yu, Jinxuan Wu, Mohamed Sarwat. "GeoSpark: A Cluster Computing Framework para processamento de dados espaciais em grande escala". (artigo breve) Em Proceeding of the ACM International Conference on Advances in Geographic Information Systems ACM SIGSPATIAL GIS 2015, Seattle, WA, EUA novembro de 2015

GeoSaprk usa JTS Plus (um JTS Topology Suite versão 1.14 estendido) para alguns cálculos geométricos.

Consulte o site do JTS Topology Suite e JTS Plus para obter mais detalhes.

### Site do projeto Visite o site do projeto GeoSpark wesbite para obter as últimas notícias e lançamentos.

GeoSpark é um dos projetos do DataSys Lab na Arizona State University. A missão do DataSys Lab é projetar e desenvolver sistemas experimentais de gerenciamento de dados (por exemplo, sistemas de banco de dados).


Modo de edição (Tab)> Selecionar tudo (a)> Malha> Vértices (Ctrl + v)> Casco convexo (h):

Operador de bmesh de casco convexo

bmesh.ops.convex_hull (bm, input, use_existing_faces)

Casco convexo

Constrói uma casca convexa a partir dos vértices em 'entrada'.

Se ‘use_existing_faces’ for verdadeiro, o casco não produzirá triângulos que são cobertos por uma face pré-existente.

Todos os vértices, faces e arestas do casco são adicionados a ‘geom.out’. Quaisquer elementos de entrada que terminem dentro do casco (ou seja, não são usados ​​por uma face de saída) são adicionados ao slot ‘interior_geom’. O slot ‘unused_geom’ conterá toda a geometria interna que está completamente sem uso. Por último, ‘holes_geom’ contém arestas e faces que estavam na entrada e fazem parte do casco.

O script de teste cria uma casca convexa para o objeto de malha ativo.

Suzanne e casco convexo Suzanne


2 respostas 2

Acho que seu resultado segue de propriedades conhecidas de profundidade simplicial. A profundidade simplicial de um ponto de consulta q em relação a um conjunto de pontos P é o número de simplicos com vértices de P que contêm q. (Existem diferentes opções para permitir que q esteja no limite ou exigir que esteja no interior, mas se você assumir que a união de P e q está na posição geral, significa que nenhum ponto d + 1 está em um hiperplano comum , onde d é a dimensão, portanto, não importa).

Sabe-se agora que a profundidade simplicial de q é & gt0 sempre que q está no casco convexo de P, e, de fato, a profundidade pode ser limitada de baixo por nd, onde n é o número de pontos em P e d é a dimensão . Em particular, para d = 2 e n & gt3, este é exatamente o seu resultado.

Existem vários lugares onde uma prova disso pode ser encontrada, aqui está um link para algumas notas de aula interessantes sobre limites para uma profundidade simples.

Aqui está uma abordagem elementar. A análise convexa tem resultados intuitivamente óbvios, mas tediosos de provar.

Seja $ C = operatornameP $ e $ p em C $. (Não há necessidade de estar no interior.)

Do teorema de Carathéodory existem $ m le 3 $ ($ = dim mathbb^2+1$ ) afinamente independente aponta $ x_k em P $ tal que $ p = sum_^ m mu_k x_k $ com $ sum_^ m mu_k = 1 $ e $ mu_k & gt 0 $.

Se $ m = 1 $, então escolha distinto $ x_2, x_3, x_4 em P setminus $ e defina $ P '= $, $ P '' = $ .

Se $ m = 2 $, então escolha $ x_3, x_4 em P setminus $ e defina $ P '= $, $ P '' = $ .

Portanto, podemos assumir $ m = 3 $. Escolha qualquer ponto $ x_4 in P setminus $ .

Por $ x in mathbb^ 2 $ let $ bar = binom <1>$ e define $ bar = begin Barra_1 & amp bar_2 & amp bar_3 & amp bar_4 end$. Como $ x_1, x_2, x_3 $ são afinamente independentes, os pontos $ bar_1, bar_2, bar_3 $ são linearmente independentes e, portanto, $ ker bar$ tem dimensão um. Deixe $ n in ker bar$ tal que $ n_4 & gt0 $.

Observe que podemos escrever $ bar

= bar mu $ com $ mu_4 = 0 $.

Desde $ sum_^ 4 n_k = 0 $ vemos que há pelo menos um $ k $ tal que $ n_k & lt 0 $. Seja $ t ^ * = min_ (- < mu_k sobre n_k>) $. Seja $ mu ^ * = mu + t ^ * n $ e observe que $ sum_^ 4 ( mu_k + t ^ * n_k) = 0 $ e $ mu_k + t ^ * n_k ge 0 $ e há algum $ k em <1,2,3 > $ tal que $ mu_k + t ^ * n_k = 0 $. Agora vamos $ P '= $ e $ P '' = $ .


Como obter a lista de vértices de cada lado de uma figura 3D de casco convexo

Da pergunta "Como obter uma lista de vértices em um casco convexo", posso obter a lista de vértices de cada triângulo que forma cada face do casco convexo a partir de um conjunto de pontos e também feche os triângulos adicionando o primeiro vértice de cada lista de vértices no final dessa lista.

Estou usando essas listas para traçar os números em $ LaTeX $ usando Tikz. O problema de ter triângulos é que Tikz lida com cada triângulo como uma face ou lado diferente do casco convexo e, portanto, ele os protege de forma diferente, mesmo se os triângulos estiverem no mesmo plano ou face. Por exemplo, os triângulos fechados dos pontos na questão acima referenciada são

e os resultados são confusos.

No entanto, se eu der a lista fechada de vértices contidos em cada face, excluindo as linhas de conexão na mesma face,

então a saída é mais clara.

(As faces que são triângulos devem ser fechadas duas vezes, já que as listas de vértices devem ter o mesmo comprimento)

Como eu poderia obter apenas a lista dos vértices de cada lado sem as arestas da mesma face do casco convexo?


GvSIG Desktop & # 8211 Open Source Geographic Information System

O gvSIG Desktop é um GIS poderoso, amigável e interoperável, usado por milhares de usuários em todo o mundo.

É fácil trabalhar em uma variedade de formatos com gvSIG Desktop, arquivos vetoriais e raster, bancos de dados e serviços remotos. O software oferece uma variedade de ferramentas para analisar e gerenciar suas informações geográficas.

O gvSIG Desktop foi projetado para ser uma solução facilmente extensível, permitindo aos usuários aprimorar o aplicativo de software e desenvolver soluções sob medida.

  • Acesso aos formatos vetoriais: SHP, DXF, GML, DWG, DGN, KML.
  • Acesso a formatos raster: BMP, GIF, TIFF, JPEG, JP2, PNG, VRT, DAT de ENVI, ERDAS (LAN, GIS, IMG), PCI Geomatics (PIX, AUX), ADF de ESRI, ILWIS (MPR, MPL) , MAP de PC Raster, ASC, PGM, PPM, RST de IDRISI, RMF, NOS, KAP, HDR, RAW.
  • Acesso a serviços remotos: OGC (WMS, WFS, WCS, WFS-T, WPS), ArcIMS, Ecwp.
  • Acesso a bancos de dados e tabelas: PostGIS, ArcSDE, JDBC, CSV.
  • Exibição: zooms, panorâmicas, quadros, localizador.
  • Consulta: informações, medição de área e distância, hiperlink.
  • Seleção: por ponto, por retângulo, por polígono, por camada, por polilinha, por círculo, por zona de amortecimento, pesquisa alfanumérica, inverter seleção, excluir seleção.
  • Pesquisando: por atributo, por coordenadas.
  • Geoprocessamento: buffer, interseção, clipe, dissolver, união, casco convexo, diferença, fusão, junção espacial, deslocamento XY, reprojeção, geoprocessamento Sextante.
  • Edição gráfica: adicionar camadas de eventos, encaixe, grade, planicidade, pilha de comandos, desfazer / refazer, copiar, mover, simetria, girar, dimensionar, editar vértice, polígono interno, matriz, explodir, dividir, unir, preencher polígono autocompletar, inserir ponto, multiponto, linha, arco, polilinha, polígono, retângulo, quadrado, círculo, elipse.
  • Edição alfanumérica: gerenciar campos, editar registros, calculadora de campo.
  • Serviços de catálogo e gazeta
  • Representação vetorial: símbolo único, quantidades (densidade de pontos, intervalos, símbolos graduados, símbolos proporcionais), categorias (expressões, valores únicos), atributos múltiplos, salvar / carregar legenda, construtor de simbologia, níveis de simbologia, bibliotecas de simbologia.
  • Representação raster: brilho, contraste, realce, transparência por pixel, opacidade, tabelas de cores, gradientes.
  • Etiquetagem: etiquetagem estática, etiquetagem avançada, etiquetagem individual.
  • Tabelas: estatísticas, filtro, ordem crescente / decrescente, link, junção, seleção de movimentação, exportação, importação de campos, codificação, normalização.
  • Construtor de layout: layout de página, elementos cartográficos (vista, legenda, norte, escala, quadros, imagem, texto, gráfico), grade, modelos.
  • Impressão: para PDF, para Postscript, exporte para vários formatos de imagem.
  • Análise de rede: topologia de rede, gerenciador de paradas, caminho mínimo, conectividade, spanning tree mínimo, matriz de origem e destino # 8211, provedor de instalações de emergência / mais próximas, áreas de serviço.
  • Raster e sensoriamento remoto: estatísticas, filtros, histograma, intervalo de escala, aprimorar, salvar em arquivo raster, vetorização, definição de região de interesse (ROI), componentes gerais, georreferenciamento, geolocalização, classificação supervisionada, álgebra de banda, perfis de imagem, árvore de decisão, componentes principais, tampa com borlas, fusão de imagens, diagrama de dispersão, mosaicos.
  • Publicação: MapServer & # 8217s WCS, WMS e WFS, Geoserver & # 8217s WFS.
  • 3D e animação: Vistas 3D, projetadas em XYZ e também esféricas (planetárias), camadas 3D, simbologia 3D, edição 3D, enquadramento 3D, animação 2D e 3D, visualização estéreo (divisão horizontal).
  • Topologia: construção topológica, edição topológica, generalização, direção de linha reversa, polígonos de / para linhas, linhas de / para pontos, triangulação de Delaunay, polígonos de Thiessen, construção, limpeza, correção de erro topológico (no modo Batch).
  • Outros: Gerente de Sistemas de Referência de Coordenadas, importação / exportação para WMC, script, gerente de traduções.

Local na rede Internet: www.gvsig.com
Apoio, suporte: Documentação
Desenvolvedor: Associação gvSIG
Licença: GNU General Public License (versão 3 ou posterior)

gvSIG Desktop é escrito em Java. Aprenda Java com nosso recomendado livros gratis e tutoriais grátis.

Leia nossa coleção completa de software de código aberto e gratuito recomendado. A coleção cobre todas as categorias de software.


Certificado de Pós-Graduação em Ciência de Dados Geoespaciais

Oferecemos um certificado de pós-graduação para alunos que já possuem um BA e desejam fazer um curso adicional em Ciência de Dados Geoespaciais. Nossos cursos apresentam aos alunos uma variedade de ferramentas de ciência de dados com foco em dados baseados em localização. O certificado complementa nosso Mestrado Profissional em Ciência de Dados Geoespaciais e serve como uma porta de entrada para o programa. Ele também funciona bem com outros programas de pós-graduação no College of Liberal Arts e em toda a Temple University.


Os menores cascos convexos ($ n $ -Simplex) de $ n + 2 $ pontos em $ mathbb^ n $

"Dado $ n $, encontre o valor mínimo de $ k $ com a seguinte propriedade: Quaisquer $ k $ (distintos) pontos em $ mathbb^ n $ pode ser particionado em dois subconjuntos disjuntos de modo que a interseção dos cascos convexos das duas partições não fique vazia. "

Um invólucro convexo de um conjunto é o conjunto convexo "menor" que contém o conjunto. Um conjunto convexo $ C $ é aquele em que $ forall x, y in C $, $ lambda x + (1- lambda) y in C $ para leq lambda leq 1 $.

Por exemplo, em $ mathbb$, suponha que temos três pontos, $ a, b, c $ com $ a & lt b & lt c $. Então, sejam $ a $ e $ c $ em uma partição e $ b $ na outra. Claramente, o casco convexo de $ $ é o segmento de linha que realmente passa $ b $.

Em $ mathbb^ 2 $, acho que $ k = 4 $. Temos quatro casos:

Caso 1: Todos os quatro pontos $ a, b, c, d $ são colineares. Então as partições podem ser $ $ e $ $ e seus cascos convexos claramente têm interseção não vazia.

Caso 2: três dos pontos são colineares, digamos $ a, b, c, $ com $ b $ entre $ a $ e $ c $. O ponto $ d $ está em outro lugar. Então deixe as partições novamente serem $ $ e $ $.

Caso 3: Os quatro pontos formam os vértices de um quadrilátero convexo. Então deixe os cascos convexos serem as "diagonais".

Caso 4: Os quatro pontos formam os vértices de um quadrilátero côncavo. Então, três dos pontos formam os vértices de um triângulo e o quarto ponto ficaria dentro dele. O casco convexo de $ $ é exatamente esse triângulo.

Suponho que $ k = n + 2 $. Eu acho que o casco convexo de $ n + 1 $ pontos em $ mathbb^ n $ é o $ n $ -simplex (não sei se essa é a notação correta). Sempre podemos formar um simplex com $ n + 1 $ pontos e, em seguida, ter o último ponto flutuando. Se esse ponto estiver dentro do simplex (casco convexo conjecturado), então estamos prontos. Se estiver fora dele, podemos meio que dividir o espaço com base nas "faces" do nosso simplex.

Por exemplo, em $ mathbb^ 3 $, temos cinco pontos. Podemos construir um tetraedro com quatro das pontas. O tetraedro terá quatro faces que podem ser estendidas para quatro planos, dividindo o $ mathbb^ 3 $. Cada avião corta o espaço em dois. Portanto, se nosso quinto ponto está em um lado da face, existe um vértice associado do tetraedro do outro lado. Podemos deixar esse vértice e este quinto ponto em uma partição e os outros três pontos na outra. Assim, temos um segmento de reta passando por um triângulo. Se houver problemas com o ponto estar no plano de uma das faces, acho que ainda podemos explicar esse caso simplesmente formando um triângulo e um segmento de linha.

Mas além de $ mathbb^ n $, não é óbvio para mim como provar ou refutar a conjectura. Acho que a solução não deve exigir nada, mas sim métodos elementares (não necessariamente fáceis ou simples, apenas técnicas que um aluno de graduação ou mesmo do ensino médio possa reconhecer). Na verdade, não conheço nenhuma geometria algébrica, mas sei que simplicidade e geometria afim têm algo a ver com o problema, daí as tags.


Dados vetoriais no terreno # 2172

Dados vetoriais: polígonos, polilinhas e painéis / rótulos.

Por enquanto, apenas um espaço reservado para reunir material de leitura. Mais por vir.

O texto foi atualizado com sucesso, mas estes erros foram encontrados:

Não podemos converter a tarefa em um problema no momento. Por favor, tente novamente.

O problema foi criado com sucesso, mas não podemos atualizar o comentário no momento.

Vmora comentou em 10 de fevereiro de 2015

Pjcozzi comentou em 16 de fevereiro de 2015

@bagnell você pode avaliar decalques de volume como uma abordagem para polígonos / polilinhas no terreno? Pense em desempenho e precisão.

Eu não sei como torná-lo rápido para polígonos, ele precisa de uma decomposição convexa (não necessariamente tão granular quanto a triangulação) ou um teste de ponto no polígono por pixel (que, se feito com uma textura 2D do polígono teria todas as desvantagens de apenas rasterizar uma textura como uma camada de imagem).

Pjcozzi comentou em 17 de fevereiro de 2015 & # 8226

@bagnell aqui estão algumas notas para a abordagem do volume de sombra:

  • Lembre-se de não usar a esfera delimitadora para o próprio polígono, pois o polígono real é onde o volume cruza o terreno. A coisa mais conservadora a fazer é usar a esfera delimitadora do volume, mas acho que podemos fazer melhor.
  • Para salvar a taxa de preenchimento, em vez de usar a altitude máxima para extrudar para cima, devemos adicionar uma função ao provedor de terreno para retornar a altura máxima (e talvez mínima) de uma extensão com base no terreno carregado (talvez com um retorno de chamada para refinamento?) . Para começar, isso poderia ser baseado na esfera delimitadora de cada um (ou altura máxima quando for menor), mas poderíamos tornar isso muito melhor com uma extensão de malha quantizada que mantém mín / máx por nó. Isso também pode ser um serviço da web.

Pjcozzi comentou em 17 de fevereiro de 2015

Notas de nossa discussão sobre outdoors / etiquetas:

  • Origem do teste de profundidade no sombreador de vértice usando buffer de profundidade do terreno. Isso exigirá VTF, que tem 97% de suporte (MAX_VERTEX_TEXTURE_IMAGE_UNITS).
  • Consulta de altura do provedor de terreno. Tenha retorno de chamada para quando refinar. A camada de entidade atualizará a altura dos painéis.
  • A longo prazo, podemos precisar da capacidade de mostrar apenas o número x mais próximo / mais importante de rótulos e não testá-los em profundidade. Isso nos permite ver rótulos por meio de terrenos, edifícios, etc.

Pjcozzi comentou em 17 de fevereiro de 2015

Além disso, espero que as abordagens de espaço de tela (volume de sombra, decalque, etc.) sejam muito melhores para edição em tempo de execução do que abordagens de textura e subamostragem (subamostragem pode ser OK, mas espero rasterizar a textura, especialmente se fizemos uma quadtree esparsa com ele, seria dolorosamente lento).

Pjcozzi comentou em 17 de fevereiro de 2015

Consulta de altura do provedor de terreno.

Não tenho certeza de como a implementação se parece agora, mas podemos fazer muito melhor do que olhar com força bruta para cada triângulo. Podemos assumir que o último triângulo usado será usado a seguir e também usar informações de adjacência (pré-calcular uma vez no cliente, eu acho, ou como uma extensão de malha quantizada) ou um arranjo de árvore quádrupla dentro do bloco para encontrar o triângulo retângulo .

Tenha retorno de chamada para quando refinar. A camada de entidade atualizará a altura dos painéis.

Isso poderia ser feito em um trabalhador da web, por exemplo, cada vez que obtemos um novo bloco, um trabalhador da web olha para todas as posições assinadas para enfileirar retornos de chamada (ou eventos). Pode ser o mesmo trabalhador que processa o bloco para visualização ou um separado para diminuir a latência para visualização do terreno ao custo de atrasar a atualização dos dados vetoriais.

Pjcozzi comentou em 17 de fevereiro de 2015

@bagnell talvez façamos as polilinhas por último. Podemos avaliar os volumes de sombra para eles usando a geometria do corredor e subamostragem usando a infraestrutura que construiremos para outdoors / etiquetas. O Capítulo 3 de Técnicas de Visualização Orientadas à Usabilidade para Exibição de Mapa de Navegação 3D é uma boa comparação, mas sua subamostra faz interseções exatas de segmento de linha / triângulo - e ainda não obtém qualidade visual adequada para terreno de alta resolução.

Kring comentou em 18 de fevereiro de 2015

Para começar, isso poderia ser baseado na esfera delimitadora de cada um (ou altura máxima quando for menor), mas poderíamos tornar isso muito melhor com uma extensão de malha quantizada que mantém mín / máx por nó.

Não sei o que você quer dizer aqui. Ladrilhos de malha quantizada já sabem a altura mínima e máxima de qualquer ponto dentro do ladrilho. É a isso que você está se referindo ou precisa de outra coisa? Na verdade, os blocos de mapa de altura também, são calculados apenas no momento do carregamento.

Pjcozzi comentou em 18 de fevereiro de 2015

Não. Isso bastará. Eu claramente não olhei para o formato.

Pjcozzi comentou em 21 de fevereiro de 2015

@bagnell Eu tinha mais ideias sobre o ponto no volume.

  • Se ainda não estiver nele: esfera delimitadora - & gt casco convexo extrudado - & gt teste exato
  • Se já estiver nele: esfera inscrita - & gt casco convexo inscrito - & gt teste exato (na verdade, provavelmente verifique a esfera delimitadora e o casco convexo extrudado antes do teste exato)
  • Posteriormente: considere BVH para evitar O (n) em todos os polígonos.
  • Provavelmente precisa de uma heurística para ver se o casco convexo vale a pena, por exemplo, se o polígono já é convexo ou pode ser dividido em algumas regiões convexas.
  • Acho que devemos começar codificando o ponto genérico (ou próximo ao plano?) No volume extrudado, mas suspeito que também iremos querer uma versão otimizada para nosso caso único:
    • Não precisamos verificar a tampa inferior sob o terreno
    • Em geral, precisaremos verificar a tampa superior, testar cada triângulo seria lento, mas acho que podemos nos safar apenas verificando a altura da câmera. No entanto, espero que haja um problema porque isso pressupõe um mosaico infinito da tampa superior, portanto, podemos precisar verificar uma altura conservadora e, em seguida, verificar os triângulos (a menos que a câmera esteja acima de uma altura máxima).

    Pjcozzi comentou em 25 de abril de 2015

    Bagnell comentou em 21 de agosto de 2015

    • Adicione altura mínima dinâmica. (Necessita de alterações nas geometrias suportadas)
    • Consulte o terreno para obter uma altura máxima mais estreita.
    • Adicione a opção de geometrias para criar diferentes volumes delimitadores.
    • Lote por cor?
    • OBB mais apertado? Talvez calcular a partir de triângulos

    Likangning93 comentou em 25 de outubro de 2017

    Técnicas de visualização orientadas à usabilidade para exibição de mapas de navegação 3D. 2014.

    Essa coisa é como um Guia do Mochileiro ou algo waoww

    Pjcozzi comentou em 7 de fevereiro de 2018

    Eu apenas li a abstração, mas isso pode ser interessante:

    Visualização de mapa vetorial diferida

    A renderização interativa de mapas vetoriais em grande escala é um desafio chave para sistemas de software de visualização geográfica de alta qualidade. Neste artigo, apresentamos uma nova abordagem para a visualização de mapas vetoriais em grande escala sobre terrenos de campo de altura detalhados. Nosso método usa uma abordagem de sombreamento de linha diferida para renderizar mapas vetoriais em grande escala diretamente em um estágio de sombreamento de espaço de tela sobre uma visualização de terreno. O fato de não haver uma renderização poligonal geométrica tradicional envolvida permite que nosso algoritmo supere os algoritmos de renderização de mapas vetoriais convencionais para sistemas de informações geográficas. Nossa abordagem de renderização de linha diferida em cluster flexível permite que um usuário personalize e aplique métodos avançados de estilização de vetor de maneira interativa, bem como a integração em um sistema de nível de detalhe de mapa vetorial.

    https://dl.acm.org/citation.cfm?doid=3002151.3002157

    @ likangning93, leia e diga-nos o que você pensa.

    Thoenu comentou em 15 de março de 2018 & # 8226

    Caro patrick e outros, você pode querer considerar o artigo da revista para o link acima, que contém mais algumas análises de desempenho:

    Hpinkos comentou em 15 de março de 2018

    Likangning93 comentou em 30 de abril de 2018 & # 8226

    Essa abordagem é incrível e assustadora. O ponto crucial é que em vez de renderizar "linhas" como geometria, eles fazem uma passagem de pós-processo em tela cheia que verifica cada fragmento de terreno na visualização atual para ver o quão perto está de um segmento de linha, com todos os segmentos de linha armazenados em texturas usando uma grade uniforme de BVHs.

    Deixando de lado as preocupações não confirmadas sobre questões de precisão, finalmente é hora de escrever uma travessia BVH de GPU? Finalmente chegou a minha hora ?!

    [EDITAR] ok uma lista real de preocupações:

    • problemas de precisão mencionados anteriormente: este artigo projeta de volta fragmentos de terreno para "coordenadas mundiais" e, em seguida, faz verificações 2D para ver se eles estão "próximos" das linhas. Eu suspeito que não podemos obter precisão suficiente dado o quão grande é o nosso espaço de "coordenadas mundiais"
    • além disso, aquela coisa de verificações 2D - isso não funciona bem em um globo, você pode ter que definir uma série de sistemas de coordenadas locais. Ou talvez remapear tudo para coordenadas esféricas? Mas isso vem com seu próprio conjunto de problemas de exatidão / precisão.
    • quão caro é adicionar / remover linhas? Parece muita estrutura de dados para atualizar.
    • como isso se integraria com entidades / primitivas? Essa técnica tenta compactar todas as polilinhas em um único conjunto constante de passagens.
    • como se comportar quando a contagem de linhas em um cluster sobrecarrega a alocação de pixels do cluster? Adicionar outra coleção de polilinha?

    Estou me apaixonando pela ideia, o que é perigoso. Eu me pergunto quanta matemática podemos mover para o espaço visual. e atualizações parciais de textura não são que lento. e armazenar polilinhas em texturas flutuantes com precisão dupla é possível.

    Likangning93 comentou em 30 de abril de 2018 & # 8226

    Uma abordagem de espaço de tela para renderizar polilinhas no terreno

    Uma dificuldade que tenho com essa técnica é a exigência de renderizar uma parede e um volume de sombra, o que parece mais caro para nós por causa do WebGL. No entanto, combinando isso com ideias que aproveitam a tabela de lote para abate de fragmentos em # 6393, eu me pergunto se poderíamos:

    • renderizar um volume fino para cada segmento de linha, carregando um mapeamento de ID de lote para posições inicial / final e um vetor ou algo que tomado com início / fim descreve um sistema de coordenadas local com o plano XY tangente ao elipsóide
    • para cada fragmento, observe a profundidade do globo e calcule a posição do espaço ocular. Amasse essa posição e as posições inicial / final no plano XY do sistema de coordenadas local transformado em espaço ocular e verifique a colinearidade com início / fim, que também foram esmagados.

    Teríamos que desabilitar o Z inicial, eu acho, por exemplo, se a câmera estiver olhando para os volumes bem de perto de forma que o "topo" de um volume se sobreponha aos volumes adjacentes. Mas talvez não seja um preço tão alto a pagar para reduzir isso a uma única passagem.

    Também podemos modular a "espessura" do volume da sombra usando um atributo de vértice normal que é adicionado às posições com base na distância da câmera.

    Algumas contas do verso do envelope para o consumo da tabela de lote:

    • 5.000 polilinhas com 10 pontos cada perfazem 5.000 * 9 = 45.000 segmentos e entradas na tabela de lote
    • Digamos que cada segmento tenha 1 posição vec3 de alta precisão para a posição inicial, 1 deslocamento vec3 para chegar à posição final e 1 vec3 ingênuo normal. São 12 flutuações, então digamos que dividimos todos os dados em 3 texturas
    • isso é algo como 3 texturas flutuantes RBGA 256 x 256, o que não parece muito terrível

    Likangning93 comentou em 30 de abril de 2018

    A abordagem de colinearidade também nos dá dados que podem ser vitais para fazer coisas de estilo.

    Likangning93 comentou em 30 de abril de 2018 & # 8226

    Pergunta: qual é a extensão do suporte material que queremos aqui? Há um incrível castelo de areia Polyline Color em desenvolvimento e eu estou. não tenho certeza de como fazer isso quando estamos trabalhando em um espaço de fragmento.

    Algo algo passa duas cores por segmento e lerp talvez.

    Pjcozzi comentou em 30 de abril de 2018

    Para o estilo, comece com a cor e a largura da linha. Então corra. Depois, texturas.

    Likangning93 comentou em 1 de maio de 2018 e # 8226

    Portanto, o truque do "volume de sombra de passagem única para linhas" acima provavelmente tem os mesmos problemas que um algoritmo de volume de sombra convencional para polilinhas no terreno, ou seja, dificuldade em manter a largura do espaço da tela constante:

    • quando desenhado perpendicularmente ao gradiente de uma encosta íngreme e visto de parede
    • quando visto em ângulos voltados para o horizonte em terreno plano

    Mas como é de passagem única e não requer nenhum estado de renderização especial, ele ainda pode compartilhar uma chamada de desenho com o algoritmo de parede de @pjcozzi, o que um volume de sombra convencional não pode fazer. Então isso ainda é meio promissor.

    [EDIT] pensando bem, a "visualização de mapa vetorial diferida" provavelmente também sofre de manchas e problemas de borda porque depende de algo como a técnica de colinearidade 2D para verificar se um fragmento faz parte de um segmento de linha.

    Likangning93 comentou em 11 de maio de 2018

    truque do "volume de sombra de passagem única para linhas"

    Acho que essa técnica é promissora o suficiente para que possamos começar a montar um plano de jogo. Aqui estão algumas fotos do meu protótipo em várias distâncias de visualização, devemos ser capazes de simular "largura de espaço de tela constante" razoavelmente bem:

    | |

    :-------------------------:|:-------------------------:|:-----------:
    perto de | longe | onde quer que você esteja

    Eu acho que por meio da API Primitiva isso vai se parecer com um tipo Geometry personalizado (para ser usado por meio de um método que constrói matrizes de GeometryInstances) e um tipo Primitivo personalizado que será realmente apenas um invólucro leve em torno do Primitivo, mas pode ter que emaranhar um pouco com GroundPrimitive para informações do terreno.

    Porém, como isso deve se integrar à API de entidade? Apenas algo como um sinalizador onTerrain que você pode adicionar a entidades de polilinha? Estou razoavelmente certo de que isso vai precisar de seu próprio espaguete de atualizadores e batchers sob o capô, devido ao Primitivo personalizado.

    Também pode ser mais sábio começar com o suporte material limitado a, digamos, cores simples, mas tentarei ter uma ideia mais concreta de quão difícil será o suporte total do material em breve.


    Sistemas de informações geográficas: sistemas de informações geográficas: o que são

    Os Sistemas de Informação Geográfica (SIGs) servem para manter, analisar e visualizar dados espaciais que representam objetos geográficos, como montanhas, lagos, casas, estradas, túneis. Para dados espaciais, os atributos geométricos (espaciais) desempenham um papel fundamental, representando, por exemplo, pontos, linhas e regiões no plano ou volumes no espaço tridimensional. Eles modelam características geográficas do mundo real, como pontos de medição geodésicos, linhas de limite entre pedaços de terra adjacentes (em um banco de dados cadastral), lagos ou regiões de parques recreativos (em um sistema de informações turísticas). Em três dimensões, os dados espaciais descrevem túneis, sistemas de tubos subterrâneos em cidades, cadeias de montanhas ou pedreiras. In addition, spatial data in a GIS possess non-geometric, so-called thematic attributes, such as the time when a geodesic measurement was taken, the name of the owner of a piece of land in a cadastral database, the usage history of a park.

    This chapter aims to highlight some of the data structures and algorithms aspects of GISs that define challenging research problems, and some that show interesting solutions. More background information and deeper technical expositions can be found in books such as [38, 64, 66, 75].

    Geometric Objects

    Our technical exposition will be limited to geometric objects with a vector representation. Here, a point is described by its coordinates in the Euclidean plane with a Cartesian co- ordinate system. We deliberately ignore the geographic reality that the earth is (almost) spherical, to keep things simple. A line segment is defined by its two end points. A polygonal line is a sequence of line segments with coinciding endpoints along the way. A (simple) polygonal region is described by its corner points, in clockwise (or counterclockwise) order around its interior. In contrast, in a raster representation of a region, each point in the region, discretized at some resolution, has an individual representation, just like a pixel in a raster image. Satellites take raster images at an amazing rate, and hence raster data abound in GISs, challenging current storage technology with terabytes of incoming data per day. Nevertheless, we are not concerned with raster images in this chapter, even though some of the techniques that we describe have implications for raster data [58]. The reason for our choice is the different flavor that operations with raster images have, as compared with vector data, requiring a chapter of their own.

    Topological versus Metric Data

    For some purposes, not even metric information is needed it is sufficient to model the topology of a spatial dataset. How many states share a border with Iowa? is an example of a question of this topological type. In this chapter, however, we will not specifically study the implications that this limitation has. There is a risk of confusing the limitation to topological aspects only with the explicit representation of topology in the data structure. Here, the term explicit refers to the fact that a topological relationship need not be computed with substantial effort. As an example, assume that a partition of the plane into polygons is stored so that each polygon individually is a separate clockwise sequence of points around its interior. In this case, it is not easy to find the polygons that are neighbors of a given polygon, that is, share some boundary. If, however, the partition is stored so that each edge of the polygon explicitly references both adjacent polygons (just like the doubly connected edge list in computational geometry [62]), then a simple traversal around the given polygon will reveal its neighbors. It will always be an important design decision for a data structure which representation to pick.

    Geometric Operations

    Given this range of applications and geometric objects, it is no surprise that a GIS is expected to support a large variety of operations. We will discuss a few of them now, and then proceed to explain in detail how to perform two fundamental types of operations in the remainder of the chapter, spatial searching and spatial join. Spatial searching refers to rather elementary geometric operations without which no GIS can function. Here are a few examples, always working on a collection of geometric objects, such as points, lines, polygonal lines, or polygons. UMA nearest neighbor query for a query point asks for an object in the collection that is closest to the query point, among all objects in the collection. UMA distance query for a query point and a certain distance asks for all objects in the collection that are within the given distance from the query point. UMA range query (or window query) for a query range asks for all objects in the collection that intersect the given orthogonal window. UMA ray shooting query for a point and a direction asks for the object in the collection that is hit first if the ray starts at the given point and shoots in the given direction. UMA point- eun-polygon query for a query point asks for all polygons in the collection in which the query point lies. These five types of queries are illustrations only many more query types are just as relevant. For a more extensive discussion on geometric operations, see the chapters on geometric data structures in this Handbook. In particular, it is well understood that great care must be taken in geometric computations to avoid numeric problems, because already tiny numerical inaccuracies can have catastrophic effects on computational results. Practically all books on geometric computation devote some attention to this problem [13, 49, 62], and geometric software libraries such as CGAL [11] take care of the problem by offering exact geometric computation.

    Geometric Data Structures

    Naturally, we can only hope to respond to queries of this nature quickly, if we devise and make use of appropriate data structures. An extra complication arises here due to the fact that GISs maintain data sets too large for internal memory. Data maintenance and analysis operations can therefore be efficient only if they take external memory properties into account, as discussed also in other chapters in this Handbook. We will limit ourselves here to external storage media with direct access to storage blocks, such as disks (for raster data, we would need to include tertiary storage media such as tapes). A block access to a random block on disk takes time to move the read-write-head to the proper position (the latency), and then to read or write the data in the block (the transfer). With today’s disks, where block sizes are on the order of several kBytes, latency is a few milliseconds, and transfer time is less. Therefore, it pays to read a number of blocks in consecution, because they require the head movement only once, and in this way amortize its cost over more than one block. We will discuss in detail how to make use of this cost savings possibility.

    All operations on an external memory geometric data structure follow the general filter- refinement pattern [54] that first, all relevant blocks are read from disk. This step is a first (potentially rough) filter that makes a superset of the relevant set of geometric objects available for processing in main memory. In a second step, a refinement identifies the exact set of relevant objects. Even though complicated geometric operators can make this refinement step quite time consuming, in this chapter we limit our considerations to the filter step. Because queries are the dominant operations in GISs by far, we do not explicitly discuss updates (see the chapters on external memory spatial data structures in this Handbook for more information).

    Applications of Geographic Information

    Before we go into technical detail, let us mention a few of the applications that make GISs a challenging research area up until today, with more fascinating problems to expect than what we can solve.

    Maps are the most well-known visualizations of geographical data. In its simplest form, a map is a partition of the plane into simple polygons. Each polygon may represent, for instance, an area with a specific thematic attribute value. For the attribute land use, polygons can stand for forest, savana, lake areas in a simplistic example, whereas for the attribute state, polygons represent Arizona, New Mexico, Texas. In a GIS, each separable aspect of the data (such as the planar polygonal partitions just mentioned) is said to define a camada. This makes it easy to think about certain analysis and viewing operations, by just superimposing (overlaying) layers or, more generally, by applying Boolean operations on sets of layers. In our example, an overlay of a land use map with a state map defines a new map, where each new polygon is (some part of) the intersection of two given polygons, one from each layer. Em map overlay in general, a Boolean combination of all involved thematic attributes together defines polygons of the resulting map, and one resulting attribute value in our example are the savannas of Texas. Map overlay has been studied in many different contexts, ranging from the special case of convex polygons in the partition and an internal memory plane-sweep computation [50] to the general case that we will describe in the context of spatial join processing later in this chapter.

    Map visualization is an entire field of its own (traditionally called cartography), with the general task to layout a map in such a way that it provides just the information that is desired, no more and no less one might simply say, the map looks right. What that means in general is hard to say. For maps with texts that label cities, rivers, and the like, looking right implies that the labels are in proper position and size, that they do not run into each other or into important geometric features, and that it is obvious to which geometric object a label refers. Many simply stated problems in map labeling turn out to be NP-hard to solve exactly, and as a whole, map labeling is an active research area with a variety of unresolved questions (see [47] for a tutorial introduction).

    Cumartographic Generalization

    If cartographers believe that automatically labeled maps will never look really good, they believe even more that another aspect that plays a role in map visualization will always need human intervention, namely map generalization. Generalization of a map is the process of reducing the complexity and contents of a map by discarding less important information and retaining the more essential characteristics. This is most prominently used in producing a map at a low resolution, given a map at a high resolution. Generalization ensures that the reader of the produced low resolution map is not overwhelmed with all the details from the high resolution map, displayed in small size in a densely filled area. Generalization is viewed to belong to the art of map making, with a whole body of rules of its own that can guide the artist [9, 46]. Nevertheless, computational solutions of some subproblem help a lot, such as the simplification of a high resolution polygonal line to a polygonal line with fewer corner points that does not deviate too much from the given line. For line simplification, old algorithmic ideas [16] have seen efficient implementations [28] recently. Maps on demand, with a selected viewing window, to be shown on a screen with given resolution, imply the choice of a corresponding scale and therefore need the support of data structures that allow the retrieval up to a desired degree of detail [4]. Apart from the simplest aspects, automatic map generalization and access support are open problems.

    Maps have been used for ages to plan trips. Hence, we want networks of roads, railways, and the like to be represented in a GIS, in addition to the data described above. This fits naturally with the geometric objects that are present in a GIS in any case, such as polygonal lines. A point where polygonal lines meet (a node) can then represent an intersection of roads (edges), with a choice which road to take as we move along. The specialty in storing roads comes from the fact that we want to be able to find paths between nodes efficiently, for instance in car navigation systems, while we are driving. The fact that not all roads are equally important can be expressed by weights on the edges. Because a shortest path

    Geographic Information Systems 55-5

    computation is carried out as a breadth first search on the edge weighted graph, in one way or another (e.g. bidirectional), it makes sense to partition the graph into pages so as to minimize the weight of edges that cross the cuts induced by the partition. Whenever we want to maintain road data together with other thematic data, such as land use data, it also makes sense to store all the data in one structure, instead of using an extra structure for the road network. It may come as no surprise that for some data structures, partitioning the graph and partitioning the other thematic aspects go together very well (compromising a little on both sides), while for others this is not easily the case. The compromise in partitioning the graph does almost no harm, because it is NP-complete to find the optimum partition, and hence a suboptimal solution of some sort is all we can get anyway. Even though this type of heuristic approaches for maintaining road networks in GIS are useful [69], it is by no means clear whether this is the best that can be achieved.

    Spatiotemporal Data

    Just like for many other database applications, a time component brings a new dimension to spatial data (even in the mathematical sense of the word, if you wish). How did the forest umareumas in New Mexico develop over the last 20 years? Questions like this one demonstrate that for environmental information systems, a specific branch of GISs, keeping track of developments over time is a must. Spatiotemporal database research is concerned with all problems that the combination of space with time raises, from models and languages, all the way through data structures and query algorithms, to architectures and implementations of systems [36]. In this chapter, we refrain from the temptation to discuss spatiotemporal data structures in detail see Chapter 22 for an introduction into this lively field.

    The development of spatial data over time is interesting not only for explicit queries, but also for data mining. Here, one tries to find relevant patterns in the data, without knowing beforehand the character of the pattern (for an introduction to the field of data mining, see [27]).

    Let us briefly look at a historic example for spatial data mining: A London epidemiologist identified a water pump as the centroid of the locations of cholera cases, and after the water pump was shut down, the cholera subsided. This and other examples are described in [68]. If we want to find patterns in quite some generality, we need a large data store that keeps track of data extracted from different data sources over time, a so- called data warehouse. It remains as an important, challenging open problem to efficiently run a spatial data warehouse and mine the spatial data. The spatial nature of the data seems to add the extra complexity that comes from the high autocorrelation present in typical spatial data sets, with the effect that most knowledge discovery techniques today perform poorly. This omnipresent tendency for data to cluster in space has been stated nicely [74]: Everything is related to everything else but nearby things are more related than distant things. For a survey on the state of the art and the challenges of spatial data