Pages: 1
- Sujet précédent - QGIS 3.8: Position Etiquette en fonction orientation polyligne - Sujet suivant
#1 Thu 08 August 2019 11:43
- GlaDal
- Participant assidu
- Date d'inscription: 30 Aug 2013
- Messages: 1103
QGIS 3.8: Position Etiquette en fonction orientation polyligne
Bonjour à tous,
J'ai deux couches : une nuage de points avec différentes valeurs qui intersecte une polyligne.
Je cherche à moyen de placer automatiquement mes étiquettes de ma couche de point en fonction de l'orientation de ma polyligne afin d'éviter que les étiquettes ne recouvrent cette polyligne. Et surtout, ce serait trop facile sinon, je souhaite récupérer non pas la position XY de cette étiquette mais l'offset en X et Y par rapport au point de l'étiquette.
J'ai cherché du côté du stockage des infos de positionnements dans une table auxiliaire, echec !
Merci d'avance !
Hors ligne
#2 Mon 19 August 2019 12:44
Re: QGIS 3.8: Position Etiquette en fonction orientation polyligne
Bonjour,
Après avoir installé le plugin reffunctions, essayez qqch de ce type :
Code:
with_variable( 'fid', geomnearest( 'l','fid'), angle_at_vertex(geometry(get_feature('l','fid',@fid)),0) + 90)
Ici, prend l'angle au vertex 0. Améliorable si on arrive à récupérer l'index du vertex le plus proche du point
Sinon, pour la moyenne de tous les noeuds, juste pour info :
Code:
with_variable( 'fid', geomnearest( 'l','fid'), array_avg( array_foreach( generate_series(0, num_points(geometry(get_feature('l','fid',@fid))), 1), angle_at_vertex(geometry(get_feature('l','fid',@fid)),@element) +90) ) )
Un préalable préférable : splitter la ligne en segments
geodata au cerema et petits billets en géomatique
Hors ligne
#3 Mon 19 August 2019 14:05
Re: QGIS 3.8: Position Etiquette en fonction orientation polyligne
Entre midi et deux, je me "amusé" à chercher une expression qui prenne en compte l'angle du segment de la polyligne la plus proche du point
Voici ce que ça donne (attention c'est un peu capillo-tracté)
Code:
with_variable( 'geom', geometry(get_feature('l','fid',geomnearest( 'l','fid'))), angle_at_vertex(@geom, with_variable( 'arr', with_variable( 'geom', geometry(get_feature('l','fid',geomnearest( 'l','fid'))), array_foreach(generate_series(1, num_points(@geom), 1), distance($geometry, point_n(@geom, @element)) ) ), array_find(@arr, array_min(@arr)) )) + 90 )
Code:
array_find(@arr, array_min(@arr))
permet de trouver, dans le tableau des valeurs de distance aux vertex, quel est l'index du vertex le plus proche, que l'on mettra alors dans la fonction angle_at_vertex
geodata au cerema et petits billets en géomatique
Hors ligne
#4 Mon 26 August 2019 09:18
- GlaDal
- Participant assidu
- Date d'inscription: 30 Aug 2013
- Messages: 1103
Re: QGIS 3.8: Position Etiquette en fonction orientation polyligne
Aha, j'aime bien quand on s'amuse entre midi et deux comme ça ! Certains font du sport, d'autres font du sql. C'est beau !
Bon, j'ai testé ta formule mais ça ne donne rien chez moi. Je suis une bille en sql, j'apprends tout doux donc ça me demande un peu de temps à digérer. Je prends le temps de retester dans la semaine et reviendrai vers toi si besoin !
En tout cas merci pour ton aide !
Hors ligne
#5 Wed 28 August 2019 17:28
Re: QGIS 3.8: Position Etiquette en fonction orientation polyligne
Voici un projet exemple en QGIS 3 avec données d'exemple en PJ
geodata au cerema et petits billets en géomatique
Hors ligne
#6 Thu 29 August 2019 15:16
- GlaDal
- Participant assidu
- Date d'inscription: 30 Aug 2013
- Messages: 1103
Re: QGIS 3.8: Position Etiquette en fonction orientation polyligne
Ah merci MathieuR ! Forcément, j'avais saisi ton expression dans le générateur de géométrie. Très réfléchi de ma part ! Et pour ceux qui n'ont pas ouvert le projet, il faut saisir l'expression dans "Rotation".
Merci encore pour ton retour.
Hors ligne
Pages: 1
- Sujet précédent - QGIS 3.8: Position Etiquette en fonction orientation polyligne - Sujet suivant