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 30 November 2016 03:35

BerengerREMY
Participant occasionnel
Lieu: Sumène (30)
Date d'inscription: 29 Nov 2016
Messages: 10

QGIS: Atlas ?

Bonjour,
Je veux réaliser des cartes d'atlas (91 mailles 10x10 km sur un département) à partir de données ponctuelles (données d'oiseaux nicheurs, le tout sur une table de points) de 300 espèces différentes avec chacune un indice de 1 à 3 (une colone "nom_espece" et une colone "Indice"). Donc 300 cartes à sortir.
Je veux renseigner chaque maille pour chaque espèce et "récupérer" la valeur (0= absence de l'espèce, 1= espece présente avec un indice 1, 2 idem et 3) la plus forte de chaque espèce pour chaque maille et ainsi avoir ma table attributaire de ma couche "Maille" avec en colone "nom_maille" (texte), puis "especeA" (entier 0-3), puis especeB (0-3), ... especeZ (0-3).
Comment faire pour faire cela en "quelques clics" SVP?
J'ai essayer des jointures, je n'y arrive pas et cela serait long car il faudrait faire la manip 300 fois. Mais même si c'est le cas, je suis preneur d'une solution.
MERCI pour votre aide

Hors ligne

 

#2 Wed 30 November 2016 09:32

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

Re: QGIS: Atlas ?

Tu devrais y parvenir avec le script "Atlas par valeurs uniques", proposé par Jérémie Cornet sur le Portail SIG.

Couplé avec les fonctions d’agrégations de la 2.16, c'est très puissant !

Avant cela, créé ta couche de données synthétisées "à la maille", via une jointure spatiale. Les requêtes SQL sur des "couches virtuelles", via le menu "Bases de données > Gestionnaire de bases de données" sont très bien pour ce travail.

Bon courage !

A+

Sylvain M.


Sylvain M.

Hors ligne

 

#3 Wed 30 November 2016 10:40

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

Re: QGIS: Atlas ?

Bonjour Bérenger,

content de te revoir par ici :-)

Tout d'abord, pour créer ta grille avec les valeurs d'abondance pour chaque couple maille/espece, le plus simple sera je pense de faire une requête sql dans une base de donnée spatialite.

Il y a bien QmarxanZ qui te permet de faire des aggregation de données par maille, mail il le fera pour toutes les espèces confondues et chaque maille ne ressortira qu'une fois avec l'abondance max parmi toutes les espèces présentes dans la maille.

Donc, avec ta couche des mailles et ta couche de points dans une base spatialite, une requête comme celle-ci te renverra toutes les triplets maille/espece/abondance_max

Code:

SELECT code_espece, max(abondance), grille.geometrie
FROM grille, point_espece
WHERE st_intersects(grille.geometrie, point_espece.geometrie)
GROUP BY code_espece, grille.geometrie

Tu en fais une table (QSpatialite est plus souple que le gestionnaire de base de données CF capture d'écran)

Maintenant tu as ta matière première, il te reste à utiliser simplement l'atlas de QGIS pour générer tes cartes par espèce (en utilisant une table attributaire de ta liste d'espèce comme couche de couverture par exemple)

http://si.cenlr.org/QGIS_atlas_avec_cou … n_spatiale

A bientôt,

Mathieu


Mathieu BOSSAERT
Association GeoRezo

Hors ligne

 

#4 Sun 04 December 2016 23:52

BerengerREMY
Participant occasionnel
Lieu: Sumène (30)
Date d'inscription: 29 Nov 2016
Messages: 10

Re: QGIS: Atlas ?

Bonjour Mathieu,
Merci une nouvelle fois pour ton aide.
J'ai donc réussi à obtenir une table de ma grille avec 3 colones "espece" (nom de l'espèce); "code"(max_code); "code10km" (code de la grille)
Pour cela, j'ai exécuté le code suivant après avoir créé ma BD dans QSpatialite avec mes 2 tables et exporté ma table résultat (avec geometrie)

Code:

SELECT espece, max(CODE), code10km, grille.geometry
FROM grille, obs
WHERE st_intersects(grille.geometry, obs.geometry)
GROUP BY espece,  code10km

Nickel, ca correspond à ceux dont j'ai besoin pour générer mes cartes (matière première). Même si j'ai 4800 lignes alors que je n'ai que 91 carrés (les carrés "positifs" se superposent).

Par contre ensuite, pour la génération de l'atlas comme expliqué dans le lien, ça correspond pas tout à fait à mon besoin.
J'ai besoin de "colorier" les carrés de ma grille suivant 3 couleurs en fonction du max_code (= indice de nidification, possible, probable, certain) alors qu'avec "ta" méthode, on peut juste faire de la présence absence.
J'ai fouillé l'outil Atlas, cela ne semble pas possible à réaliser?
Je vais me débrouiller autrement avec un style catégorisé couplé à des sélections sucessives pour chaque espèce

Un grand MERCI
A bientôt
Bérenger

Hors ligne

 

#5 Mon 05 December 2016 13:32

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

Re: QGIS: Atlas ?

Bonjour Bérenger,

Je vais me débrouiller autrement avec un style catégorisé couplé à des sélections sucessives pour chaque espèce


Ben non tu y es presque !

En fait ce n'est pas dans l'atlas, mais dans les règles de symbologie qu'on va régler ça. Dans mon exemple c'est de la présence/absence car le seul critère qui s'applique à chaque maille c'est "est-ce qui oui ou non elle concerne l'espèce courante ?"
Si on ajoute une second test sur la valeur du max on peut aller plus loin et définir 3 classes.

Je vais me débrouiller autrement avec un style catégorisé couplé à des sélections successives pour chaque espèce


On va utiliser "l'ensemble de règles" et on fera 3 règles, une pour chaque valeur d'abondance, avec une symbologie associée

- la maille concerne l'espèce courante de mon atlas) et que la colonne max est égale à 1
- la maille concerne l'espèce courante de mon atlas) et que la colonne max est égale à 2
- la maille concerne l'espèce courante de mon atlas) et que la colonne max est égale à 3

Ce qui donne les 3 règles suivantes :

Code:

"espece"  = attribute(@atlas_feature ,'espece') AND "max" = 1
"espece"  = attribute(@atlas_feature ,'espece') AND "max" = 2
"espece"  = attribute(@atlas_feature ,'espece') AND "max" = 3

Mathieu BOSSAERT
Association GeoRezo

Hors ligne

 

#6 Sat 10 December 2016 11:28

BerengerREMY
Participant occasionnel
Lieu: Sumène (30)
Date d'inscription: 29 Nov 2016
Messages: 10

Re: QGIS: Atlas ?

Merci Mathieu,
Ta conbine est la bonne
J'y suis presque, il y a un hic, l'atlas génére 499 cartes. Voir copie_ecran2 en PJ.
La table en sortie que j'utilise pour faire l'atlas, compte 4840 enregistrements (nb espece x mailles >0). Voir copie_ecran en PJ.
Du coup, en générant l'atlas , il me fait X cartes par espece (autant de cartes que le nombre de mailles >0 par espece).
Est-ce que tu aurais une dernière astuce pour résoudre ce problème?
Merci

Dernière modification par BerengerREMY (Sat 10 December 2016 11:47)


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

Hors ligne

 

#7 Sat 10 December 2016 17:13

Lsam
Participant assidu
Date d'inscription: 27 Nov 2013
Messages: 157

Re: QGIS: Atlas ?

Bonjour,

Vu que je voulais faire exactement la même chose que toi et que grâce à ce forum j'ai réussi, à moi de t'aider ! ;-)

Quelle couche couverture utilises-tu pour ton atlas ? De mon côté j'ai généré un simple fichier CSV avec une colonne "espece" qui liste les espèces sans doublon. Tu peux la créer dans le gestionnaire de base de données avec la requête suivante : select distinct espece from grille_sp order by 1. Tu l'ajoutes au canvas et tu l'enregistres.

Je la déclare enfin en couche de couverture, et hop ça roule.

Bonne chance, et n'hésite pas si tu as d'autres soucis (as-tu pensé à la légende aussi ?)

Hors ligne

 

#8 Mon 12 December 2016 10:34

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

Re: QGIS: Atlas ?

Lsam a écrit:

Vu que je voulais faire exactement la même chose que toi et que grâce à ce forum j'ai réussi, à moi de t'aider ! ;-)


Merci Lsam !


Mathieu BOSSAERT
Association GeoRezo

Hors ligne

 

#9 Mon 12 December 2016 23:23

BerengerREMY
Participant occasionnel
Lieu: Sumène (30)
Date d'inscription: 29 Nov 2016
Messages: 10

Re: QGIS: Atlas ?

Lsam a écrit:

Bonjour,

Vu que je voulais faire exactement la même chose que toi et que grâce à ce forum j'ai réussi, à moi de t'aider ! ;-)

Quelle couche couverture utilises-tu pour ton atlas ? De mon côté j'ai généré un simple fichier CSV avec une colonne "espece" qui liste les espèces sans doublon. Tu peux la créer dans le gestionnaire de base de données avec la requête suivante : select distinct espece from grille_sp order by 1. Tu l'ajoutes au canvas et tu l'enregistres.

Je la déclare enfin en couche de couverture, et hop ça roule.

Bonne chance, et n'hésite pas si tu as d'autres soucis (as-tu pensé à la légende aussi ?)


Merci Lsam, heureux de constateer la vitalité de ce forum!

J'utilise "grille_sp" comme couche de couverture (vf copie d'écran1 de mon message précédent)
Et je comprends pas comment tu as fait toi?

Oui, j'ai pensé à la légende.

Hors ligne

 

#10 Tue 13 December 2016 00:35

Lsam
Participant assidu
Date d'inscription: 27 Nov 2013
Messages: 157

Re: QGIS: Atlas ?

"grille_sp" ne doit pas être ta couche de couverture. Relis mon message, il faut que tu crées une autre couche que celle de ta couche de carrés, sans information de géométrie, simplement une couche texte listant tes espèces (avec comme nom de champ "espece"). C'est elle qu'il faudra mettre en couverture.

Dernière modification par Lsam (Tue 13 December 2016 00:36)

Hors ligne

 

#11 Tue 13 December 2016 12:50

BerengerREMY
Participant occasionnel
Lieu: Sumène (30)
Date d'inscription: 29 Nov 2016
Messages: 10

Re: QGIS: Atlas ?

Bingo!
MERCI

Au lieu d'utiliser le gestionnaire de base de données, je suis resté dans QSpatialite, mais ça donne le même résultat

Hors ligne

 

#12 Fri 10 March 2017 16:47

Jeanne30
Participant occasionnel
Date d'inscription: 10 Mar 2017
Messages: 10

Re: QGIS: Atlas ?

Bonjour,

Je suis en charge de l'application du code demandé par Bérenger Remy et de la génération de l'atlas cité ici.
Je rencontre un problème avec le code trouvé pour générer les cartes :

SELECT espece, max(CODE), code10km, grille.geometry
FROM grille, obs
WHERE st_intersects(grille.geometry, obs.geometry)
GROUP BY espece,  code10km

En effet ce code fonctionne très bien lorsque les noms de mes colonnes et de mes tables attributaires sont les mêmes que dans le code, seulement lorsque que j'essaye de changer les appellations ou de rajouter des champs dans "FROM", car j'ai en réalité 29 tableurs de données à traiter, des messages d'erreur apparaissent.

Idéalement, je souhaiterais que mon code puisse ressembler à ça :

Code:

SELECT ESPECE, max(CODE), Code10km, grille.geometry
FROM grille, obs, obs1, obs2, obs3....., obs29
WHERE st_intersects(grille.geometry, obs.geometry, obs1.geometry,...., obs29.geometry)
GROUP BY espece, code10km

Il y a sûrement une erreur d'écriture, mais je ne parviens pas à la trouver !

Jeanne.

Hors ligne

 

#13 Fri 10 March 2017 17:41

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3940

Re: QGIS: Atlas ?

Bonjour,

st_intersects(grille.geometry, obs.geometry, obs1.geometry,...., obs29.geometry)


st_intersects opère entre deux couches donc il ne faut lui en passer que deux.
Il faudra surement faire plusieurs requêtes du genre de celui qui marche reliées entre elles par UNION

Hors ligne

 

#14 Sun 12 March 2017 20:00

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

Re: QGIS: Atlas ?

Bonsoir Jeanne,

une solution pourrait consister à faire des UNION (29 en tout) :

Code:

SELECT ESPECE, max(CODE), Code10km, grille.geometry
FROM grille, obs
WHERE st_intersects(grille.geometry, obs.geometry)
GROUP BY espece, code10km
UNION
SELECT ESPECE, max(CODE), Code10km, grille.geometry
FROM grille, obs1
WHERE st_intersects(grille.geometry, obs1.geometry)
GROUP BY espece, code10km
UNION
SELECT ESPECE, max(CODE), Code10km, grille.geometry
FROM grille, obs2
WHERE st_intersects(grille.geometry, obs2.geometry)
GROUP BY espece, code10km
UNION...

Mathieu BOSSAERT
Association GeoRezo

Hors ligne

 

#15 Wed 15 March 2017 09:15

Jeanne30
Participant occasionnel
Date d'inscription: 10 Mar 2017
Messages: 10

Re: QGIS: Atlas ?

Bonjour,

Merci beaucoup Mathieu et Santanna pour cette solution qui fonctionne très bien !
Je rencontre maintenant un autre problème, celui de l'application de l'ensemble de règles pour appliquer des couleurs différentes à ma couche grille_sp générée avec QSpatialite:

"ESPECE"  = attribute(@atlas_feature ,'ESPECE') AND "max(CODE)" = 1
"ESPECE"  = attribute(@atlas_feature ,'ESPECE') AND "max(CODE)" = 2
"ESPECE"  = attribute(@atlas_feature ,'ESPECE') AND "max(CODE)" = 3

Les mailles ne se colorient pas du tout, même quand je passe à l'étape du composeur, pourtant la table attributaire de la couche en question est correcte.

Merci de votre aide,

Jeanne

Hors ligne

 

#16 Wed 15 March 2017 12:16

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

Re: QGIS: Atlas ?

Bonjour Jeanne,

la symbologie est appliquée à l'objet courant de l'atlas. Ce qui suppose que tu génères l'atlas.

Je pense que là tu visualises le composeur, pas un aperçu de l'atlas.

Il est accessible avec l'icône entourée en pièce jointe.


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

Mathieu BOSSAERT
Association GeoRezo

Hors ligne

 

#17 Wed 15 March 2017 13:49

Jeanne30
Participant occasionnel
Date d'inscription: 10 Mar 2017
Messages: 10

Re: QGIS: Atlas ?

Bonjour,

J'avais déjà testé l'aperçu de l'atlas et mes mailles restent vides malheureusement !

Jeanne

Hors ligne

 

#18 Wed 15 March 2017 14:06

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

Re: QGIS: Atlas ?

C'est donc que la règle de symbologie ne s'applique pas.
Je pense qu'il faut renommer le champ max dans la requête SQL. Là dans ta table de donnée tu dois avoir une colonne qui s'appelle max et non CODE... Je me trompe ?

Code:

SELECT ESPECE, max(CODE) AS CODE, Code10km, grille.geometry
FROM grille, obs
WHERE st_intersects(grille.geometry, obs.geometry)
GROUP BY espece, code10km
UNION
SELECT ESPECE, max(CODE) AS CODE, Code10km, grille.geometry
FROM grille, obs1
WHERE st_intersects(grille.geometry, obs1.geometry)
GROUP BY espece, code10km
UNION
SELECT ESPECE, max(CODE) AS CODE, Code10km, grille.geometry
FROM grille, obs2
WHERE st_intersects(grille.geometry, obs2.geometry)
GROUP BY espece, code10km
UNION...

Mathieu BOSSAERT
Association GeoRezo

Hors ligne

 

#19 Wed 15 March 2017 14:28

Jeanne30
Participant occasionnel
Date d'inscription: 10 Mar 2017
Messages: 10

Re: QGIS: Atlas ?

Dans la base de données générée par Qspatialite, la colonne s'appelle "max(CODE)" et dans mes tableurs originels juste "CODE"

Hors ligne

 

#20 Wed 15 March 2017 16:09

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

Re: QGIS: Atlas ?

OK il faut donc renommer les champs dans la requête (cf code ce-dessus).

Dans la requête SQL nous avons demandé à spaptialite de calculer la valeur max de ta colonne code, sans préciser de nom particulier pour cette colonne. Par défaut la base de données l'a appelé max(CODE). Pour la renommer il aurait fallu le dire à la base de données avec la syntaxe en gras ci-dessous :

SELECT ESPECE, max(CODE) AS CODE, Code10km, grille.geometry
FROM grille, obs2
...


Mathieu BOSSAERT
Association GeoRezo

Hors ligne

 

#21 Thu 16 March 2017 14:28

Jeanne30
Participant occasionnel
Date d'inscription: 10 Mar 2017
Messages: 10

Re: QGIS: Atlas ?

Merci à tous, mon problème est résolu !

Hors ligne

 

Pied de page des forums

Powered by FluxBB