Esta é uma pergunta simples e bastante comum, que já foi feita para propósitos diferentes (veja este link e também este , por exemplo). Aqui, no entanto, estamos procurando não um pacote de software, mas algoritmos que poderíamos tentar implementar, digamos em Python .
Portanto, como mostrado abaixo, um conjunto de linhas é mapeado (elas já estão aparadas, entre outras).
Algoritmos / idéias para gerar polígonos (como os vermelhos mostrados) ?
algorithm
polygonize
geometry-conversion
Desenvolvedor
fonte
fonte
Respostas:
Bem, colocamos aqui uma resposta que não é uma resposta completa à nossa pergunta, ou seja, a pergunta permanecerá " aberta para resposta ". No entanto, é uma solução para o problema em questão. Aqui está o truque que usamos:
Primeiro vamos ver os resultados :
Portanto, as linhas fornecidas nos
left
polígonos construídos mostradas namiddle
. Eles são polígonos reais, como mostrado naright
;)Para o algoritmo dado abaixo, usamos o
Shapely
pacote em Python .MultiLineString
{:: M}buffer
, digamoseps
{:: MB}Polygon
{:: P} (a região aqui é um quadrado)P.difference(MB)
{polígonos resultantes}Observe que ele está silencioso rapidamente em operação. No entanto, o ponto que falta é que o algoritmo não é um método original para criar polígonos a partir de linhas . No entanto, funcionou perfeitamente para o problema que tínhamos em nossas mãos.
fonte
O JTS Topology Suite possui uma classe Polygonizer, que praticamente faz isso.
Você pode dar uma olhada no código fonte, disponível aqui , e convertê-lo em Python.
fonte
Você pode dar uma olhada no pacote Python Shapely, particularmente polygonize ()
fonte
from shapely.ops import polygonize
) usa GEOS.Polygonize de GEOS . Portanto, este é um link em que existe um link para um link ...: |polygonize
não foram bem-sucedidas. No entanto, obrigado por nos lembrarShapely
com o qual poderíamos encontrar uma solução (um truque, na verdade) postada como resposta.Aqui está outra solução que poderíamos encontrar.
Para Python, há um pacote {aqui} . É uma pequena implementação com alguns bugs. No entanto, com algum esforço, ele pode ser usado para esse problema. Observe também os seguintes estágios:
Um estágio de pré-processamento com o qual todas as interseções entre linhas são encontradas. Portanto, todas as linhas são divididas em segmentos nos pontos de interação. Uma lista de pontos de interseção e uma lista de arestas associadas são as necessárias para o DCEL.
fonte
difference
operação está sendo usada.