J'ai un grand Shapefile avec 200 000 polygones mais le fichier est trop gros pour l'application qui l'utilisera. Je voudrais généraliser ces polygones et créer un fichier beaucoup plus petit.
J'ai essayé de le faire dans QGIS en utilisant l'outil "Simplifier les géométries". J'ai essayé ceci sur une très petite partie de mon Shapefile et je suis satisfait des résultats mais j'ai un petit problème que je ne sais pas comment résoudre. J'ai ajouté l'image pour montrer le problème.
Les frontières BLANCHES sont des frontières avant la simplification. Les limites ROUGES sont après simplification. Les zones à problèmes sont entourées de couleur orange. Comme vous pouvez le voir, les "limites simplifiées" contiennent certaines zones qui, après simplification, n'appartiennent à aucun des polygones précédents.
Comment simplifier ce fichier de formes et conserver les limites communes entre les polygones sur une seule ligne et éliminer les zones créées après la simplification?
INFORMATION ADDITIONNELLE:
Après avoir suivi les instructions suggérées
- Convertir des polygones en lignes
- Simplifier les lignes
- Reconvertir les lignes en polygones
J'obtiens les résultats suivants. C'est un peu mieux qu'avant mais j'obtiens toujours des zones en dehors des polygones d'origine (voir les zones blanches dans l'image ci-dessous).
@Andrew a suggéré d'associer chaque ligne à un polygone adjacent, mais je ne sais pas comment le faire dans QGIS.
J'essaie toujours de terminer le processus de simplification des polygones. J'ai suivi les instructions suggérées dans ce post et quand j'ai pensé que j'obtenais des résultats acceptables, un autre problème est apparu. Voici un résumé de ce que j'ai fait avec des images de résultats. Toutes les étapes ont été effectuées à l'aide de la boîte à outils PROCESSING dans QGIS.
- Tout d'abord, j'ai converti des polygones en lignes
- Deuxièmement, j'ai nettoyé les lignes en utilisant v.clean avec l'option break. Il en est résulté une COUCHE DE VECTEUR NETTOYÉE et une COUCHE D'ERREUR. Le calque d'erreur (points verts sur l'image fournie) a un point vert à chaque intersection de lignes. Je ne sais pas ce que cela signifie.
- Troisièmement, j'ai simplifié les lignes en utilisant l'outil "SIMPLIFY GEOMETRY" (résultat en lignes rouges dans les images). En comparant les lignes rouges simplifiées et les lignes oranges originales, je suis satisfait du résultat.
- Quatrièmement, je voulais reconvertir les lignes en polygones en utilisant l'outil "Polygoniser" dans "TRAITEMENT" et j'ai obtenu des résultats auxquels je ne m'attendais pas (deuxième image avec des polygones de couleur olive foncé ombré). Cela ressemble à des intersections de couches d'erreur connectées au polygoniseur et a créé un ensemble de polygones complètement différent en ignorant les lignes simplifiées.
Quelqu'un pourrait-il expliquer ce qui n'a pas fonctionné ici?
Pourquoi les lignes rouges simplifiées n'ont pas été converties correctement en polygones simplifiés?
Comme vous pouvez le voir, je ne suis pas un expert en SIG mais je dois le faire moi-même. Je ne sais pas si je suis trop loin de la solution, mais c'est frustrant de voir des lignes simplifiées que j'ai trouvées acceptables pour ce que j'aimerais faire, mais je ne peux pas les convertir en polygones.
Voici deux images avec les résultats des deux dernières étapes du processus:
v.generalize
est une autre excellente option. J'espère que cela t'aides.Réponses:
J'ai obtenu un assez bon résultat en utilisant GRASS v.generalize de la boîte à outils de traitement en utilisant les valeurs par défaut:
Certaines lignes restent intactes.
la source
J'ai rencontré ce problème avec Qgis2.16, mais je n'ai pas pu obtenir GRASS pour donner un résultat topologiquement correct comme @AndreJ.
Une bonne solution consiste à modifier la tolérance d'accrochage v.in.ogr dans les paramètres avancés de l' outil v.generalize.simplify . La valeur par défaut est -1, ce qui empêche la capture dans GRASS.
En mettant une petite valeur ici (comme 1e-05 m), l'alignement est activé et GRASS reconnaît les bordures partagées des polygones. La simplification donne alors une couche topologiquement correcte, sans trous.
Remarque: En définissant la tolérance d'accrochage à des valeurs plus élevées, il est même possible de modifier les polygones afin que ceux très fins puissent être supprimés si vous le souhaitez. Suivez cette opération avec v.clean en utilisant rmarea et un seuil assez grand pour supprimer les petits restes, et voilà!
la source
convertissez d'abord votre polygone en lignes
utilisez v.clean pour nettoyer votre topologie (avec l'option "break")
alors vous simplifiez vos lignes
Enfin, vous retournez vos lignes en polygones. (En utilisant polygonize)
EDIT: Pour obtenir les attributs de vos polygones, la meilleure façon, si vous n'avez pas de polygones en plusieurs parties dans le jeu de données d'origine , est d'obtenir les centroïdes de l'ancien et des polygones simplifiés et de les joindre en fonction de l'emplacement le plus proche (les centroïdes doivent ne bouge pas beaucoup si vous modifiez seulement légèrement vos limites)
la source
Vous pouvez résoudre le problème avec un modèle de traitement (ex SEXTANTE) comme celui-ci:
Version du script:
Remarque: la seule contrainte est que le champ commun doit être
ID
dansJoin attributes table
, car est le seul champ de la sortie deLines to polygons
. C'est pourquoi le champ commun n'est pas une entrée variable du modèle. UnID
champ doit donc être disponible dans la couche de polygones en entrée.la source