#1 Wed 27 June 2018 07:46
- CyrilP
- Juste Inscrit !
- Date d'inscription: 12 Jan 2018
- Messages: 1
QGIS 2.18.13: jointure SQL avec condition
Bonjour,
je souhaiterais obtenir la longueur d'une couche ligne, dans les points de ma couche points avec le model builder, ces points sont a l'intersection des lignes.
Problème 1:
dans les cas d'une jointure spatial classique cela me renvoi une table vide. Alors qu'a la main avec Vecteur/outil de gestion de données/joindre les attributs par localisation cela marche parfaitement mais je dois l'automatiser.
problème 2:
si je crée un tampon sur la couche ligne, la jointure ne se fait pas sur la bonne couche ligne et du coup je n'ai pas la bonne longueur
problème 3:
je constate que certaines lignes ont le point de départ et point d'arrivé d'inversé
Après une tonne d'essais utilisant des méthodes différentes j'en viens au SQL et là je ne maîtrise pas trop, surtout sous QGIS.
Mon idée est, par SQL dans le model builder (execute SQL) de traduire ceci en code pour que, je l'espère, cela marche :
je veux tout les champs
des tables NOEUDS et ARTERES
lorsque
dans les cas ou le x de NOEUDS = x de ARTERES(sous selection : celui qui ST_TOUCHES ma couche NOEUDs) ET le y de NOEUDS = y de ARTERES(sous selection : celui qui ST_TOUCHES ma couche NOEUDS)
groupé par NOM de NOEUDS
Actuellement j'ai quelque chose qui ressemble à ça :
select *
from "ARTERES", "NOEUDS"
where st_touches("ARTERES"."geometry","NOEUDS"."geometry")
group by "NOEUDS"."NOM"
Je suis bien sûr a l'écoute d'autres propositions !
Hors ligne
#2 Fri 29 June 2018 18:12
- CamBat
- Juste Inscrit !
- Date d'inscription: 29 Jun 2018
- Messages: 6
Re: QGIS 2.18.13: jointure SQL avec condition
Bonjour CyrilP,
Pour ton programme SQL, ici il ne se passe rien.
Dans le WHERE, il faut mettre une condition : a=b ici.
Si st_touches comprend les nœuds et artères, il faudrait écrire :
WHERE st_touches.noeuds.geometry.x = st_touches.arteres.geometry.x and st_touches.noeuds.geometry.y = st_touches.arteres.geometry.y
GROUP BY Nœuds.nom
Après, je ne connais pas l'ordre des tables : nœuds et artères dans st_touches ?
Dans ce cas, il faudrait écrire :
FROM st_touches et nom from nœud, artere puisque "st_touche" est utilisé, il faut qu'il sache d'où ça vient.
Après, je ne sui sûre de rien. Mais dans l'idée, il faudrait corriger cela déjà.
Cdlt
Hors ligne