Suite

Supprimer les petits espaces (éclats) entre les polygones ?


J'ai un ensemble de polygones représentant des districts administratifs. Les quartiers ont été numérisés à la main, et il y a de petits espaces (éclats) entre les polygones où les polygones doivent se toucher.

Comment puis-je faire en sorte que les polygones s'emboîtent, en supprimant les espaces ?


Utilisation Éliminer (Licence ArcInfo requise)

Élimine les polygones en les fusionnant avec les polygones voisins qui ont la plus grande surface ou la plus longue bordure partagée. Éliminer est souvent utilisé pour supprimer les petits polygones de ruban qui sont le résultat d'opérations de superposition, telles que Intersection ou Union.

http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//001700000005p000000.htm

Utilisateurs d'ArcGIS 10 Notez qu'il existe une NOUVELLE fonctionnalité dans les options de cet outil.

Il est maintenant possible de conserver le POLYGONE ou POLYLINE d'origine avec l'option > ex_features (Facultatif) Une classe ou une couche d'entités polylignes ou surfaciques en entrée qui définit des limites de polygones, ou des parties de celles-ci, qui ne doivent pas être éliminées.


Pour le faire à la main dans QGIS, accédez àParamètres|Propriétés du projet…Sur leGénérall'onglet en bas estOptions de capture…Vérifiez le calque que vous souhaitez accrocher, définissez le mode surau sommetet définissez la tolérance sur une valeur inférieure à la distance la plus courte entre deux points que vous avez. Si vous n'êtes pas sûr, définissez les unités surpixelset la tolérance à quelque chose comme 5, de sorte que s'il y a des détails délicats, vous pouvez zoomer directement et être sûr de ne pas vous accrocher au mauvais sommet.

Modifiez ensuite votre couche vectorielle, sélectionnez l'outil de nœud et déplacez les points errants vers leurs homologues.

Le faire automatiquement est un peu plus délicat. AFAIK QGIS n'a pas de plugin pour l'automatiser, et bien que PostGIS soit construit sur GEOS qui a des fonctions d'accrochage, ils ne sont pas exposés à PostGIS. Il pourrait être possible d'écrire une requête pour vérifier chaque point d'un polygone pour les voisins dans la distance de capture, mais cela dépasse actuellement mon esprit pour développer.

GRASS a v.clean.snap auquel vous pouvez accéder via QGIS, mais il y a l'étape supplémentaire de créer un jeu de données GRASS.


Si vous êtes familier avec QGIS : Dans le tronc QGIS 1.9 (peut être installé en tant que qgis.dev via le programme d'installation OSGEO, voir la page d'accueil de qgis) se trouve une nouvelle fonction dans le menu vectoriel appelée "Éliminer les polygones de ruban", qui fait exactement ce que vous vouloir. Vous pouvez sélectionner les polygones problématiques et les fusionner avec des polygones adjacents en fonction d'une limite commune ou d'une proportion de surface. Essaye le!


Si vous êtes un utilisateur de QGIS, vous bénéficiez de toute la puissance de GRASS, car il s'agit d'un SIG entièrement topologique. Dans QGIS, activez le plugin GRASS, créez un emplacement/un jeu de cartes où importer vos données.

Ouvrez le jeu de cartes et importez votre couche sale avec v.in.ogr : jouez avec les deux paramètres avancés "seuil d'accrochage pour les limites" et "taille minimale de la zone à importer".

Vous pouvez également utiliser les options fournies par le module v.clean.


ArcGIS possède des règles de topologie qui vous aideront à identifier et à corriger les lacunes dans vos données, telles que celles auxquelles vous faites référence. Afin de créer des règles de topologie, vous devrez besoin d'une licence ArcEditor ou ArcInfo et stockez votre classe d'entités dans un jeu de classes d'entités dans une géodatabase personnelle ou fichier.

Vous souhaiterez probablement implémenter la règle « Ne pas avoir de lacunes ». Une fois que vous avez créé la base de règles avec toutes les règles que vous jugez nécessaires, vous souhaitez valider la topologie qui identifiera toutes les erreurs dans vos données.

Ensuite, à l'aide de l'inspecteur d'erreurs et de l'outil de correction des erreurs de topologie, vous pouvez sélectionner individuellement ou en bloc les erreurs que vous souhaitez corriger et comment vous souhaitez les corriger (c'est-à-dire créer de nouveaux polygones pour combler les vides ou fusionner avec des polygones plus grands à proximité) .


Il existe une fonction "Éliminer les polygones de ruban" dans QGIS 2.12 (Lyon) Toolbox. Je suis sûr que c'est aussi dans une version antérieure.


Eh bien, j'utilise une fonction PostGIS (que j'utilise directement sur mon QGIS) qui exécute un snap récursif pour résoudre ce problème. Les résultats sont assez bons, cela demande juste un bon nombre de valeurs de tolérance pour obtenir les meilleurs résultats. Si vous êtes prêt à essayer, vérifiez-le (dans mon cas, les géométries sont toutes multi, d'où le st_multi dans mon exécution):

CRÉER OU REMPLACER UNE FONCTION dsgsnap(texte tabela, flottant instantané) RETOURNE void AS $BODY$ DECLARE id int; BEGIN FOR id in execute('select id from '||tabela) LOOP EXECUTE 'update '||tabela||' as classe set geom = st_multi(res.geom) from ( select st_snap(a.geom, st_collect(b.geom), '||snap||') as geom, a.id as id from '||tabela|| ' a, '||tabela||' b où a.id != b.id et a.id = '||id||' group by a.id, a.geom ) as res où res.id = classe .identifiant'; FIN DE BOUCLE ; REVENIR; END $BODY$ LANGUAGE plpgsql;

J'ai rencontré le même problème, qu'en explorant les outils j'ai réglé assez facilement bien que je ne connaisse pas la logique. ![Dans les outils, accédez à la boîte à outils de gestion des données, accédez à la classe d'entités et exécutez le script d'intégration en double-cliquant][1]

dans la fenêtre de script, sélectionnez la classe d'entités ayant un problème et dans la tolérance XY, ajoutez la vallée en mesurant la distance à l'aide d'un outil de mesure en plusieurs points et obtenez une vallée moyenne, mettez cette valeur dans l'environnement de tolérance et appliquez le problème résolu Je le fais pas maintenant comment mais résolu avec une précision d'environ 90%. ![entrez la description de l'image ici][2]

J'ai essayé toutes les autres méthodes décrites dans les réponses ci-dessus, mais il était difficile et fastidieux d'obtenir les corrections automatisées des écarts entre les polygones adjacents.


Ce n'est pas une solution parfaite, mais l'une de ces deux choses fonctionne pour moi dans la plupart des cas :

  1. Dans QGIS, enregistrez la couche au format GEOJSON. Mais avant d'enregistrer, dans la boîte de dialogue "Enregistrer le calque sous", définissez la précision des coordonnées sur 3 (15 est la valeur par défaut). Cela aura pour effet de réunir des sommets très proches les uns des autres.

  2. Accédez à Mapshaper, téléchargez le fichier et appuyez sur « simplifier ». Dans le coin supérieur gauche, il vous indiquera le nombre d'intersections de lignes qu'il trouve et vous donnera la possibilité de les corriger. Je trouve que ce correctif fonctionne environ la moitié du temps.


Je ne l'ai pas utilisé, mais ET Geowizards, qui apporte de nombreux outils de traitement ArcEditor et ArcInfo uniquement à la licence de niveau ArcView (alias ArcGIS Standard) dispose d'un assistant d'élimination qui "Élimine les polygones indésirables (éclats) en les fusionnant avec les polygones voisins ou en les supprimant". La boîte à outils de l'assistant vous coûtera 250 USD (liste de prix).