Supprimer les polygones en double à l'aide d'outils Open Source

13

J'ai un fichier de formes contenant des entités avec des géométries en double, mais des attributs différents (par exemple, un polygone avec l'attribut XX et un polygone identique avec l'attribut XY). Je veux identifier les doublons, puis choisir celui avec les bons attributs, en supprimant l'autre.

J'ai essayé des outils de topologie dans OpenJump / Kosmo, mais sans succès. Ils ont un outil de suppression des doublons qui fait ce que je veux, sauf qu'il semble supprimer arbitrairement l'une des fonctionnalités plutôt que de me laisser choisir celle à conserver.

J'ai accès à QGIS, OpenJUMP, Kosmo, etc. et je peux installer d'autres outils open source / gratuits si nécessaire.

Pensées?

Darren Cope
la source

Réponses:

7

Outre PostGIS, vous pouvez également utiliser un SIG topologique open source (GRASS):

  1. Télécharger et installer
  2. Démarrez et sélectionnez le gestionnaire d'emplacement, utilisez l'outil pour générer une nouvelle base de données de projet à partir de votre fichier SHAPE (appelé "emplacement GRASS"), voir ici pour un guide étape par étape
  3. Importez le fichier SHAPE
  4. Utilisez l' outil "v.clean" qui offre une série d'options
  5. Exportez la carte au format de fichier SHAPE avec "v.out.ogr"

Sidenote: nous prévoyons d'offrir un WPS pour cela afin que vous puissiez peaufiner vos données via notre portail Web.

markusN
la source
Je ne pense pas que v.clean permette aux utilisateurs d'identifier et de corriger les erreurs de topologie de manière interactive. S'il vous plait corrigez moi si je me trompe.
Darren Cope
J'ai manqué que vous vouliez le faire de manière interactive. Le numériseur v.digit est donc l'outil à utiliser.
markusN
Markus, Un tour rapide dans v.digit ne semble pas faire ce que je veux. Pouvez-vous peut-être donner un exemple de la façon dont j'accomplirais ma tâche en utilisant v.digit?
Darren Cope
1
En fait, le simple import du fichier de formes dans GRASS crée une couche de polygones qui se chevauchent en tant que couche 2_polygon. Je pense que cela devrait me suffire pour continuer!
Darren Cope
3

C'est ce que j'utilise dans ces cas. Si je comprends bien, vous devrez faire une vérification manuelle pour décider lequel a le bon attribut. Ensuite, je le fais en deux étapes. Je crée d'abord une table ou une vue dans PostGIS avec les polygones dupliqués, puis j'ouvre cette table dans un SIG de bureau avec la couche d'origine où je veux supprimer les doublons. Cela me mènera aux doublons via ma table en double et je peux supprimer dans la table ou le fichier de formes d'origine ou quoi que ce soit.

La requête pour trouver les doublons ressemblera à ceci si vous avez un identifiant unique appelé gid et une colonne de géométrie appelée the_geom:

create table duplicates as
select a.the_geom, a.gid, b.gid from mytable a, mytable b 
where ST_Equals(a.the_geom, b.the_geom) and a.gid!=b.gid;

Il y a quelques variantes sur ST_Equals, mais je pense que ST_Equals est celui que vous voulez. Cela vous donnera un tableau avec les géométries en double et le gid (id) de la première et de la deuxième occasion du polygone. Cependant, vous obtiendrez deux fois la même paire de doublons, mais cela ne devrait pas avoir d'importance car vous voulez simplement qu'ils vous montrent où ils se trouvent.

HTH Nicklas

Nicklas Avén
la source
3

Si vous utilisez PostGIS 1.5.x, consultez la fonction ST_HausdorffDistance ().
Les géométries en double donneront une valeur de 0. Utilisez-la comme les auto-jointures mentionnées. Assez soigné pour comparer des formes polygonales.

eprand
la source
0

Une façon plus simple de le faire. Calculez la zone dans votre SIG de bureau et triez par zone en ordre croissant ou décroissant. Vous devrez maintenant vérifier chaque ligne pour voir les objets dupliqués dans votre table d'attributs. C'est basé sur une supposition que vous n'avez jamais exactement la même zone pour les objets non dupliqués, même si cela peut parfois être faux.

ThomasG77
la source