Come dividere due poligoni che si intersecano per il linestring medio dell'area condivisa (QGIS / python ben fatto)


9

Ho due poligoni,

POLIGONO ((- 5 -5, -5 5,5 5,5 -5, -5 -5)) POLIGONO ((1 1, 1 7, 7 7, 7 1, 1 1))

e desidero dividerli equamente. Il risultato dovrebbe essere una divisione lungo la linea contrassegnata in rosso.

Sto usando qgis / python ben fatto e desidero farlo usando Python.

LINESTRING (1 5,5 1)


4
Quanto è generale il tuo problema? Evidentemente intendi una soluzione da applicare a più di questi due soli poligoni. Che tipo di poligoni contempli? Cosa intendi con "uniformemente"? La divisione deve essere lungo un segmento di linea o può essere lungo un arco non lineare? Cosa dovrebbe accadere nel caso in cui l'intersezione poligonale sia composta da più componenti o non sia semplicemente collegata? Quale forma dovrebbe prendere l'output - dovrebbe dividere l'intersezione, o ciascuno dei poligoni, o forse essere solo la linea di divisione?
whuber

1
Sto lavorando con poligoni irregolari e voglio avere due poligoni non intersecanti. in questo caso, poligoni originali come menzioni e il risultato desiderato è 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
Il problema è difficile quando uno o entrambi i poligoni possono avere anelli (cioè non essere semplicemente collegati).
whuber

Risposte:


5

Una volta ho usato un approccio con i poligoni voronoi. L'ho fatto a mano e ho solo una vaga idea di come potresti farlo con formosa, ma ecco come va.

Innanzitutto, estrarre i vertici di ogni poligono sovrapposto e creare poligoni Voronoi da essi (vettore> strumenti geometria> estrai nodi e vettore> strumenti geometria> vononoi). Con la forma risultante, puoi disegnare la linea che divide esattamente l'area di sovrapposizione in due. (La linea verde brillante) Voronoi

Taglia il layer voronoi con il poligono sovrapposto e rimuovi la sovrapposizione dalle forme originali e incolla il poligono voronoi ritagliato con le tue forme originali. Seleziona, unisci, voilà!

Ora sembra un po 'rozzo, perché le mie sono forme davvero semplici. Ma se lo densifichi (Vettore> Strumenti geometria> Geometrie densità) e aggiungi come 20 nodi tra ogni vertice esistente, puoi avere questo:

densigy_voronoi

Che è molto meglio. Facile se hai solo una piccola quantità di forme da modificare.


Questa è una buona idea. Ma da dove viene quella linea verde brillante e come sai che divide la regione in due parti uguali?
whuber

quanto è diverso questo processo rispetto a `SELECT astext (intersezione (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,

Viene dalla proprietà del poligono voronoi. Divide lo spazio uniformemente tra i punti. Ecco perché devi densificare i tuoi poligoni perché altrimenti la linea "centrale" non segue i confini. Per quanto riguarda la linea luminosa, la disegno manualmente per illustrare dove si trova il centro ... Per quanto riguarda il comando PostGIS (sono un principiante in PostGIS), penso che selezionerà solo l'area che si interseca, non dividerla.
fgcartographix,

1
Detto questo, non ho detto che sarà la stessa parte. Questo metodo viene utilizzato per trovare la linea centrale del fiume. Se hai una baia nel fiume, la linea di mezzo verrà tirata verso di essa. ma non vi entrerà, rendendolo comunque "centrato".
fgcartographix,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.