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 Tue 08 June 2021 09:27

captaineflam
Participant occasionnel
Date d'inscription: 15 Jan 2009
Messages: 27

QGIS 3.4: Requete intersection sur 2 couches , filtre par annee

Bonjour,

Ma base possède une couche A surface et une couche B linéaire.

Je souhaiterai dans un premier temps sélectionner les linéaires B qui intersectent les zones A puis ne garder que ceux dont la valeur du champ année est supérieure à la valeur du champ année de mes zones A.

Cela enregistré et exécutable facilement depuis l'environnement de travail.

Assez novice sur QGIS, je fais appel à vous pour avoir la méthode la plus logique, simple et efficace ce qui me permettra de mieux comprendre son fonctionnement. Car en effet j'ai vu quelques pistes sur les jointures topologiques sans être sûr d'être sur la bonne voie.

En vous remerciant par avance.

Hors ligne

 

#2 Mon 21 June 2021 11:03

Olivier Pompier
Participant occasionnel
Date d'inscription: 8 Sep 2013
Messages: 49

Re: QGIS 3.4: Requete intersection sur 2 couches , filtre par annee

Bonjour,

A votre place, je passerai par une requête SQL qui devrait ressembler à ça :

Code:

SELECT *
FROM zones za
JOIN lignes lb ON ST_Intersects(za.geom, lb.geom)
WHERE lb.annee > za.annee

Hors ligne

 

#3 Wed 23 June 2021 11:04

captaineflam
Participant occasionnel
Date d'inscription: 15 Jan 2009
Messages: 27

Re: QGIS 3.4: Requete intersection sur 2 couches , filtre par annee

Merci pour votre réponse.
Je teste dès que je me remets sur cette base.

Hors ligne

 

#4 Wed 23 June 2021 14:24

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3804

Re: QGIS 3.4: Requete intersection sur 2 couches , filtre par annee

Bonjour
@olivier, ne serait-ce pas plutôt?

Code:

from lignes lb join zones za

Hors ligne

 

#5 Mon 09 August 2021 14:53

captaineflam
Participant occasionnel
Date d'inscription: 15 Jan 2009
Messages: 27

Re: QGIS 3.4: Requete intersection sur 2 couches , filtre par annee

Bonjour,

avec la première méthode le champ geom n'existe pas la requête ne fonctionne pas, avec la deuxième méthode tous les objets ressortent et plusieurs fois (peut-être tous les sommets de tous les objets).

En vous remerciant.

Dernière modification par captaineflam (Mon 09 August 2021 15:24)

Hors ligne

 

#6 Mon 09 August 2021 16:48

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3804

Re: QGIS 3.4: Requete intersection sur 2 couches , filtre par annee

Bonjour,
Je relis mon texte  et je me rends compte qu'il n'est pas très clair. J'indiquais juste qu'il me semblait qu'Olivier avait interverti les couches de sélection et de jointure. Tentez donc:

Code:

SELECT lb.champ1, lb.annee, za.annee, lb.geometry
FROM lignes lb
JOIN zones za ON ST_Intersects(za.geometry, lb.geometry)
WHERE lb.annee > za.annee

Hors ligne

 

#7 Tue 10 August 2021 10:16

captaineflam
Participant occasionnel
Date d'inscription: 15 Jan 2009
Messages: 27

Re: QGIS 3.4: Requete intersection sur 2 couches , filtre par annee

Merci pour votre réactivité!

Effectivement, le dernier code est plus clair.

Il me reste un petit obstacle pour tester ce code, à quoi correspond le champ "lb.champ1" saisi juste après SELECT?

Au cas où, pour plus de clarté, la couche linéaires est "OPERATIONS_MANDAT_2021_2026" et la couche surface est "fiche_action".

Hors ligne

 

#8 Tue 10 August 2021 11:29

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3804

Re: QGIS 3.4: Requete intersection sur 2 couches , filtre par annee

Il me reste un petit obstacle pour tester ce code, à quoi correspond le champ "lb.champ1" saisi juste après SELECT?


"lb" est un alias pour la couche "lignes" qui est donc à remplacer par "OPERATIONS_MANDAT_2021_2026". Pareil pour "za" --> "zones" --> "fiche_action".
"champ1" est juste un champ de votre couche. Je ne les connais pas; à vous de renommer correctement. L'idée était de ne pas sélectionner tous les champs mais juste ceux qui vous intéressent et aussi comparer avec le champ annee de la fiche action pour s'assurer qu'on est bons. Autrement vous pouvez utiliser "Select lb.*, za.annee" pour la première ligne par ex.

Hors ligne

 

#9 Fri 20 August 2021 12:22

captaineflam
Participant occasionnel
Date d'inscription: 15 Jan 2009
Messages: 27

Re: QGIS 3.4: Requete intersection sur 2 couches , filtre par annee

Super, merci, cela fonctionne.

J'avais un petit souci car apparemment la géométrie des surfaces que j'ai récupéré sont bourrées d'erreurs alors la couche n'est pas utilisable. J'ai fait des tests avec des couches créées proprement et cela fonctionne.

Je pense être obligé de re-créer les surfaces car les outils de traitement n'arrivent pas à les corriger, galère.

En tous cas merci pour cette première initiation au langage SQL.

Hors ligne

 

#10 Tue 17 May 2022 14:28

oligator6200
Participant occasionnel
Date d'inscription: 10 May 2019
Messages: 32

Re: QGIS 3.4: Requete intersection sur 2 couches , filtre par annee

Bonjour à tous,

Je débute en SQL et je souhaite simplement faire une intersection toute simple pour générer une table avec le nom de tous les zonages (polygone A) qui intersectent la couche d'un site d'étude (polygone B). Cependant, j'ai essayé plusieurs formulations mais je n'y parviens pas... La première en utilisant cette syntaxe :

SELECT "ens"."Nom","ens".geometry
FROM "ens","site_etude"
Join "ens" on st_intersects ("site_etude".geometry,"ens".geometry)

J'obtiens l'erreur suivante :Query preparation error on PRAGMA table_info(_tview): ambiguous column name: ens.Nom mais en quoi mon intitulé de colonne est-il ambigu ?

Une autre que j'arrive à exécuter mais cela me retourne une colonne vide:

SELECT "ens"."Nom"
FROM  "ens","site_etude"
where st_intersects ( "ens"."geometry","site_etude"."geometry")

Pourriez-vous m'éclairer sur mon erreur s'il vous plaît ?

Je vous remercie par avance,

Oli

Hors ligne

 

#11 Tue 17 May 2022 15:58

loicbcn
Participant occasionnel
Date d'inscription: 22 Jan 2018
Messages: 26

Re: QGIS 3.4: Requete intersection sur 2 couches , filtre par annee

Bonjour,
Ta syntaxe n'est pas correcte:

Code:

SELECT "ens"."Nom","ens".geometry
FROM "ens"
Join "site_etude" on st_intersects ("site_etude".geometry,"ens".geometry)

Hors ligne

 

#12 Wed 18 May 2022 10:27

oligator6200
Participant occasionnel
Date d'inscription: 10 May 2019
Messages: 32

Re: QGIS 3.4: Requete intersection sur 2 couches , filtre par annee

Bonjour,

Merci de votre réponse mais pourriez-vous m'éclairer sur ce qui n'est pas correcte dans la syntaxe ? des doubles cotes en trop ? des mauvais appels de fonction ? car j'ai essayé dans de nombreux sens et je ne parviens pas à obtenir un résultat valide.

Je vous remercie par avance,

Oli

Hors ligne

 

#13 Wed 18 May 2022 11:06

loicbcn
Participant occasionnel
Date d'inscription: 22 Jan 2018
Messages: 26

Re: QGIS 3.4: Requete intersection sur 2 couches , filtre par annee

Bonjour,
Si tu utilises "join", tu ne dois pas écrire les noms des 2 tables dans le from

Code:

FROM "ens","site_etude"

La requête écrite dans mon précédent message fonctionne-t-elle ?

Hors ligne

 

Pied de page des forums

Powered by FluxBB