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Ă© ?

#1 Wed 12 August 2009 19:57

MathieuB
Membre du bureau
Lieu: Montpellier
Date d'inscription: 18 Jan 2006
Messages: 1274
Site web

intersection entre 3 tables : comportement incomprensible

Bonsoir,

peut-ĂȘtre est-ce dĂ» Ă  la fatigue mais je cale sur une requĂȘte d'intersection dont je ne m'explique pas le rĂ©sultat :

je souhaite compter le nombre de ZNIEFF qui sont en LozÚre mais qui ne sont pas sur le territoire du Parc National des Cévennes.
J'utilise pour cela 3 tables : version_perimetre_znieff_gen_2, perimetre et departement
et une requĂȘte d'intersection :

Code:

select count(distinct znieff_gen_2_id_znieff)
from version_perimetre_znieff_gen_2
JOIN departement ON st_intersects(departement.geometrie, version_perimetre_znieff_gen_2.geometrie)
JOIN perimetre ON st_intersects(perimetre.geometrie, version_perimetre_znieff_gen_2.geometrie) is false
WHERE departement.num_insee='48' AND type_perimetre like '%pnc%'

Le rĂ©sultat de cette requĂȘte est 126 et est faux

En effet, j'ai 151 ZNIEFF en LOZERE :

Code:

select count(distinct znieff_gen_2_id_znieff)
from version_perimetre_znieff_gen_2
JOIN departement ON st_intersects(departement.geometrie, version_perimetre_znieff_gen_2.geometrie)
where departement.num_insee='48'

Et 80 ZNIEFF en LozĂšre qui sont sur le territoire du parc :

Code:

select count(distinct znieff_gen_2_id_znieff)
from version_perimetre_znieff_gen_2
JOIN departement ON st_intersects(departement.geometrie, version_perimetre_znieff_gen_2.geometrie)
JOIN perimetre ON st_intersects(perimetre.geometrie, version_perimetre_znieff_gen_2.geometrie)
where departement.num_insee='48' AND type_perimetre like '%pnc%'

Le rĂ©sultat que j'attends de ma premiĂšre requĂȘte est 71 (80+71=151).

Or la seule syntaxe qui me permette d'avoir ce bon rĂ©sultat utilise une sous requete  :

Code:

select count(distinct znieff_gen_2_id_znieff)
from version_perimetre_znieff_gen_2
JOIN departement ON st_intersects(departement.geometrie, version_perimetre_znieff_gen_2.geometrie)
where departement.num_insee='48'
AND znieff_gen_2_id_znieff 
NOT IN (
select znieff_gen_2_id_znieff
from version_perimetre_znieff_gen_2
JOIN perimetre ON st_intersects(perimetre.geometrie, version_perimetre_znieff_gen_2.geometrie)
where type_perimetre like '%pnc%')

Comprenez vous ce comportement ? je décortique le problÚme depuis 2 bonnes heures mais je ne vois pas le début d'une explication.

Merci d'avance,

Mathieu Bossaert

Dernière modification par Mathieu BOSSAERT (Fri 14 August 2009 11:46)


Mathieu BOSSAERT
Association GeoRezo

Hors ligne

 

#2 Fri 14 August 2009 10:56

MathieuB
Membre du bureau
Lieu: Montpellier
Date d'inscription: 18 Jan 2006
Messages: 1274
Site web

Re: intersection entre 3 tables : comportement incomprensible

Bonjour,

j'ai compris l'origine du problĂšme :

j'ai deux objets de type 'pnc' : la zone centrale et la zone périphérique.

ConsidĂ©rons une znieff complĂ©tement incluse dans la zone centrale, lors de la requĂȘte, l'intersection avec la zone pĂ©riphĂ©rique sera fausse et la znieff sera comptĂ©e.

Mon résultat (126) contenait donc toutes les ZNIEFF de LozÚre (151) sauf celles qui sont à la fois sur la zone centrale et sur la zone périphérique du Parc (25).

La solution est de travailler avec l'union des objets de mĂȘme type dans ma table perimetre :

Code:

select count( znieff_gen_2_id_znieff)
from version_perimetre_znieff_gen_2
JOIN departement ON st_intersects(departement.geometrie, version_perimetre_znieff_gen_2.geometrie)
JOIN (select st_union(geometrie) as geometrie FROM perimetre where type_perimetre like '%pnc%' ) perimetre ON st_intersects(perimetre.geometrie, version_perimetre_znieff_gen_2.geometrie) is false
WHERE departement.num_insee='48'

Le "count( distinct )" n'aidait pas Ă  y voir claire et mes neurones manquent un peu de peps en ce moment...
L'affichage des znieff rĂ©sultant de la requĂȘte m'a bien aidait Ă  comprendre le soucis!

Dernière modification par Mathieu BOSSAERT (Fri 14 August 2009 12:06)


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Mathieu BOSSAERT
Association GeoRezo

Hors ligne

 

Pied de page des forums

Copyright Association GeoRezo