#1 Thu 04 July 2019 16:06
- BOYER.M
- Participant actif
- Date d'inscription: 5 Sep 2012
- Messages: 148
QGIS 3.6: Selection sur plusieurs criteres
Bonjour,
Je vous sollicite étant donné que je ne parviens pas à trouver la solution malgré mes recherches.
J'ai une couche de type ligne, qui a un attribut appelé "Type" (type A, B ou C).
Je souhaite à partir de plusieurs critères modifier certains tronçons qui son en C ou en B en A.
Les critères :
- la longueur du tronçons doit être inférieur ou égal à 30 m - pas de soucis pour celui-ci.
- le tronçons ne doit pas contenir d'angle inférieur à 170° ou supérieur à 190° (sur les sommets) - ici je sèche sur la méthode de calcul des angles d'un tronçon (un tronçon pouvant avoir 0 ou plusieurs sommets), j'ai regardé du coté de l'azimut mais cela indique un seul azimut par tronçon.
- le tronçons de "type C"doit intersecter à ses 2 extrémités un tronçon en de "type A" - ici je ne parviens pas à trouver la méthode pour indiqué uniquement au 2 extrémités, si l'intersection n'est qu'a une extrémité il ne pas me le sélectionner.
En espérant avoir était assez clair.
Si certains on des idées, pistes de réflexion je suis preneurs
Merci par avance,
Hors ligne
#2 Thu 04 July 2019 16:35
- carteq
- Participant assidu
- Date d'inscription: 8 Mar 2008
- Messages: 829
Re: QGIS 3.6: Selection sur plusieurs criteres
le tronçons ne doit pas contenir d'angle inférieur à 170° ou supérieur à 190° (sur les sommets)
Pouvez-vous inclure un schéma de ce qui est acceptable et de ce qui ne l'est pas ?
Merci
Hors ligne
#3 Fri 05 July 2019 16:34
- BOYER.M
- Participant actif
- Date d'inscription: 5 Sep 2012
- Messages: 148
Re: QGIS 3.6: Selection sur plusieurs criteres
le tronçons ne doit pas contenir d'angle inférieur à 170° ou supérieur à 190° (sur les sommets)
Pouvez-vous inclure un schéma de ce qui est acceptable et de ce qui ne l'est pas ?
Merci
Bonjour,
en espérant que se soit plus claire.
Merci,
Hors ligne
#4 Fri 05 July 2019 21:14
- carteq
- Participant assidu
- Date d'inscription: 8 Mar 2008
- Messages: 829
Re: QGIS 3.6: Selection sur plusieurs criteres
le tronçons ne doit pas contenir d'angle inférieur à 170° ou supérieur à 190° (sur les sommets) - ici je sèche sur la méthode de calcul des angles d'un tronçon (un tronçon pouvant avoir 0 ou plusieurs sommets), j'ai regardé du coté de l'azimut mais cela indique un seul azimut par tronçon.
Il faudrait soit programmer une boucle qui passe tous les segments,
Ou bien diviser chaque ligne en segments. Il y a un outil pour ça : exploser des lignes. On peut alors utiliser l'azimuth sur chacun. Ajoutez un champ qui contiendra 0 ou 1, selon que l'azimuth est accepté ou pas. Il est accepté en fonction de la différence avec le précédent sur la même ligne d'origine. Je ferais cette dernière opération en SQL, mais il est sûrement possible d'y arriver avec la calculatrice de champs. Enfin, il faut aggréger les lignes ensemble à nouveau, en utilisant le champ de 0/1 pour aggréger, en utilisant l'aggrégateur min(). Si une ligne aggrégée se retrouve avec un 0, elle contient un angle non désiré.
le tronçons de "type C"doit intersecter à ses 2 extrémités un tronçon en de "type A" - ici je ne parviens pas à trouver la méthode pour indiqué uniquement au 2 extrémités, si l'intersection n'est qu'a une extrémité il ne pas me le sélectionner.
Ça se fait bien en SQL. Je vais y travailler si j'ai le temps dans les prochains jours.
Hors ligne
#5 Mon 08 July 2019 13:42
- BOYER.M
- Participant actif
- Date d'inscription: 5 Sep 2012
- Messages: 148
Re: QGIS 3.6: Selection sur plusieurs criteres
Bonjour,
Merci carteq, je vais regarder ce que tu me dis.
Cordialement
Hors ligne
#6 Tue 09 July 2019 03:31
- carteq
- Participant assidu
- Date d'inscription: 8 Mar 2008
- Messages: 829
Re: QGIS 3.6: Selection sur plusieurs criteres
(supprimé)
Dernière modification par carteq (Tue 09 July 2019 15:50)
Hors ligne
#7 Tue 09 July 2019 15:27
- carteq
- Participant assidu
- Date d'inscription: 8 Mar 2008
- Messages: 829
Re: QGIS 3.6: Selection sur plusieurs criteres
(supprimé)
Dernière modification par carteq (Tue 09 July 2019 15:49)
Hors ligne
#8 Tue 09 July 2019 15:48
- carteq
- Participant assidu
- Date d'inscription: 8 Mar 2008
- Messages: 829
Re: QGIS 3.6: Selection sur plusieurs criteres
le tronçons de "type C"doit intersecter à ses 2 extrémités un tronçon en de "type A" - ici je ne parviens pas à trouver la méthode pour indiqué uniquement au 2 extrémités, si l'intersection n'est qu'a une extrémité il ne pas me le sélectionner.
Comme ça, ça fonctionne :
Code:
Select Z from ( Select a.geometry as GZ, a.[ID 2] as Z from L1 as a, L2 as b where intersects(buffer(StartPoint(a.geometry), 0.01), b.geometry) ), L2 as c where intersects(buffer(EndPoint(GZ), 0.01), c.geometry)
Pour le moment, je dois ajouter un buffer de 1cm autour de chaque point, sinon ça ne fonctionne pas. Je ne trouve pas d'opérateur spatial qui semble bien fonctionner entre les lignes et les points. "Touches" fonctionne dans un autre logiciel, mais pas avec spatialite...
Peut-être que mes géométries ne se touchent pas, mais en théorie elles se touchent.
Dernière modification par carteq (Tue 09 July 2019 16:12)
Hors ligne
#9 Thu 11 July 2019 14:56
- BOYER.M
- Participant actif
- Date d'inscription: 5 Sep 2012
- Messages: 148
Re: QGIS 3.6: Selection sur plusieurs criteres
Bonjour,
Merci pour vos retours, j'ai eu différentes urgences cette semaine qui mon eloignée de cette problématique je pourrai m'y remettre semaine prochaine. Encore merci.
Hors ligne
#10 Wed 17 July 2019 14:17
- BOYER.M
- Participant actif
- Date d'inscription: 5 Sep 2012
- Messages: 148
Re: QGIS 3.6: Selection sur plusieurs criteres
le tronçons de "type C"doit intersecter à ses 2 extrémités un tronçon en de "type A" - ici je ne parviens pas à trouver la méthode pour indiqué uniquement au 2 extrémités, si l'intersection n'est qu'a une extrémité il ne pas me le sélectionner.
Comme ça, ça fonctionne :Code:
Select Z from ( Select a.geometry as GZ, a.[ID 2] as Z from L1 as a, L2 as b where intersects(buffer(StartPoint(a.geometry), 0.01), b.geometry) ), L2 as c where intersects(buffer(EndPoint(GZ), 0.01), c.geometry)Pour le moment, je dois ajouter un buffer de 1cm autour de chaque point, sinon ça ne fonctionne pas. Je ne trouve pas d'opérateur spatial qui semble bien fonctionner entre les lignes et les points. "Touches" fonctionne dans un autre logiciel, mais pas avec spatialite...
Peut-être que mes géométries ne se touchent pas, mais en théorie elles se touchent.
Bonjour,
Quel outil utilises-tu ?
Penses-tu que l'outil de sélection par expréssion de QGIS suffise ?
Cordialement,
Hors ligne