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 Wed 17 November 2021 22:06

Loup
Juste Inscrit !
Date d'inscription: 16 Nov 2021
Messages: 8

QGIS/Atlas: compter des donnees par maille

Bonjour,

Je réalise des cartographies pour un atlas odonates. Je cherche à obtenir, grâce au générateur atlas, des cartes ,par espèce, du nombre de données par maille.
J'ai une couche de données avec les colonnes :
n_bd_dep (identifiant de la donnée)
nom_latin (nom de l'espèce)

Et une grille avec "FID" comme colonne d'identifiants.

Pour tenter d'obtenir ce que je souhaite, j'utilise une requête telle que :

SELECT "données 2021"."nom_latin", Count("données 2021"."n_bd_dep", "maillles 5k Loire"."FID") AS Nombre, "maillles 5k Loire"."FID", "maillles 5k Loire"."geometry"
FROM "maillles 5k Loire", "données 2021"
WHERE ST_Intersects("maillles 5k Loire"."geometry","données 2021"."geometry")
GROUP BY "données 2021"."nom_latin","maillles 5k Loire"."FID"

Malheureusement le résultat n'est pas celui escompté :
J'obtiens bien une ligne par maille et par espèce, mais  le nombre indiqué pour chaque espèce est le même pour toutes les mailles. Par exemple, pour Aeschna affinis, le nombre est de 8 pour toutes les mailles, Sympetrum vulgatum a un nombre de 2 pour toutes les mailles (alors qu'il n'est présent que dans 4 ou 5 mailles), etc.

Est-ce que j'utilise la mauvaise fonction ?

Hors ligne

 

#2 Thu 18 November 2021 02:44

carteq
Participant assidu
Date d'inscription: 8 Mar 2008
Messages: 829

Re: QGIS/Atlas: compter des donnees par maille

Bonjour Loup,

J'ai fait ça dans un autre logiciel, mais tu comprendras je crois comment corriger ton SQL :

Select [especes].[nom], Count([especes].[ID]) as [nombre],  [mailles].[maille_no] 
from [especes], [mailles]
where Intersects([especes].[Geom (I)], [mailles].[Geom (I)])
Group By [especes].[nom], [mailles].[maille_no]

Vincent

Hors ligne

 

#3 Thu 18 November 2021 15:07

Loup
Juste Inscrit !
Date d'inscription: 16 Nov 2021
Messages: 8

Re: QGIS/Atlas: compter des donnees par maille

Bonjour Vincent,

Merci pour l'aide. Le résultat est malheureusement toujours le même. J'ai testé avec un autre jeu de données similaires (seule le nombre de données change) et une autre grille de même taille : le résultat est mieux mais toujours pas comme je le souhaiterais.

Au lieu d'avoir un unique nombre par espèce pour toutes les mailles, j'ai l'impression que seules les mailles où il n'y a pas de données de l'espèce ont ce nombre (qui devraient normalement être zéro mais qui là semble être le minimum de données comptées dans une maille pour l'espèce en question).

Je ne comprends pas pourquoi il attribut un nombre de données aux mailles qui n'en n'ont pas (si c'est bien ça) ?

Je ne comprends pas non plus pourquoi la requête marche mieux avec ce jeu de données ?

Hors ligne

 

#4 Thu 18 November 2021 15:23

Loup
Juste Inscrit !
Date d'inscription: 16 Nov 2021
Messages: 8

Re: QGIS/Atlas: compter des donnees par maille

j'ai testé avec Max("Données Loire test"."nombre") AS NOMBRE à la place de Count("données 2021"."n_bd_dep" mais encore une fois le problème est le même :
J'ai bien le nombre maximum noté dans chaque maille mais les mailles sans données se voient toujours attribuer le minimum. J'aimerais plutôt pouvoir faire attribuer "0" lorsqu'il n'y a pas de donnée, afin de pouvoir ensuite masquer ces mailles vides. :-/

Hors ligne

 

#5 Thu 18 November 2021 15:28

Sylvain M.
Participant assidu
Lieu: Saint-Pierre-des-Nids (53)
Date d'inscription: 8 Sep 2005
Messages: 995

Re: QGIS/Atlas: compter des donnees par maille

Moi j'écrirais quelque chose comme  ça :

Code:

SELECT    d.nom_latin,
        m.FID,
        count(d.n_bd_dep) as nombre_donnees,
        m.geometry
FROM    "données 2021" d
JOIN    "maillles 5k Loire" m ON ST_Intersects(d.geometry, m.geometry)
GROUP BY d.nom_latin,
        m.FID,
        m.geometry

N'hésite pas à mettre des alias aux tables, c'est tout de suite plus lisible

Dernière modification par Sylvain M. (Thu 18 November 2021 15:30)


Sylvain M.

Hors ligne

 

#6 Thu 18 November 2021 16:55

Loup
Juste Inscrit !
Date d'inscription: 16 Nov 2021
Messages: 8

Re: QGIS/Atlas: compter des donnees par maille

Merci Sylvain. Malheureusement toujours pareil : toutes les mailles ont un nombre de données pour chaque espèce alors que beaucoup de ligne devraient avoir "0" en nombre... :-/
Pour mieux illustrer, Aeshna affinis a 466 lignes (soit le nombre de maille de ma grilles) sans jamais un seul zéro alors qu'elle n'est présente que dans 56 mailles. Les mailles où elle est réellement présente ont un nombre fiable (14,30,28,11,etc) mais les mailles où elle est censée être absente ont toutes "8" comme indication de nombre de données. Ce chiffre "par défaut" change pour chaque espèce. Je suppose que c'est le minimum de données de l'espèce dans les mailles mais sans certitude....

Hors ligne

 

#7 Thu 18 November 2021 20:36

carteq
Participant assidu
Date d'inscription: 8 Mar 2008
Messages: 829

Re: QGIS/Atlas: compter des donnees par maille

Loup, tu n'aurais pas des entités multiparties dans ton jeu de données  ? Ça fausserait les résultats.

J'ai vais tester ma solution dans QGIS dès que possible.

Hors ligne

 

#8 Thu 18 November 2021 21:33

Loup
Juste Inscrit !
Date d'inscription: 16 Nov 2021
Messages: 8

Re: QGIS/Atlas: compter des donnees par maille

A priori non :-/ Si tu veux tester directement avec mes couches tu peux les télécharger ici : <lien supprimé>
Est-ce bien le code que je dois saisir ? :

SELECT "D"."nom_latin",
Count("D"."n_bd_dep") AS Nombre,
"M"."geometry",
"M"."FID"

FROM "D"

JOIN "M" ON ST_Intersects("D"."geometry","M"."geometry")

GROUP BY "D"."nom_latin", "M"."FID", "M"."geometry"

Dernière modification par SANTANNA (Fri 19 November 2021 13:29)

Hors ligne

 

#9 Fri 19 November 2021 09:25

Sylvain M.
Participant assidu
Lieu: Saint-Pierre-des-Nids (53)
Date d'inscription: 8 Sep 2005
Messages: 995

Re: QGIS/Atlas: compter des donnees par maille

Je vais regarder le fichier, mais comme je viens de le télécharger, je te donne un petit conseil que normalement donne tout formateur SIG à ses élèves : jamais d'espaces, d'accents ou de caractères spéciaux dans le nom (et le chemin) de ses fichiers SIG, shapefile en particulier !

C'est la raison pour laquelle tu dois mettre des guillemets partout dans tes requêtes, alors qu'ils seraient inutiles si tu avais respecté cette consigne de base en SIG wink
Le code de ta requête serait alors beaucoup plus lisible smile


Sylvain M.

Hors ligne

 

#10 Fri 19 November 2021 09:52

Sylvain M.
Participant assidu
Lieu: Saint-Pierre-des-Nids (53)
Date d'inscription: 8 Sep 2005
Messages: 995

Re: QGIS/Atlas: compter des donnees par maille

Pour moi, cette requête donne bien le résultat souhaité :

Code:

SELECT    d.nom_latin,
        m.FID,
        count(d.n_bd_dep) as nombre_donnees,
        m.geometry
FROM    "données actualisées 2021" d
JOIN    "maillles 5k Loire" m ON ST_Intersects(d.geometry, m.geometry)
GROUP BY d.nom_latin,
        m.FID,
        m.geometry

(pour plus de rapidité dans son exécution, penser à créer un index spatial sur la couche avant : "propriété de la couche > onglet source > Créer un index spatial")

Dernière modification par Sylvain M. (Fri 19 November 2021 09:55)


Sylvain M.

Hors ligne

 

#11 Fri 19 November 2021 11:35

Loup
Juste Inscrit !
Date d'inscription: 16 Nov 2021
Messages: 8

Re: QGIS/Atlas: compter des donnees par maille

Merci Sylvain de passer du temps pour tenter de m'aider ! :-)

J'ai testé ça (après avoir renommé mes couches "D" et "M") :

SELECT    D.nom_latin,
        M.FID,
        count(d.n_bd_dep) as nombre_donnees,
        M.geometry
FROM    D
JOIN    M ON ST_Intersects(D.geometry, M.geometry)
GROUP BY D.nom_latin,
        M.FID,
        M.geometry

Le résultat est presque bon, le nombre de données par espèce et par maille est bien affiché mais toujours le même problème avec les mailles vides :
Le minimum de chaque espèce est attribué au mailles vides au lieu de zéro. Par exemple : toutes les mailles sans donnée de A. affinis ont "8" en "nombre_donnees".

Hors ligne

 

#12 Fri 19 November 2021 11:56

Loup
Juste Inscrit !
Date d'inscription: 16 Nov 2021
Messages: 8

Re: QGIS/Atlas: compter des donnees par maille

Je crois que j'ai trouvé le problème !! :-D
Je n'avais pas retirer les données non localisées de la table attributaire !

Hors ligne

 

#13 Fri 19 November 2021 12:01

Sylvain M.
Participant assidu
Lieu: Saint-Pierre-des-Nids (53)
Date d'inscription: 8 Sep 2005
Messages: 995

Re: QGIS/Atlas: compter des donnees par maille

En effet : bizarre un SHP avec des géométries nulles : ce n'est pas très propre...
Cette requête corrige le problème :

Code:

SELECT    d.nom_latin,
        m.FID,
        count(d.n_bd_dep) as nombre_donnees,
        m.geometry
FROM    "données actualisées 2021" d
JOIN    "maillles 5k Loire" m ON ST_Intersects(d.geometry, m.geometry)
WHERE d.geometry is not null
GROUP BY d.nom_latin,
        m.FID,
        m.geometry;

WHERE d.geometry is not null


Sylvain M.

Hors ligne

 

#14 Fri 19 November 2021 12:53

Loup
Juste Inscrit !
Date d'inscription: 16 Nov 2021
Messages: 8

Re: QGIS/Atlas: compter des donnees par maille

Tout fonctionne, merci !

Hors ligne

 

#15 Fri 19 November 2021 13:07

Sylvain M.
Participant assidu
Lieu: Saint-Pierre-des-Nids (53)
Date d'inscription: 8 Sep 2005
Messages: 995

Re: QGIS/Atlas: compter des donnees par maille

Par contre, vous devriez retirer le lien vers le fichier de données : ce sont des données nominatives des observateurs, et aussi avec potentiellement des espèces sensibles : ce fichier ne devrait pas être partagé tel quel.


Sylvain M.

Hors ligne

 

Pied de page des forums

Powered by FluxBB