#1 Tue 28 June 2022 12:09
- upriste
- Participant occasionnel
- Date d'inscription: 14 Feb 2019
- Messages: 48
QGIS 3.20.3: fleche directionnelle vers le point suivant
Bonjour,
J'ai une couche ponctuelle horodatée (jma, heure, minute, seconde) qui correspond à un itinéraire sur le réseau routier. Mes points épousent le linéaire du réseau routier. Je souhaiterais appliquer une symbologie "flèche" qui indiquerait la direction du point vers le point suivant. Je pourrais utiliser pour cela le champs date/heure/min/sec.
Ainsi mon point 1 doit être représenté par une flèche dirigée vers le point 2. Le point 2 doit être représenté par une flèche dirigée vers le point 3 et ainsi de suite.
Voici en PJ une capture pour y voir plus clair.
Vous noterez qu'il y a des horaires éloignés parce que le véhicule est passé 2X sur cette voie. Mais fondamentalement ça ne change rien au problème.
Hors ligne
#2 Tue 28 June 2022 14:07
- shirosaki
- Participant actif
- Lieu: Lyon
- Date d'inscription: 30 Mar 2018
- Messages: 125
Re: QGIS 3.20.3: fleche directionnelle vers le point suivant
Bonjour,
j'ai une solution, mais il faut que votre attribut temporel soit un champ de type DATETIME.
Si non, il faudra le convertir ou adapter la formule.
De là, Aller dans l'onglet symbologie --> Ligne 'Rotation' tout à droite vous avez une icone (ça ressemble à deux cellule l'une sur l'autre), cliquer dessus --> editer --> renseigner la formule suivante :
Code:
with_variable('arr_date', aggregate( layer:='point', aggregate:='array_agg', expression:="date", order_by:="date"), line_interpolate_angle(make_line($geometry, geometry( get_feature('point','date', @arr_date[1+array_find( @arr_date,"date")]))),0.0005)
Et voila, ça devrait être bon
hypothèse : "date" correspond à votre champ temporel, 'point' correspond au nom de votre couche de point, à adapter donc
Dernière modification par shirosaki (Tue 28 June 2022 14:09)
Paul QUESNOT
Hors ligne
#3 Wed 29 June 2022 16:09
- upriste
- Participant occasionnel
- Date d'inscription: 14 Feb 2019
- Messages: 48
Re: QGIS 3.20.3: fleche directionnelle vers le point suivant
Bonjour shirosaki,
Merci pour cette proposition. Je n'ai pas réussi à la faire fonctionner.
Parmi les type de champs, je n'ai déjà le choix qu'entre texte et date (8).
Mon champs d'origine qui contient l'horodatage est de type texte. Je n'arrive pas à le transformer en datetime.
J'ai essayé to datetime ("mon champs", 'MM-dd_HH:mm:ss', 'FR')
Hors ligne
#4 Wed 29 June 2022 17:06
- shirosaki
- Participant actif
- Lieu: Lyon
- Date d'inscription: 30 Mar 2018
- Messages: 125
Re: QGIS 3.20.3: fleche directionnelle vers le point suivant
Bonjour,
pouvez vous me transmettre un extrait de votre table attributaire ?
Sous quel format est votre couche ? shp, geopackage ?
Paul QUESNOT
Hors ligne
#5 Wed 29 June 2022 17:49
- upriste
- Participant occasionnel
- Date d'inscription: 14 Feb 2019
- Messages: 48
Re: QGIS 3.20.3: fleche directionnelle vers le point suivant
Voici un extrait de la couche shp. Merci.
Dernière modification par upriste (Wed 29 June 2022 17:50)
Hors ligne
#6 Thu 30 June 2022 08:27
- shirosaki
- Participant actif
- Lieu: Lyon
- Date d'inscription: 30 Mar 2018
- Messages: 125
Re: QGIS 3.20.3: fleche directionnelle vers le point suivant
Bonjour,
Vous pouvez créer un champ virtuel, vous aurez la possibilité de faire un champ DATETIME (Date et heure).
La formule à utiliser est la suivante :
Code:
to_datetime( ( string_to_array( "Date&Heure" ,' ')[0] || ' ' || "HeureMinSe"), 'dd/MM/yyyy HH:mm:ss.zzz')
Dernière modification par shirosaki (Thu 30 June 2022 08:33)
Paul QUESNOT
Hors ligne
#7 Thu 30 June 2022 17:46
- upriste
- Participant occasionnel
- Date d'inscription: 14 Feb 2019
- Messages: 48
Re: QGIS 3.20.3: fleche directionnelle vers le point suivant
Ah oui je n'avais pas pensé au champs virtuel. Votre formule fonctionne pour cela.
Par contre, le code transmis pour la symbologie ne fonctionne pas.
Je ne peux pas joindre la couche ici car après export le champs virtuel devient un champs texte.
Hors ligne
#8 Thu 30 June 2022 17:51
- shirosaki
- Participant actif
- Lieu: Lyon
- Date d'inscription: 30 Mar 2018
- Messages: 125
Re: QGIS 3.20.3: fleche directionnelle vers le point suivant
en effet, il manquait une parenthèse à la fin de la formule,
Code:
with_variable('arr_date', aggregate( layer:=@layer, aggregate:='array_agg', expression:="date", order_by:="date"), line_interpolate_angle(make_line($geometry, geometry( get_feature('point','date', @arr_date[1+array_find( @arr_date,"date")]))),0.0005))
j'ai également adapter la formule, comme ça vous n'avez qu'à changer le nom du champ "date".
ça devrait marcher maintenant, chez moi ça fonctionne avec vos données
Si ça ne fonctionne toujours pas, avez vous un message d'erreur ?
Dernière modification par shirosaki (Thu 30 June 2022 17:54)
Paul QUESNOT
Hors ligne
#9 Fri 01 July 2022 08:57
- upriste
- Participant occasionnel
- Date d'inscription: 14 Feb 2019
- Messages: 48
Re: QGIS 3.20.3: fleche directionnelle vers le point suivant
La formule fonctionne cette fois. Merci.
Par contre, Les flèches ne sont pas toujours dirigées vers vers le point suivant dans l'ordre chronologique.
Voici une capture : à cet endroit les points devraient tous aller vers le haut. Or les flèches sont tournés dans des sens différents. De ce que j'ai pu voir sur l'ensemble des données, il y a autant de flèches bien dirigées de flèches mal dirigées.
Il y a peut aussi cette contrainte de la voie ? J'ai fait en sorte de replacer tous les points sur la voie pour que cela fasse plus propre. Du coup la flèche directionnelle doit suivre aussi la voie ce qui parait complexe.
Dernière modification par upriste (Fri 01 July 2022 10:11)
Hors ligne
#10 Fri 01 July 2022 17:12
- shirosaki
- Participant actif
- Lieu: Lyon
- Date d'inscription: 30 Mar 2018
- Messages: 125
Re: QGIS 3.20.3: fleche directionnelle vers le point suivant
Il y avait une erreur dans la formule précédente, voici une version actualisée
Code:
with_variable('arr_date', aggregate( layer:=@layer, aggregate:='array_agg', expression:="date", order_by:="date"), line_interpolate_angle(make_line($geometry, geometry( get_feature(@layer,'date', @arr_date[1+array_find( @arr_date,"date")]))),0.0005))
attention de bien adapter le nom du champ "date"
PS : la capture d'écran mentionnée dans votre précédent post n'est pas passée
Dernière modification par shirosaki (Fri 01 July 2022 17:17)
Paul QUESNOT
Hors ligne
#11 Mon 04 July 2022 10:36
- upriste
- Participant occasionnel
- Date d'inscription: 14 Feb 2019
- Messages: 48
Re: QGIS 3.20.3: fleche directionnelle vers le point suivant
Bonjour,
Ca a l'air de plutôt fonctionner mis à part quelques cas particuliers. Merci pour cette formule.
Il faut juste avoir conscience que l'exécution de la formule génère une latence.
Hors ligne