Pages: 1
- Sujet précédent - QGIS: Calculer en chaque noeud la longueur des 2 segments precedents - Sujet suivant
#1 Tue 03 January 2023 13:31
- GlaDal
- Participant assidu
- Date d'inscription: 30 Aug 2013
- Messages: 1092
QGIS: Calculer en chaque noeud la longueur des 2 segments precedents
Bonjour - QGIS 3.28
J'ai à ma disposition une couche de polyligne. Je cherche à calculer, en chaque noeud de cette polyligne, la longueur cumulée des deux segments précédents et suivants. Pour être plus clair, j'ai mis un image en pièce-jointe. Pour le noeud 3, le résultat serait 18m. Pour le noeud 4, le résultat serait 20m.
Au final, j'aimerais extraire les portions de ligne (composées de 4 segments) qui sont inférieures à 20m.
Toute aide est la bienvenue ! D'avance merci.
Dernière modification par GlaDal (Tue 03 January 2023 13:33)
Hors ligne
#2 Wed 04 January 2023 11:55
- GlaDal
- Participant assidu
- Date d'inscription: 30 Aug 2013
- Messages: 1092
Re: QGIS: Calculer en chaque noeud la longueur des 2 segments precedents
Pour poursuivre, j'arrive à calculer la distance cumulée des 2 segments précédents et suivants le noeud 3, grâce à l'expression suivante :
Code:
distance_to_vertex($geometry,3)- distance_to_vertex($geometry,1)+ distance_to_vertex($geometry,5)- distance_to_vertex($geometry,3)
Ca ne fait pour autant pas le job car il faudrait que je puisse faire ce calcul en chaque noeud de ma polyligne. Si quelqu'un a une idée, je prends ! :-)
Dernière modification par GlaDal (Thu 05 January 2023 09:59)
Hors ligne
#3 Thu 05 January 2023 11:27
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3945
Re: QGIS: Calculer en chaque noeud la longueur des 2 segments precedents
Hello,
Je te laisse tester les formules et vais éviter la voie full expression car il faudra jouer avec les arrays et maps et pas le temps. Surtout avec l'expérience de ta précédente requête... voici le scénario que je verrais:
1. Avec l'algorithme "Extraire les sommets", créer une couche correspondants aux sommets des lignes: chaque point devrait avoir les attributs de la ligne (donc un identifiant) et le numéro d'ordre du sommet
2. calculer dans un champ pour chaque sommet les distances, avec du get_feature pour recupérer la ligne, le champ vertex_index pour une formule plus générique. Il va peut-être falloir du case when pour gérer les 2 premiers et 2 derniers sommets. On peut donc identifier/extraire quels sommets remplissent la condition.
3. On peut même imaginer récupérer dans un champ la géométrie correspondante à l'aide de la fonction line_substring combinée à distance_to_vertex pour les arguments start et end (mais ceci peut passer dans l'étape suivante)
4. Utiliser l'algorithme "Géométrie par expression" pour créer une couche de ligne à partir des nœuds, avec le champ géométrique précédemment créé ou en lui passant la formule
5. Passer tout cela dans le modeleur
Au final, j'aimerais extraire les portions de ligne (composées de 4 segments) qui sont inférieures à 20m.
Et tu fais quoi quand deux sommets consécutifs (soit 5 segments) remplissent la condition, mais les 5 bout à bout dépassent ton seuil (ou pas)? Genre, dans ton exemple les sommets 2 et 3? ou sommets 3 et 4 si seuil à 22?
Hors ligne
#4 Thu 05 January 2023 13:56
- GlaDal
- Participant assidu
- Date d'inscription: 30 Aug 2013
- Messages: 1092
Re: QGIS: Calculer en chaque noeud la longueur des 2 segments precedents
Merci SANTANNA ! Je suis en train de tester en m'appuyant sur ton déroulé. Pour l'instant, je n'y arrive pas mais c'est l'occasion de me pencher un peu plus sérieusement sur les fonctions. Je posterai une fois résolu le problème.
Hors ligne
Pages: 1
- Sujet précédent - QGIS: Calculer en chaque noeud la longueur des 2 segments precedents - Sujet suivant