Como dividir dois polígonos de interseção pela cadeia de linhas média da área compartilhada (QGIS / python shapely)

9

Eu tenho dois polígonos

POLÍGONO ((- 5 -5, -5 5,5 5,5 -5, -5 -5)) POLÍGONO ((1 1, 1 7, 7 7, 7 1, 1 1))

e deseja dividi-los uniformemente. O resultado deve ser uma divisão ao longo da linha marcada vermelha.

Estou usando o qgis / python shapely e desejo fazê-lo usando python.

LINESTRING (1 5,5 1)

OLS
fonte
4
Quão geral é o seu problema? Evidentemente, você pretende que uma solução se aplique a mais do que apenas esses dois polígonos. Que tipos de polígonos você considera? Precisamente, o que você quer dizer com "uniformemente"? A divisão deve estar ao longo de um segmento de linha ou pode estar ao longo de algum arco não linear? O que deve acontecer se a interseção do polígono consistir em vários componentes ou não estiver simplesmente conectada? Que forma a saída deve assumir - deve dividir a interseção, ou cada um dos polígonos, ou talvez apenas a linha de divisão?
whuber
11
Estou trabalhando com polígonos irregulares e quero ter dois polígonos sem interseção. nesse caso, polígonos originais como mencionados e o resultado desejado é POLYGON ((- 5 -5, -5 5,1 5,5 1,5 -5, -5 -5)) POLYGON ((1 5, 1 7, 7 7, 7 1,5 1,1 5))
OLS
11
O problema é difícil quando um ou ambos os polígonos podem ter anéis (ou seja, não devem ser simplesmente conectados).
whuber

Respostas:

5

Eu usei uma abordagem com polígonos voronoi uma vez. Eu fiz isso manualmente e só tenho uma vaga idéia de como você poderia fazê-lo com forma, mas aqui está como é.

Primeiro, você extrai os vértices de cada polígono sobreposto e cria polígonos Voronoi a partir deles (vetor> ferramentas de geometria> extrair nós e vetor> ferramentas de geometria> vononoi). Com a forma resultante, você pode desenhar a linha que divide sua área sobreposta exatamente em duas. (A linha verde brilhante) voronoi

Você recorta a camada de voronoi com o polígono sobreposto, remove a sobreposição das formas originais e cola o polígono de voronoi recortado com suas formas originais. Selecione, mescle, voilà!

Agora, parece um pouco bruto, porque as minhas são realmente formas simples. Mas, se você o densificar (Vector> Ferramentas de geometria> geometrias de densidade) e adicionar 20 nós entre cada vértice existente, poderá obter o seguinte:

densigy_voronoi

O que é muito melhor. Fácil se você tiver apenas uma pequena quantidade de formas para modificar.

fgcartographix
fonte
Essa é uma boa ideia. Mas de onde vem essa linha verde brilhante e como você sabe que divide a região em duas partes iguais?
whuber
quão diferente é esse processo do que `SELECT astext (interseção (geomFromText ('POLYGON ((- 5 -5, -5 5,5 5,5 5,5 -5, -5 -5))', 4326), geomFromText ('POLYGON ( (1 1, 1 7, 7 7, 7 1, 1 1)) ', 4326))); astext -------------------------------- POLYGON ((1 5,5 5,5 1,1 1,1 5 ) '?
OLS
Vem da propriedade do polígono de voronoi. Divide o espaço igualmente entre os pontos. É por isso que você precisa densificar seus polígonos porque, caso contrário, a linha "intermediária" não segue os limites. Quanto à linha brilhante, eu a desenho manualmente para ilustrar onde está o meio ... Quanto ao comando PostGIS (eu sou um novato no PostGIS), acho que ele selecionará apenas a área de interseção, não a dividirá.
fgcartographix
11
Dito isto, não disse que será parte igual. Esse método é usado para encontrar a linha central do rio. Se você tiver uma baía no rio, a linha do meio será puxada em sua direção. mas não entrará nele, tornando-o "centrado", no entanto.
fgcartographix