Comment diviser deux polygones intersectés par la chaîne de ligne moyenne de la zone partagée (QGIS / python galbée)

9

J'ai deux polygones,

POLYGONE ((- 5 -5, -5 5,5 5,5 -5, -5-5)) POLYGONE ((1 1, 1 7, 7 7, 7 1, 1 1))

et souhaite les répartir également. Le résultat doit être une scission le long de la ligne marquée en rouge.

J'utilise qgis / python galbée et je souhaite le faire en utilisant python.

LINESTRING (1 5,5 1)

OLS
la source
4
Dans quelle mesure votre problème est-il général? De toute évidence, vous avez l'intention d'une solution à appliquer à plus que ces deux polygones. Quels types de polygones envisagez-vous? Qu'entendez-vous précisément par "uniformément"? Le fractionnement doit-il être le long d'un segment de ligne ou peut-il être le long d'un arc non linéaire? Que doit-il se passer si l'intersection de polygones se compose de plusieurs composants ou n'est pas simplement connectée? Quelle forme la sortie devrait-elle prendre - devrait-elle diviser l'intersection, ou chacun des polygones, ou peut-être simplement la ligne de division?
whuber
1
Je travaille avec des polygones irréguliers et je veux avoir deux polygones qui ne se croisent pas. dans ce cas, les polygones d'origine comme mentionné et le résultat souhaité est 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
1
Le problème est difficile lorsque l'un ou les deux des polygones peuvent avoir des anneaux (c'est-à-dire ne pas être simplement connectés).
whuber

Réponses:

5

J'ai utilisé une approche avec des polygones voronoi une fois. Je l'ai fait à la main, je n'ai qu'une vague idée de la façon dont vous pouvez le faire avec galbe, mais voici comment cela se passe.

Tout d'abord, vous extrayez les sommets de chaque polygone qui se chevauchent et en créez des polygones Voronoi (vecteur> outils de géométrie> extraire les nœuds et vecteur> outils de géométrie> vononoi). Avec la forme résultante, vous pouvez tracer la ligne qui sépare votre zone de chevauchement exactement en deux. (La ligne verte brillante) voronoi

Vous coupez le calque voronoi avec le polygone qui se chevauche et supprimez le chevauchement des formes d'origine et collez le polygone voronoi coupé avec vos formes d'origine. Sélectionnez, fusionnez, voilà!

Maintenant, ça a l'air un peu grossier, parce que les miennes sont des formes vraiment simples. Mais, si vous le densifiez (Vector> Outils de géométrie> Géométries de densité) et ajoutez comme 20 nœuds entre chaque sommet existant, vous pouvez avoir ceci:

densigy_voronoi

C'est bien mieux. Facile si vous n'avez qu'une petite quantité de formes à modifier.

fgcartographix
la source
C'est une bonne idée. Mais d'où vient cette ligne verte brillante et comment savez-vous qu'elle divise la région en deux parties égales?
whuber
dans quelle mesure ce processus est-il différent de `SELECT astext (intersection (geomFromText ('POLYGON ((- 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
Il vient de la propriété du polygone voronoi. Il divise l'espace de manière égale entre les points. C'est pourquoi vous devez densifier vos polygones car sinon, la ligne "médiane" ne suit pas les limites. Quant à la ligne lumineuse, je la dessine manuellement pour illustrer où se trouve le milieu ... Quant à la commande PostGIS (je suis un débutant dans PostGIS), je pense qu'elle ne sélectionnera que la zone d'intersection, pas la divisera.
fgcartographix
1
Cela dit, je n'ai pas dit que ce serait une part égale. Cette méthode est utilisée pour trouver la ligne médiane de la rivière. Si vous avez une baie dans la rivière, la ligne médiane sera tirée vers elle. mais il n'y entrera pas, ce qui le rendra néanmoins "centré".
fgcartographix