Não consegui encontrar o "nome" do algoritmo que permitiria converter linhas em polígonos. Como esse problema cruza o SIG e os campos da geometria computacional e da ciência da computação. Não tenho certeza do que mais adicionar à mistura. Estou relutante em fornecer uma lista do que pesquisei, pois também gostaria de saber o que as outras pessoas considerariam sua primeira escolha de critérios de pesquisa.
O cenário ... Eu tenho linhas (dois pontos necessários para construir uma linha) ... cada linha está conectada a pelo menos uma outra linha. O espaço intermediário entre as linhas conectadas formaria um polígono. O cenário mais simples seria um triângulo ... um retângulo ... e seria possível ir além para recursos multissegmentados.
Desculpe por descrições vagas, mas como eu disse, não quero guiar as possíveis soluções por um caminho que já visitei, pois estou interessado no "primeiro pensamento" tanto quanto na solução final.
fonte
Respostas:
Talvez "área preenchida"? Veja aqui e aqui .
Editar
Outra possibilidade é a triangulação restrita . (O link é para um applet Java que permite desenhar um gráfico com o mouse e depois ilustra um algoritmo de varredura de avião para triangulá-lo.) O resultado de qualquer triangulação, independentemente de como é realizada, pode ser prontamente processado para crie os polígonos desejados: basta mesclar todos os triângulos vizinhos que compartilham uma aresta recém-criada.
Exemplo
Gráfico original:
Gráfico triangulado:
fonte
Na teoria dos grafos , essa operação é chamada de computação de faces . Está relacionado ao cálculo do dual de um dado gráfico.
Por exemplo, na biblioteca java GeOxygène , um gráfico (chamado CarteTopo ) possui um método getFaces para recuperar sua face .
Isso é chamado de poligonização no JTS
fonte
O software host RepRap converte uma lista de segmentos de linha (em alguma ordem aleatória desconhecida) em uma lista de polígonos, que soa semelhante ao que você está tentando fazer.
Em particular, o algoritmo RepRap "end matching" lida com vários casos patológicos.
Infelizmente, o software RepRap pressupõe que cada canto possui um número par de arestas - 2 linhas indo para um canto em um objeto normal; 4 linhas indo juntas quando o canto de um objeto toca o canto de outro objeto, etc. Não sei quão difícil seria adaptar esse algoritmo para lidar com diagramas de voronoi, que geralmente tem três arestas em cada canto.
fonte
você explorou a base de código do GRASS para uma solução para o seu problema? -> http://old.nabble.com/Polyline-to-Polygon-operation-td20257839.html
fonte
main.c
nav.type
fonte, tudo o que acontece é que os recursos são rotulados como limites: nenhum processamento real ocorre. Em retrospecto, isso não é muito surpreendente: se (não sei ao certo) os recursos são mantidos com informações topológicas 2D completas, todo o cálculo para identificar regiões poligonais ocorre automaticamente durante a criação ou importação de recursos e é mantido por toda parte todas as operações de geoprocessamento.Hallo
Eu não acho que o que você está procurando é um algoritmo específico. A tarefa pode ser bastante difícil ou muito simples, dependendo do seu conjunto de dados.
Você deve dividir o problema em pelo menos 2 partes. 1) é mais um problema de rede, como encontrar anéis fechados de cadeias de linhas. 2) expressar a cadeia de linhas fechada como um polígono
A segunda parte, que é "converter linhas em polígonos", depende mais do formato que da representação de polígono / cadeia de linhas. Quero dizer, indo de:
LINESTRING (1 1, 2 2)
LINESTRING (2 2, 2 1)
LINESTRING (2 1, 1 1)
para:
POLÍGONO ((1 1,2 2,2 1,1 1))
está convertendo linha para polígono, mas acho que não é disso que você está falando. A parte mais difícil é a primeira. Se você tiver um espaguete de linhas, como solicitá-las como cadeias de linhas fechadas.
Eu acho que a resposta para essa pergunta depende muito do conjunto de dados. Como Kirk pergunta, se as linhas podem atravessar o problema é muito maior. Se você souber que todas as "coleções de linhas" fazem parte de uma cadeia de linhas fechada, está ficando mais fácil. Em seguida, você pode pegar qualquer linha e percorrer o caminho até voltar novamente e depois passar para o passo dois acima.
O que quero dizer é que a condição do conjunto de dados define todas as regras sobre como fazê-lo. Se você deseja encontrar todos os polígonos possíveis em um espaguete de cadeias de linhas, presumo que haverá muitos algoritmos diferentes envolvidos para colocar pontos de vértice em todos os cruzamentos, pesquisar todos os caminhos possíveis e assim por diante.
No PostGIS, a função é chamada ST_Polygonize Essa função cria todos os polígonos possíveis a partir das cadeias de linhas que você atribui.
Isso é realizado pelo GEOS, para que você possa encontrar os algoritmos existentes no código GEOS e JTS.
Apenas alguns pensamentos
/ Nicklas
fonte
Você pode tentar procurar o algoritmo "Forward Star". Foi-me dito que é genérico, mas as únicas discussões sobre o assunto que eu já li foram sempre em referência ao arcgis. Talvez veja as referências citadas nestas notas de aula para a estrela em frente.
fonte