
Vous avez saisie des données dans SICEN et vous aimeriez bien désormais les consulter simultanément avec d’autres données géogrpahiques, voir mieux les croiser avec d’autres données géographiques ?
Rien de plus simple !
Visualisation standard
Tout d’abord il faut établir une connexion à la base si_centre, si besoin pour cela, relisez l’article
Vous pouvez visualiser les données de SICEN dans le schéma saisie, utilisez la vue saisie.vu_obs_sicen_detail
Deux choses à savoir :
- choisissez un type d’objet géométrique à la fois (point, ligne ou polygone) et pensez à définir le champ identifiant "id_obs", de toute façon vous ne pourrez ajouter la table qu’après avoir défini ce paramètre, comme présenté dans la capture ci-dessous.
Par la fenêtre standard d’ouverture d’une table postgis, les filtres de requêtes seront inopérant car vous utilisez déjà une vue (qui est une requête enregistrée). Par contre, une fois ouverte, vous pourrez filtrer vos données comme n’importe quelle couche dans Qgis.
Inconvénient de la méthode, le chargement de la table peut être long selon la qualité de votre connexion internet.
Il y a deux solutions pour pallier à ce probléme :
- utiliser la fonction de rendu,
- utiliser DB manager
Utilisation de la fonction de rendu
C’est un peu la solution du feignant, mais la décrire ici pour ceux qui ne la connaisse pas peut aussi vous servir dans d’autre cadre, comme le chargement des parcelles de la BD parcellaire ou l’on n’a besoin que d’une commune et on se voit contraint de charger un département.
Tout ce passe par le biais de la case à cocher présente en permanence en bas à droite de la fenêtre de Qgis.
Par défaut cette case est cochée. Par conséquence, à chaque fois que vous vous déplacez sur la carte, zoomez, changer le style d’une couche ou ajouter une autre couche, l’affichage va s’actualiser.
A contrario, si vous décochez cette case, vous pouvez faire toutes les opérations précédemment cité, l’affichage ne bougera pas d’un pouce. OK, d’accord mais à quoi çà sert me direz-vous ? Et bien justement, dans le cas ou l’on charge une couche/table au chargement long mais pour laquelle seule une partie seulement nous intéresse, çà permet de gagner beaucoup de temps.
Ordre de la procédure :
- décocher la case de rendu,
- charger sa table spatiale des observations de SICEN (dans notre cas),
- une fois la table visible dans le contrôle des couches, on va aller déclarer un filtre sur les critères qui nous intéresse (bouton droit de la souris sur le nom de la couche puis filtrer),
- on valide, le filtre est effectif,
- on coche la case de rendu et là, au miracle, rafraîchissement de l’affichage avec uniquement les données désirées.
Néanmoins, le défaut de cette méthode dans notre cas présent, est que l’on ne peut faire que des filtres basiques sans pouvoir profiter de la puissance que nous offre postgis, à savoir les fonctions spatiales, d’où le recours à DB Manager.
Utilisation de DB manager
Cette extension standard de Qgis permet d’exploiter pleinement postgis, à condition de se plonger un minimum dans la syntaxe SQL.
Pour la rendre disponible, aller dans le menu extension, installer/gérer les extensions et activer là. Vous devriez voir apparaitre cette icone :
En cliquant sur le bouton, l’outil se lance. Il est indépendant de Qgis, vous pouvez donc mettre la fenêtre ou vous voulez.
Sur la gauche, trois listes déroulantes sont disponibles, nous allons nous intéresser uniquement à la liste PostGis
En la dépliant, vous verrez apparaître les différentes connexion postgis que vous avez créer et en dépliant encore la liste des schémas disponibles dans la base.
En dépliant, vous pouvez choisir la table qui nous intéresse ici et voir sur la droite toutes les informations intéressantes : commentaires, nombre d’éléments (lignes) dans la table, projection et la liste des champs de cette table.
A ce stade vous pouvez directement ajouter cette vue dans Qgis (bouton droit de la souris sur le nom de la table puis ajouter au canevas), mais ce n’est pas ici ce qui nous intéresse.
Utilisation avancée de DB manager
On va utiliser l’outil de création de requête (icone avec la clé anglaise dans la barre d’outil).
Voici plusieurs exemples pour vous servir de modèle.
- Sélection des points d’observation selon l’observateur. La requête est la suivante :
SELECT * FROM saisie.vu_obs_sicen_detail
WHERE observateurs ILIKE '%paillat%'
AND geometrytype(geometrie)='POINT'Explication :
- le nom de la table doit être écrit avec le nom du schema d’où saisie.vu_obs_sicen_detail
- le symbole * dans l’expression SELECT * veut dire tous les champs, vous avez la possibilité de limiter le nombre de champ en listant leurs noms en les séparant par des virgules, exemple "SELECT id_obs,date_obs, nom_vern,nom_complet FROM..."
- ILIKE ’%paillat%’ : la fonction ILIKE cherche ce qui ressemble (like) sans faire attention à la casse, donc que le patronyme soit écrit avec ou sans majuscule, on va le prendre. Les symboles % indique n’importe quel texte donc ici %paillat% signifie tout texte commençant par n’importe quoi puis comportant le mot paillat puis n’importe quoi,
- AND geometrytype(geometrie)=’POINT’ : on ajoute ici une condition pour récupérer uniquement un type de forme, sans quoi il ne sera pas possible d’ajouter le résultat de la requête dans Qgis. La forme peut être soit POINT, ou LINESTRING ou POLYGON.
- Maintenant que la requête est expliqué, comment on l’utilise, explication d’après cette capture :
- en 1 vous cliquer sur l’icone Fenêtre SQL,
- en 2 vous tapez ou coller ou charger depuis la liste déroulante des requête enregistré (oui, vous pouvez les enregistrer dans le projet donc vous n’avez pas besoin de retaper le code, vous devriez aussi l’enregistrer dans un fichier texte avec votre blocnote),
- en 3 vous exécuter la requête et visualiser le résultats (nombre de réponses et vue tabulaire du résultat),
- en 4 vous cocher la case charger en tant que nouvelle couche,
- en 5 vous définissez la colonne avec des valeurs uniques, ici id_obs et le champ de géométrie ici géométrie,
- en 6 vous définissez un nom de "couche" que vous verrez dans le contrôle des couches de Qgis,
- en 7 vous chargez le résultat de votre sélection dans Qgis.
- Sélection des points d’observations selon l’observateur et la présence sur un ensemble de site du Cen. Voici la requête :
SELECT vu_obs_sicen_detail.*, sites.codsit
FROM saisie.vu_obs_SICEN_detail, spatial.sites
WHERE observateurs ILIKE '%paillat%'
AND geometrytype(geometrie)='POINT'
AND sites.codsit LIKE '37003%'
AND ST_intersects(vu_obs_sicen_detail.geometrie, sites.geom)Explication partielle (cf exemple précédent pour le reste de l’explication) :
- dans le FROM on ajoute la table spatiale des sites pour pouvoir faire une requête spatiale sur les sites,
- AND sites.codsit LIKE ’37003%’ : on veut uniquement les sites de l’ensemble ’Puys du Chinonais’ de code 37003[A-Z],
- AND ST_intersects(vu_obs_sicen_detail.geometrie, sites.geom) : on indique la requête spatiale avec la fonction ST_intersects (tout ce qui s’intersecte) entre les champs de géométrie de la table SICEN et de la table de sites.
- Calcul du nombre d’observation en 2016 dans le département de l’Indre. Il s’agit ici d’une requête spatiale mais avec un résultat numérique. On ne souhaite pas visualiser le résultat sur la carte. Voici la requête :
With obs2016 as
(
SELECT id_obs, geometrie
FROM saisie.saisie_observation
WHERE date_part('year', date_obs)=2016
OR date_part('year', date_fin_obs)=2016
)
SELECT count(id_obs)
FROM obs2016, spatial.departements
WHERE departements.code_dept='36'
AND ST_intersects(obs2016.geometrie, departements.geom)Explication
- on va utiliser ici une sous-requête qu’on écrit au préalable dans un bloc "WITH sous-req AS ( )",
- comme le résultat de la requête ne sera pas une couche, on utilise directement la table saisie_observation et non pas la vue vu_obs_sicen_detail
- la requete sur la date porte sur deux champs, date_obs et date_fin_obs, avec la fonction date_part qui permet d’extraire l’année,
- SELECT count(id_obs) : le but pour nous est de compter le nombre d’observation, avec la fonction count on va compter le nombre d’identifiant unique que contient le champ id_obs,,
- FROM obs2016, spatial.departements : comme on veut faire une requête spatiale, on met les deux tables, à noter ici qu’on met le nom de notre sous requête obs2016 et non pas la table entière saisie_observation,
- departements.code_dept=’36’ : le critère de sélection du département de l’Indre,
- ST_intersects(obs2016.geometrie, departements.geom) : on utilise une nouvelle fois la fonction ST_intersects qui renvoie tout ce qui se chevauche entre les observations et le polygone du département de l’indre.
Je vous laisse tester le résultat de ces différentes requêtes.Vous pourrez construire vos propres requête en vous inspirant de ces exemples ou en demandant l’aide de votre équipe informatique, car plein d’autres types d’interrogation sont encore possible !


