banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

GEODATA DAYS 2024

#1 Tue 03 January 2023 13:31

GlaDal
Participant assidu
Date d'inscription: 30 Aug 2013
Messages: 1000

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)


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#2 Wed 04 January 2023 11:55

GlaDal
Participant assidu
Date d'inscription: 30 Aug 2013
Messages: 1000

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: 3862

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: 1000

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

 

Pied de page des forums

Powered by FluxBB