Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
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

Printemps des cartes 2024

#1 Thu 08 August 2019 11:43

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

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

MathieuR
Membre
Lieu: aix-en-provence
Date d'inscription: 16 Feb 2009
Messages: 1690
Site web

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

MathieuR
Membre
Lieu: aix-en-provence
Date d'inscription: 16 Feb 2009
Messages: 1690
Site web

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

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

MathieuR
Membre
Lieu: aix-en-provence
Date d'inscription: 16 Feb 2009
Messages: 1690
Site web

Re: QGIS 3.8: Position Etiquette en fonction orientation polyligne

Voici un projet exemple en QGIS 3 avec données d'exemple en PJ


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

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

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

 

Pied de page des forums

Powered by FluxBB