Cómo dividir dos polígonos entrelazados por la cadena lineal promedio del área compartida (QGIS / python bien proporcionado)

9

Tengo dos 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))

y deseo dividirlos de manera uniforme. El resultado debe ser una división a lo largo de la línea roja marcada.

Estoy usando qgis / python bien y deseo hacerlo usando python.

LINESTRING (1 5,5 1)

OLS
fuente
44
¿Cuán general es tu problema? Evidentemente, tiene la intención de aplicar una solución a algo más que estos dos polígonos. ¿Qué tipo de polígonos contemplas? Precisamente, ¿qué quieres decir con "uniformemente"? ¿Debe la división ser a lo largo de un segmento de línea o puede ser a lo largo de algún arco no lineal? ¿Qué debería suceder en caso de que la intersección del polígono consista en múltiples componentes o no esté simplemente conectada? ¿Qué forma debería adoptar la salida? ¿Debería dividir la intersección, o cada uno de los polígonos, o tal vez solo ser la línea divisoria?
whuber
1
Estoy trabajando con polígonos irregulares y quiero tener dos polígonos que no se crucen. en este caso, los polígonos originales como menciones y el resultado deseado es 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
El problema es difícil cuando uno o ambos polígonos pueden tener anillos (es decir, no estar simplemente conectados).
whuber

Respuestas:

5

Una vez utilicé un enfoque con polígonos voronoi. Lo hice a mano. Solo tengo una vaga idea de cómo podrías hacerlo con forma, pero así es como funciona.

Primero, extrae los vértices de cada polígono superpuesto y crea polígonos Voronoi a partir de ellos (vector> herramientas de geometría> extraer nodos y vectores> herramientas de geometría> vononoi). Con la forma resultante, puede dibujar la línea que divide su área de superposición exactamente en dos. (La línea verde brillante) voronoi

Recorta la capa de voronoi con el polígono superpuesto y elimina la superposición de las formas originales y pega el polígono de voronoi recortado con sus formas originales. Seleccionar, fusionar, ¡voilà!

Ahora, se ve un poco tosco, porque los míos son formas realmente simples. Pero, si lo densifica (Vector> Herramientas de geometría> Geometrías de densidad) y agrega como 20 nodos entre cada vértice existente, puede tener esto:

densigy_voronoi

Lo cual es mucho mejor. Fácil si solo tiene una pequeña cantidad de formas para modificar.

fgcartographix
fuente
Esta es una buena idea. Pero, ¿de dónde viene esa línea verde brillante y cómo sabes que divide la región en dos partes iguales?
whuber
¿Qué tan diferente es este proceso 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
Proviene de la propiedad del polígono voronoi. Divide el espacio de manera uniforme entre los puntos. Es por eso que tiene que densificar sus polígonos porque, de lo contrario, la línea "intermedia" no sigue los límites. En cuanto a la línea brillante, la dibujo manualmente para ilustrar dónde está el centro ... En cuanto al comando PostGIS (soy un novato en PostGIS), creo que solo seleccionará el área de intersección, no la dividirá.
fgcartographix
1
Habiendo dicho eso, no dije que fuera a partes iguales. Ese método se utiliza para encontrar la línea central del río. Si tienes una bahía en el río, la línea media se tirará hacia ella. pero no entrará en él, lo que lo hace "centrado".
fgcartographix