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

Rencontres QGIS 2025

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

#1 Tue 23 November 2010 15:27

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

[MI x] Requête spatiale SQL sur trois tables

Bonjour
On me pose une "colle" et je vous en fait profiter...
Soit une table de polygones (par exemple des communes), COMM, et deux zonages quelconques, ZONE_1 et ZONE_2, qui englobent des communes de COMM et peuvent même s'intersecter entre eux par endroits.
Comment en UNE SEULE requête déterminer les communes de COMM qui SOIT intersectent ZONE_1, SOIT intersectent ZONE_2  ??
Nous n'avons trouvé que la requête qui sélectionne - quand il y en a - les communes intersectant à la fois les deux zonages... sad

Hors ligne

 

#2 Tue 23 November 2010 16:22

Marc-André
Participant assidu
Lieu: Montréal
Date d'inscription: 30 Sep 2005
Messages: 688

Re: [MI x] Requête spatiale SQL sur trois tables

Bonjour,

En une fois, je ne crois pas que cela soit possible.

Cependant, de cette manière ça devrait donner le résultat que vous souhaitez.

Vous pouvez ajouter trois colonnes dans votre table des communes: Z_1, Z_2, Z_1_2
Faites votre requête avec COMM et ZONE1. Mettez à jour la colonne Z_1 de la requête en inscrivant la valeur «1».
Faites votre requête avec COMM et ZONE2. Mettez à jour la colonne Z_2 de la requête en inscrivant la valeur «1».
Mettez à jour la colonne Z_1_2 en additionnant les valeurs des colonnes Z_1 et Z_2.
Où la valeur = 0: Pas d'intersection.
Où la valeur = 1: Intersection simple.
Où la valeur = 2: Intersection double.

Dernière modification par Marc-André (Tue 23 November 2010 16:24)

Hors ligne

 

#3 Tue 23 November 2010 16:31

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

Re: [MI x] Requête spatiale SQL sur trois tables

Marc-André a écrit:

...En une fois, je ne crois pas que cela soit possible...


Je m'acharne !! Je ne veux pas croire ça de MI ....
Sinon, bien joué pour la manoeuvre de contournement smile
J'ai déjà noté qu'il est beaucoup plus rapide, souvent, de procéder à des mises à jour de colonne sur la base de critères spatiaux puis à une requête attributaire, que de faire directement une requête spatiale

Hors ligne

 

#4 Tue 23 November 2010 18:58

Daniel
Membre
Lieu: Victoriaville, Québec
Date d'inscription: 6 Sep 2005
Messages: 2028

Re: [MI x] Requête spatiale SQL sur trois tables

Salut
Excellent Marc-André.
Lorsque je travaillais sur Idrisi, logiciel matriciel, nous utilisions cette méthode que l'on appelait méthode binaire.  Tu mets des 1 où il y a information et 0 où il n'y en a pas.  Tu répète cette procédure autant de fois que tu as de classes.  Par la suite, retour au mathématique de 3e année, tu additionnes les 1 !!!!!!

J'aime bien aussi la dernière phrase de Maurice.  Il est souvent préférable de faire en trois étapes et une demie-journée de travail, une analyse que de passer trois jours à chercher une solution pour arriver au résultat. 

Daniel


De retour à la géomatique

Hors ligne

 

#5 Thu 02 December 2010 11:28

michelbgy
Participant actif
Date d'inscription: 9 Feb 2010
Messages: 77

Re: [MI x] Requête spatiale SQL sur trois tables

bonjour,

une amélioration à la méthode de Marc-André:
en donnant la valeur 10 aux objets de la requête dans la colonne Z_2, on améliore la qualité du résultat: non seulement on saura le nombre de zones interceptées,mais lesquelles: 0= aucune, 1= zone1, 10 = zone2, 11= zones 1 et 2

c'est le principe de mettre un "traceur" qui permet même après une somme ou une concaténation de retrouver des informations initiales

En utilisant ce principe il y a une méthode avec une seule requête (puisque c'était la question) finalement plus simple:

assembler les tables zones 1 et 2 après avoir pour chacune créé une colonne (numérique) et donné la valeur 1 aux objets de zone1 et 10 à ceux de zone 2
faire la requête spatiale et agréger par somme de ce champs, on retrouve nos 4 valeurs possibles

Le procédé doit permettre de travailler sur jusqu'à une dizaine de tables, voire plus

Hors ligne

 

Pied de page des forums

Powered by FluxBB