#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...
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
...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
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