Existe-t-il un moyen de rendre des lignes avec des courbes lisses (de Bézier) dans QGIS?

33

Je passe de la création de cartes avec Illustrator à celles avec QGIS et des données réelles. L'une des choses que je n'ai pas pu recréer dans QGIS sont les lignes courbes courbes que je peux obtenir dans Illustrator. Je ne parle pas des styles de jointure et de majuscule, mais de la manière dont une ligne entière est rendue.

Je cherche une réponse qui n'inclut pas l'exportation au format SVG vers Illustrator ni la finition de la carte.

De plus, je me rends compte qu’elles pourraient être considérées comme une représentation inexacte mais, dans l’ensemble, ces cartes sont destinées à donner aux coureurs une idée de leur emplacement et ne doivent pas nécessairement être une représentation exacte.

Voici un exemple de ce que je veux dire: entrez la description de l'image ici

Brian Kelly
la source
2
Comment vos données sont-elles stockées? La plupart des formats de données (par exemple, le fichier de formes) n'autorisent pas les arcs. Je crois cependant que certaines bases de données le font maintenant.
Darren Cope

Réponses:

24

Découvrez le plugin Generalizer, il devrait faire ce que vous voulez. Le plugin a des options de lissage qui fonctionnent assez bien.

Cela ne change pas le rendu de vos lignes, mais crée un nouveau fichier de formes avec lissage (ou simplification / généralisation) appliqué.

entrez la description de l'image ici

entrez la description de l'image ici

Nathan W
la source
Je ne trouve pas ce plugin pour QGIS 1.7.3 alors que les mises en pension tierces sont activées. Pouvez-vous montrer comment l'activer / le trouver? Cela semble intéressant et simple.
SaultDon
3
Étrange. Il devrait figurer dans le programme d'installation du plug-in, car il provient du référentiel principal du plug-in QGIS.
Nathan W
3
Vous avez raison, mais à partir du programme d'installation de plug-in Python, je devais accéder à l'onglet Options et remplacer "Plug-in autorisés" par: "Afficher tous les plug-in, même ceux marqués comme expérimentaux".
SaultDon
J'ai fini par jouer avec ce plugin un peu ce soir et cela fonctionnait mieux pour moi puisque je n'avais pas besoin d'utiliser un calque GRASS et que je pouvais simplement convertir mon fichier de formes actuel.
Brian Kelly
Je devais le faire en deux étapes pour ma numérisation très détaillée mais irrégulière: tout d’abord simplifier (par exemple, l’algorithme Lang), puis le lissage. A travaillé un régal.
Un autre ben
16

Utilisation du plugin QGIS + GRASS:

Ajoutez la barre d’outils Grass à partir de la fenêtre "Gérer les plug-ins". ajouter un plugin d'herbe à qgis

Vos lignes devront être un vecteur d'herbe. Convertissez-les donc en un nouveau ou en un existant.

Dans la barre d’outils GRASS, sélectionnez Outils GRASS ... entrez la description de l'image ici

Recherchez le module: v.generalize ( tutoriel WIKI ici )

Vous pouvez ensuite choisir plusieurs algorithmes de généralisation différents: Outil GRASS v.generalize sélection des algorithmes

Notez les algorithmes: Chaiken, Hermite ou même Moyenne de glissement. Il y en a plusieurs autres aussi!

Les différences peuvent être vues dans les images du wiki: v.generalize simplify exemple différences

from Wiki: "Notez que la différence entre" Chaiken "et" Hermite "est que les lignes produites par" Chaiken "" inscrivent "les lignes originales, tandis que les lignes" Hermite "" circonscrivent "les lignes originales, comme on peut le voir dans les lignes. image [ci-dessus]. (La ligne noire correspond à la ligne d'origine, la ligne verte à "Chaiken" et la bleue à "Hermite")


Utilisation de uDig + jgrasstools ou de gazon:

Si vous rencontrez des difficultés pour obtenir les résultats souhaités avec v.generalize de GRASS, essayez la dernière version de uDig avec jgrasstools . Vous pouvez également prendre le pot d’herbe du même endroit que jgrasstools.

Une fois uDig installé et opérationnel, activez la boîte à outils Spatial : Fenêtre> Afficher la vue> Autre ... activer la boîte à outils spatiale dans uDig

Déconnectez la barre d'outils pour en améliorer la lisibilité (cliquez avec le bouton droit de la souris sur l'onglet Spatial Toolbox> Détacher ...): détacher la boîte à outils spatiale dans uDig

Chargez les modules jgrasstools et grass (facultatifs) requis: Chargement de jgrasstools / grass dans udig

N'oubliez pas de définir vos paramètres de gazon (pointer sur le fichier de fichier exécutable de gazon sur Windows, ou sur la commande de gazon sous Linux, par exemple, / usr / bin / grass) si vous chargez également le fichier .jar de gazon: réglage des paramètres d'herbe dans uDig

Finalement! En utilisant les outils de jgrasstools (pas d'herbe), vous pouvez généraliser facilement la ligne avec Traitement vectoriel> LineSmootherJaiTools. Traitement vectoriel vers LineSmootherJaiTools dans uDig

Assurez-vous de bien définir l’entrée et la sortie (ne fonctionne que sur les fichiers de formes, il n’est donc pas nécessaire de convertir vos données en ensembles de cartes / emplacements pour l’herbe) : paramètres d'entrée et de sortie pour Spatial Toolbox dans uDig

Une fois que vous avez défini la tolérance de lissage (0.0 - 1.0) et l’entrée / la sortie, appuyez sur le bouton Play de la fenêtre Spatial Toolbox (en haut à droite): Module de lecture dans Spatial Toolbox for uDig

Résultats:
uDig simplifie les résultats de jgrasstools ...

SaultDon
la source
Cela modifie-t-il les données d'origine ou les filtre-t-il avant que QGIS ne les rende?
Brian Kelly
Ah, on y répond: "Le lissage (de la ligne) est un processus" inversé "qui prend en entrée une ligne et produit une approximation plus douce de l’original. Pour ce faire, il faut parfois insérer de nouveaux sommets dans la ligne initiale, et Jusqu'à 4000% du nombre de sommets de l'original. Dans ce cas, il est toujours judicieux de simplifier la ligne après le lissage. " de grass.osgeo.org/grass64/manuals/html64_user/v.generalize.html
Brian Kelly
Il semble donc que c'est quelque chose que vous appliqueriez probablement une fois que vous avez confirmé que toutes vos lignes sont correctes et que vous n'avez pas besoin de modifications supplémentaires (à moins que vous ne souhaitiez ajuster tous les vecteurs supplémentaires, puis les lisser à nouveau)
Brian Kelly
@spline Oui, car vous devez travailler avec un "jeu de données grass" qui est essentiellement - PAS un fichier de formes, vous voulez vous assurer que le fichier de formes original est complet. Simplifier la ligne pour éliminer les sommets supplémentaires est également une option, en fonction de la longueur de la ligne et de la quantité de sommets présents dans la courbe de Bézier .
SaultDon
Oh, ma parole, l'herbe n'a pas de sens pour moi ... les noms de carte, les noms d'emplacement, la base, PERMANENT ... J'ai essayé de "découvrir" comment utiliser cette réponse (avec aucune connaissance préalable de l'herbe), et j'ai échoué lamentablement. Les fichiers semblent aller là où vous vous attendez le moins (même si je suppose qu'ils ne sont pas des fichiers?), Je ne pouvais pas choisir le calque converti dans la boîte de dialogue de généralisation après avoir enfin trouvé comment sélectionner une carte (je ne sais pas ce que je veux dire par une carte) ... cauchemar. Cherche les marchandises si je pouvais tout régler cependant :)
un ben différent
1

Il existe un autre moyen, peut-être uniquement depuis la version QGIS 2.0:

Sous Traitement> Boîte à outils, vous pouvez accéder aux outils GRASS et SAGA. Pour le lissage, vous trouverez v.generalize, mais également une simplification de ligne de SAGA. Ces outils fonctionnent sur des fichiers de formes standard, aucun vecteur d'herbe n'est donc nécessaire:

entrez la description de l'image ici

Le mode batch n'est pas encore très bien résolu (clic droit dans le menu de droite et choisissez "Exécuter en tant que batch", car il faut choisir chaque fichier manuellement. Le plug-in de généralisation mentionné plus haut permet de choisir plusieurs fichiers plus simplement. , mais cela ne fonctionne que si on ne spécifie pas de fichier dans lequel enregistrer, sinon le plug-in se bloque.

Max
la source
1

Il y a un algorithme de géométrie lisse sous Processing Toolbox -> QGis geoalghoritms -> Vector.

Ligne
la source