Je veux utiliser QGIS pour créer des points le long de la ligne, mais à une distance spécifiée. J'ai trouvé deux outils GRASS dans SEXTANTE Toolbox:
- v.to.points
- v.segment
J'ai essayé v.to.points , en définissant la distance maximale entre les points en unités de carte à 100 et j'ai obtenu ceci:
La deuxième photo montre un gros plan de la photo du haut. Le résultat est ce que je veux, mais je veux obtenir moins de points , mais même si je fixe la distance maximale à 1000 ou 1000000, le résultat est le même.
J'ai essayé d'utiliser v.segment , mais je n'avais aucun fichier contenant des règles de segment.
Underdark m'a donné quelques conseils et j'ai essayé les géométries Densify avec un intervalle . Tout d'abord, cela m'a donné un fichier de formes polyligne identique à celui que j'ai entré, puis j'ai utilisé des nœuds d'extraction pour essayer d'obtenir ces points. Mais le résultat était le même que j'ai obtenu en utilisant des points v.to. , peu importe ce que je définissais l'intervalle de distance.
Comment puis-je créer des points le long de la ligne et à une distance spécifiée?
la source
Réponses:
Dans la console Python:
vous pouvez utiliser le module Shapely (comme dans Comment créer des points équidistants dans QGIS? ) avec la fonction
point = ligne.interpoler (distance actuelle)
La nouvelle API Python de la version principale (1.9) a une commande équivalente (comme dans Génération de nœuds de chaînage (distance) dans QGIS de Nathan Woodrow)
point = geom.interpolate (distance actuelle)
ou vous pouvez utiliser l'algèbre vectorielle et les cosinus de direction (comme dans PyQGIS: géométries, vecteurs, algèbre vectorielle ou cosinus de direction, exemples d'application , en français)
1) créer une classe de couche mémoire (classe complète (sans attributs) sur crea_mem_layer.py )
2) fonctions d'algèbre vectorielle (de algèbre_vect_PyQGIS.py )
3) cosinus de direction
4) Traiter la ligne ou les segments de ligne
Résultats
polyligne, point équidistant avec Shapely ou PyQGIS2, avec cosinus de direction
Ensuite, ajustez simplement l'intervalle
la source
Il existe maintenant un plugin appelé QChainage qui fait exactement ce que vous voulez. Vous spécifiez une distance d'intervalle et le plugin crée des points le long de votre ligne à l'intervalle spécifié.
la source
J'ai écrit un script qui modifie l'outil de géométrie Sextante Densify pour accepter une certaine distance. Cela s'appelle densifier les géométries avec un intervalle .
Après avoir exécuté Densify, vous pouvez extraire les points à l'aide de l' outil Extraire les nœuds .
Vous pouvez l'obtenir auprès de Github et les instructions d'installation sont sur mon blog .
la source
Si vous ne voulez pas jouer avec les scripts python, vous pouvez simplement installer et utiliser le plugin "Profile from line" et ignorer / supprimer la colonne des valeurs raster. Le chaînage sera celui que vous aurez défini pour l'intervalle d'échantillonnage.
la source
Eh bien, je ne sais pas si c'est dans la version stable, mais dans la boîte à outils sextante sur 1.9 alpha sous Geoalgorithims-> Vector est l'option "Convertir les lignes en points". Fonctionne bien, soyez génial si cela ajoute un champ pour la distance le long de la ligne.
Intéressant, il a cependant ajouté le champ NAME de ma couche vectorielle.
J'ai essayé de faire fonctionner ce script Python par Nathan Woodrow, mais je crains avec python. Et avec le code en général, il semble.
la source
J'ai passé beaucoup de temps à lutter contre ce problème, mais j'ai finalement obtenu plus ou moins ce que je cherchais en utilisant QChainage. Ce que je voudrais partager, c'est quelque chose qui peut aider les autres. Lors de l'utilisation de l'outil de dissolution de géotraitement SAGA sur la ligne, QChainage produit des résultats incorrects. L'utilisation d'un outil de dissolution différent le fait fonctionner correctement.
la source