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

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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

 

Pied de page des forums

Powered by FluxBB