#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: 992
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
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
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)
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
Re: QGIS: Atlas ?
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 ?
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: 3883
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
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
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.
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
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
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