Combinaison de jeux de données polygonaux

8

J'ai besoin de combiner 2 grands jeux de données polygonaux. Un de ces ensembles de données contient des données plus récentes, les polygones de cet ensemble de données doivent donc être copiés dans l'ensemble de données existant.

Il existe trois cas différents où l'ensemble de données existant devrait être modifié. Voir ci-dessous pour les captures d'écran et les explications.

(Dans toutes les captures d'écran, le contour rouge en pointillés représente les données existantes. Les polygones verts sont de nouvelles données.)


Situation 1 - Polygone entièrement nouveau:

entrez la description de l'image ici

Action - Un nouveau polygone doit être ajouté au jeu de données existant. Les polygones qui restent identiques peuvent être ignorés.


Situation 2 - Un polygone existant a changé de forme:

entrez la description de l'image ici entrez la description de l'image ici entrez la description de l'image ici

Action - Les polygones existants doivent être supprimés. Un nouveau polygone doit ensuite être ajouté au jeu de données existant.


Situation 3 - Plusieurs nouveaux polygones dans un polygone existant

entrez la description de l'image ici

Action - Le polygone contenant / grand existant doit être supprimé. Un nouveau polygone doit ensuite être ajouté au jeu de données existant.


Donc, ma question est; serait-il possible de combiner ces ensembles de données selon les règles ci-dessus, soit dans QGIS ou PostGIS?

Mat
la source
Êtes-vous opposé à utiliser un processus différent pour chaque situation.
Kingfisher
@Kingfisher Oui, je pensais que cela pourrait être nécessaire ... Toutes les suggestions sont les bienvenues!
Matt
Comment savoir si le polygone est nouveau? Vous fournissez des graphiques, que diriez-vous d'une définition de table? Collez la sortie de\d table
Evan Carroll
@Evan il n'y a actuellement rien dans les tableaux pour indiquer les nouveaux / anciens polygones, mais il serait simple d'ajouter quelque chose.
Matt

Réponses:

6

Je pense que vous pouvez faire tout cela en 2 étapes. Tout d'abord, supprimez tous les polygones existants où la nouvelle table de polygones les intersecte. Dans le cas 1, les polygones existants ne seront pas touchés. Dans les cas 2 et 3, tous les polygones existants qui se sont développés (et éventuellement fusionnés en un seul) ou rétrécis (et éventuellement divisés en plus petits) seront supprimés. Ensuite, vous insérez simplement les nouveaux polygones dans la table existante qui couvrira les cas 2 et 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
la source
Merci @John, je pense que vous pourriez bien avoir raison avec ça ... Je vais essayer
Matt
Vous feriez mieux de faire une copie de la table des polygones existante d'abord :-)
John Powell
2
Est-ce que ça marche? Je suis raisonnablement sûr que la logique est correcte, mais je serais intéressé de savoir si j'ai raté quelque chose.
John Powell
Cela a bien fonctionné, à part quelques polygones supprimés qui devaient être conservés (mais cela n'était dû qu'à des données en désordre), et relativement facilement corrigés. Merci John.
Matt
Je suis contente. J'espère que vous aviez une sauvegarde des données. Je sentais que de si beaux diagrammes méritaient une réponse plus complexe, mais parfois des choses qui semblent compliquées ne le sont pas. Malheureusement, l'inverse est également très vrai.
John Powell