Combinando conjuntos de datos de polígonos

8

Necesito combinar 2 grandes conjuntos de datos de polígonos. Uno de estos conjuntos de datos contiene datos más recientes, por lo que los polígonos de este conjunto de datos deben copiarse en el conjunto de datos existente.

Hay tres instancias diferentes en las que el conjunto de datos existente debería modificarse. Vea a continuación las capturas de pantalla y explicaciones.

(En todas las capturas de pantalla, el contorno rojo punteado representa los datos existentes. Los polígonos verdes son datos nuevos).


Situación 1 - Polígono completamente nuevo:

ingrese la descripción de la imagen aquí

Acción : se debe agregar un nuevo polígono al conjunto de datos existente. Los polígonos que permanecen igual pueden ser ignorados.


Situación 2 : un polígono existente ha cambiado de forma:

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

Acción : los polígonos existentes deben eliminarse. Entonces se debe agregar un nuevo polígono al conjunto de datos existente.


Situación 3 : múltiples polígonos nuevos dentro de un polígono existente

ingrese la descripción de la imagen aquí

Acción : es necesario eliminar el polígono que contiene / grande existente. Entonces se debe agregar un nuevo polígono al conjunto de datos existente.


Entonces, mi pregunta es; ¿Sería posible combinar estos conjuntos de datos de acuerdo con las reglas anteriores, ya sea en QGIS o PostGIS?

Mate
fuente
¿Está dispuesto a utilizar un proceso diferente para cada situación?
Kingfisher
@ Kingfisher Sí, estaba pensando que podría ser necesario ... ¡Cualquier sugerencia es bienvenida!
Matt
¿Cómo sabemos si el polígono es nuevo? Estás proporcionando gráficos, ¿qué tal una definición de tabla? Pegue la salida de\d table
Evan Carroll
@Evan no hay nada actualmente en las tablas para indicar polígonos nuevos / antiguos, pero sería simple agregar algo.
Matt

Respuestas:

6

Creo que puedes hacer todo esto en 2 pasos. Primero, elimine todos los polígonos existentes donde la nueva tabla de polígonos los intersecta. En el caso 1, los polígonos existentes no se tocarán. En los casos 2 y 3, todos los polígonos existentes que crecieron (y posiblemente se fusionaron en uno) o se redujeron (y posiblemente se dividieron en otros más pequeños) se eliminarán. Luego, simplemente inserte los nuevos polígonos en la tabla existente que cubrirá los casos 2 y 3.

DELETE FROM existing_polygons a USING new_polygons b
WHERE ST_Intersects(a.geom, b.geom);

INSERT INTO existing_polygons 
SELECT * FROM new_polygons;
John Powell
fuente
Gracias @John, creo que podrías estar bien con esto ... Lo intentaré
Matt
Será mejor que primero haga una copia de la tabla de polígonos existente :-)
John Powell
2
¿Esto funciona? Estoy razonablemente seguro de que la lógica es correcta, pero me interesaría saber si me he perdido algo.
John Powell
Funcionó bien, aparte de algunos polígonos eliminados que debían mantenerse (pero eso solo se debió a datos desordenados), y se resolvieron con relativa facilidad. Gracias John
Matt
Me alegro. Espero que haya tenido una copia de seguridad de los datos. Sentí que diagramas tan bonitos merecían una respuesta más compleja, pero a veces las cosas que parecen complicadas no lo son. Lamentablemente, lo contrario también es muy cierto.
John Powell