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 Fri 17 July 2009 13:48

aantonin
Juste Inscrit !
Date d'inscription: 22 Jun 2009
Messages: 7

PostgreSQL : Lisser des données : sélection unique par polygone

Bonjour,

J'aurai besoin d'un peu d'aide

J'ai deux BD :
- Occsol : constitué de plusieurs habitats constitués eux même de plusieurs polygones
- Relevés espèces patrimoniales floristiques : constitué de plusieurs points d'observation pour les différentes espèces

Et j'aimerai arriver à faire en sorte d'avoir la répartition des espèces par habitats mais en ne la comptant qu'une fois par polygone

Voici un exemple illustré :

> J'ai 5 relevés pour une espèce qui tombe dans 1 habitat avec lui-même 4 polygones. La répartition des relevés est la suivante :

polygone 1: 2 relevés
polygone 2: 1 relevés
polygone 3: 0 relevés
polygone 4: 2 relevés
Total des relevés pour l'espèce dans l'habitat: 5 relevés

Et j'aimerai faire en sorte que cela me donne :

polygone 1: 1 relevés
polygone 2: 1 relevés
polygone 3: 0 relevés
polygone 4: 1 relevés
Total des relevés pour l'espèce dans l'habitat: 3 relevés


Cela pour toutes les espèces afin de "lisser" mes données et supprimer certains biais dû aux méthodes d'échantillonnage

Voici la formule "allégée" (un seul milieu) que j'utilise pour avoir la répartissant de tous les relevés sans lissage :

SELECT znieffflore.cbn_taxon, count(Aeroports) as Aeroports
FROM(
SELECT znieffflore.cbn_taxon,
CASE WHEN int_06='Aeroports' THEN 1 END AS Aeroports
FROM znieffflore, ocsol
WHERE st_intersects(znieffflore.geometrie, ocsol.geometrie)) sous_reql, znieffflore, ocsol
where znieffflore.précision_ <> 'lieudit'

GROUP BY znieffflore.cbn_taxon


EDIT : sachant que j'ai un "gid" unique (=numéro) pour chaque polygone


Merci d'avance pour votre aide

Bien cordialement

Dernière modification par aantonin (Mon 20 July 2009 08:53)

Hors ligne

 

#2 Mon 20 July 2009 16:48

aantonin
Juste Inscrit !
Date d'inscription: 22 Jun 2009
Messages: 7

Re: PostgreSQL : Lisser des données : sélection unique par polygone

Bonjour,

Je viens de trouver la réponse à mon post précédent : il suffit en fait de compte combien de fois le polygone sur lequel est présent l'espèce apparait dans le milieu. Pour ce faire, il suffit d'utiliser un distinct

Je me permet donc de mettre ici ma requête final si quelqu'un en as l'utilité :

SELECT mnhn_taxon, count(distinct "311") as "311", count(distinct "312") as "312"
FROM(
SELECT znieffflore.mnhn_taxon,
CASE WHEN cde_06='311' THEN ocsol.gid END AS "311",
CASE WHEN cde_06='312' THEN ocsol.gid END AS "312"
FROM znieffflore, ocsol
WHERE st_intersects(znieffflore.geometrie, ocsol.geometrie) AND cde_06 IN ('311','312') and znieffflore.lib__zone_ = 'Points') sous_reql
GROUP BY mnhn_taxon



Encore merci

Bien cordialement

Dernière modification par aantonin (Mon 20 July 2009 17:13)

Hors ligne

 

Pied de page des forums

Powered by FluxBB