Annonce
Pour sécuriser votre compte sur les forums du GeoRezo, nous demandons de changer votre mot de passe.
Vous allez recevoir un message pour effectuer ce changement de mot de passe.
Merci de bien respecter les règles préconisées.
Pages: 1
- Sujet précédent - QGIS 3.4: Requete intersection sur 2 couches , filtre par annee - Sujet suivant
#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: 3824
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: 3824
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: 3824
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
Pages: 1
- Sujet précédent - QGIS 3.4: Requete intersection sur 2 couches , filtre par annee - Sujet suivant