Bases de données spatiales Licence 3 MIASHS – UE MIGE504V Bases de données spatiales Séance 3 : Travaux pratiques Emilie Lerigoleur Emilie.Lerigoleur@univ-tlse2.fr 2016/2017
Objectifs du TP Vous êtes compétent en gestion de bases de données spatiales Comment le valoriser dans le cadre d’un emploi ?
Exemple d’offre d’emploi Un vrai exemple : http://www.toulouse-metropole.fr/-/un-technicien-sig-h-f- MISSIONS Au sein du service Géomatique votre mission générale sera d'exploiter et de valoriser les bases de données référentielles et métiers du SIG de la collectivité. A ce titre, vous assurerez la mise à jour du Plan de Ville de Toulouse Métropole dans sa représentation des noms de voies, des bâtiments et des lieux ou équipements publics qui composent son territoire. Vous effectuerez les opérations de géocodage des fichiers d'adresses de la collectivité et vous réaliserez les analyses spatiales qui en découlent. Vous exploiterez la base de données des adresses pour l'envoi de courriers institutionnels dans une zone géographique déterminée. Vous serez aussi en charge du contrôle, de l'intégration et de l'exploitation des données métiers produites par les services pour leur utilisation transversale, pour la production des plans thématiques utiles aux opérations de communication ou d'aide à la décision et pour leur publication éventuelle sur le site OpenData de la Collectivité.
Objectifs du TP Mise en situation professionnelle Mission fictive : vous êtes géomaticien au service « Géomatique » de l’Agence de l’eau Adour Garonne
Cahier des charges Mission fictive Architecture logicielle Données sources à disposition
Cahier des charges Mission fictive Une étude vise actuellement à étudier finement les plans d’eau (lacs, étangs, …) de la région Occitanie Pyrénées Méditerranée. Le chargé de mission de l’agence de l’eau s’intéresse tout particulièrement aux plans d’eau situés dans les communes bordant le fleuve de la Garonne ou dans un périmètre de 10 km du centre de la commune de Toulouse. Mission = fournir au chargé de mission : Un fichier CSV indiquant la longueur totale du fleuve Garonne Un fichier KML des plans d’eau répondant aux critères ci-dessus Un fichier CSV des plans d’eau de plus de 20 hectares parmi ceux répondant aux critères ci-dessus Une carte interactive simple (mise en forme de « base ») permettant de visualiser la Garonne, les départements de la région Occitanie, les communes bordant la Garonne, la zone tampon autour de Toulouse et les plans d’eau qui intersectent ces deux dernières zones. Un fond de carte sera fourni en plus des fonds de carte standards.
Cahier des charges Mission fictive Architecture logicielle Serveur PostgreSQL/PostGIS : Créer une base de données et y importer les fichiers de données spatiales fournis pour ensuite effectuer les traitements et exports Créer en amont un utilisateur administrateur de la base de données QGIS Desktop Attention le chargé de mission ne possède pas de logiciel SIG (QGIS ou autre), inutile donc de lui fournir des couches de type shapefiles Vous utiliserez QGIS seulement pour : Importer les données spatiales dans la base de données Visualiser vos tables de données importées et générées Générer la carte interactive via qgis2web
Cahier des charges Mission fictive Architecture logicielle Données sources à disposition Nom Format Type Fournisseur DEPARTEMENT shp Vecteur MULTIPOLYGON IGN ADMINEXPRESS COMMUNE CHEF_LIEU Vecteur POINT garonne geojson Vecteur MULTILINESTRING SANDRE plan_eau_occitanie KML franceraster_1000k jpeg Raster image non tuilée IGN FRANCERASTER
Méthodologie à suivre Créer l’utilisateur administrateur de la BDD Créer la connexion en tant qu’admin Créer la BDD (en tant qu’admin) Activer l’extension PostGIS (en tant que superutilisateur) Créer un schéma spécifique pour les données « métier » Configurer le chemin de parcours des schémas (search_path) Explorer les données sources dans QGIS Importer les données vectorielles et raster Visualiser les tables PostGIS dans QGIS pour valider les imports Exécuter des requêtes SQL pour analyser les données et visualiser les résultats des tables générées dans QGIS pour valider Exporter les résultats selon les formats CSV et KML attendus Créer la carte interactive via qgis2web
1. Créer l’utilisateur administrateur de la BDD En tant que superutilisateur : CREATE ROLE admin_miashs LOGIN ENCRYPTED PASSWORD 'md59f1021e0f09d972e64a6af14407cb31a' CREATEDB CREATEROLE VALID UNTIL 'infinity'; Mot de passe : admin
2. Créer la connexion en tant qu’admin
3. Créer la BDD
4. Activer l’extension PostGIS pour cette BDD Attention il faut avoir les droits de superutilisateur
5. Créer un schéma spécifique pour les données « métier » CREATE SCHEMA tp AUTHORIZATION admin_miashs; GRANT ALL ON SCHEMA tp TO admin_miashs;
6. Configurer le chemin de parcours des schémas (search_path) ALTER DATABASE tp_miashs SET search_path = "$user", tp, public;
7. Explorer les données sources dans QGIS
8. Importer les données vectorielles et raster 8.1. Créer une nouvelle connexion dans QGIS en tant qu’admin à la BDD
8. Importer les données vectorielles et raster 8.2. Importer les couches vectorielles une à une via le gestionnaire de BD dans QGIS (ou via utilitaires shp2pgsql et ogr2ogr)
8. Importer les données vectorielles et raster Pour les données geojson :
8. Importer les données vectorielles et raster Pour le KML :
8. Importer les données vectorielles et raster Résultat : Vue geometry_columns dans pgAdmin
8. Importer les données vectorielles et raster 8.3. Importer le raster via l’utilitaire raster2pgsql (avec tuiles de 50x50) Résultat : Vue raster_columns dans pgAdmin
9. Visualiser les tables PostGIS dans QGIS pour valider les imports
10. Exécuter des requêtes SQL pour analyser les données Rappel Mission : Critères : plans d’eau situés dans : communes bordant le fleuve de la Garonne ou Zone tampon de 10 km autour du centre de la commune de Toulouse Mission = fournir au chargé de mission : Un fichier CSV indiquant la longueur totale du fleuve Garonne Un fichier KML des plans d’eau répondant aux critères ci-dessous Un fichier CSV des plans d’eau de plus de 20 hectares parmi ceux répondant aux critères ci-dessous Une carte interactive simple (mise en forme de « base ») permettant de visualiser la Garonne, les départements de la région Occitanie, les communes bordant la Garonne, la zone tampon autour de Toulouse et les plans d’eau qui intersectent ces deux dernières zones. Un fond de carte sera fourni en plus des fonds de carte standards.
10. Exécuter des requêtes SQL pour analyser les données 1) Longueur du fleuve Garonne en km Si la table garonne est en RGF93-Lambert93 (SRID 2154), alors l’unité est le m donc pour obtenir la longueur en km, il faut diviser par 1000 SELECT (sum(st_length(geom))/1000) AS longueur_garonne_km FROM tp.garonne; Si la table garonne est en WGS84 (SRID 4326 en degrés), il faut transformer le système de projection dans un système ayant comme unité le mètre, comme c’est le cas pour RGF93-Lambert93 (2154) (sum(st_length(st_transform(geom,2154)))/1000) AS longueur_garonne_km
10. Exécuter des requêtes SQL pour analyser les données 1) Longueur du fleuve Garonne en km Résultat = 717 km + Export en CSV
10. Exécuter des requêtes SQL pour analyser les données 2) Sélection des plans d’eau situés dans les communes bordant le la Garonne ou dans la zone tampon de 10 km autour de Toulouse Plusieurs requêtes sont nécessaires Plusieurs solutions possibles, en voici une : departement commune garonne chef_lieu Plan_eau_occitanie Requête A Requête B dpt_occitanie com_occitanie Requête C Requête D com_garonne Toulouse_buffer Requête E resultat_final
10. Exécuter des requêtes SQL pour analyser les données 2) Sélection des plans d’eau situés dans les communes bordant le la Garonne ou dans la zone tampon de 10 km autour de Toulouse Requête A : créer la vue dept_occitanie (départements région Occ.) CREATE OR REPLACE VIEW tp.dept_occitanie AS SELECT row_number() OVER () as gid, departement.id, departement.geom, departement.nom_dep, departement.insee_dep, departement.insee_reg FROM departement WHERE departement.insee_reg::text = '76'::text; ALTER TABLE tp.dept_occitanie OWNER TO admin_miashs; Utile pour créer un identifiant unique dans la vue, facilitant l’affichage de cette dernière dans QGIS
10. Exécuter des requêtes SQL pour analyser les données 2) Sélection des plans d’eau situés dans les communes bordant le la Garonne ou dans la zone tampon de 10 km autour de Toulouse Requête B : créer la vue com_occitanie (communes région Occitanie) CREATE OR REPLACE VIEW tp.com_occitanie AS SELECT row_number() OVER () AS gid, commune.id, commune.geom, commune.nom_com, commune.insee_dep, commune.insee_reg FROM commune WHERE commune.insee_reg::text = '76'::text; ALTER TABLE tp.com_occitanie OWNER TO admin_miashs;
10. Exécuter des requêtes SQL pour analyser les données 2) Sélection des plans d’eau situés dans les communes bordant le la Garonne ou dans la zone tampon de 10 km autour de Toulouse Requête C : créer la table commune_garonne (communes bordant la Garonne) CREATE TABLE tp.commune_garonne AS SELECT DISTINCT c.gid, c.id, c.nom_com, c.insee_dep, c.geom FROM tp.com_occitanie AS c, (SELECT geom FROM tp.garonne) AS g WHERE st_distance(c.geom, g.geom)<1; ALTER TABLE tp.commune_garonne OWNER TO admin_miashs; NB : Il vaut mieux créer une table plutôt qu’une vue car ça fige le contenu sans nécessité de recalculer à la volée (inutile ici)
10. Exécuter des requêtes SQL pour analyser les données 2) Sélection des plans d’eau situés dans les communes bordant le la Garonne ou dans la zone tampon de 10 km autour de Toulouse Requête D : créer la table toulouse_buffer (zone tampon 10 km) CREATE TABLE tp.toulouse_buffer AS SELECT st_buffer(geom,10000) AS geom FROM tp.chef_lieu WHERE nom_chf='Toulouse'; ALTER TABLE tp.toulouse_buffer ADD COLUMN id SERIAL UNIQUE, ADD CONSTRAINT toulouse_buffer_pkey PRIMARY KEY (id), ADD CONSTRAINT enforce_geotype_geom CHECK (geometrytype(geom) = 'POLYGON'::text), ADD CONSTRAINT enforce_srid CHECK (st_srid(geom) = 2154); CREATE INDEX toulouse_buffer_geom_idx ON tp.toulouse_buffer USING gist (geom);
10. Exécuter des requêtes SQL pour analyser les données 2) Sélection des plans d’eau situés dans les communes bordant le la Garonne ou dans la zone tampon de 10 km autour de Toulouse Requête E : requête finale (méthode avec st_intersects) CREATE TABLE tp.resultat_final_intersects AS SELECT DISTINCT p.id, p.geom, (st_area(p.geom)/10000) as aire_ha FROM tp.plan_eau_occitanie as p, tp.toulouse_buffer as t, tp.commune_garonne as c WHERE st_intersects(t.geom,p.geom) OR st_intersects(c.geom,p.geom); ALTER TABLE tp.resultat_final_intersects ADD CONSTRAINT resultat_final_intersects_pkey PRIMARY KEY (id), ADD CONSTRAINT enforce_geotype_geom CHECK (geometrytype(geom) = 'MULTIPOLYGON'::text), ADD CONSTRAINT enforce_srid CHECK (st_srid(geom) = 2154); CREATE INDEX resultat_final_intersects_geom_idx ON tp.resultat_final_intersects USING gist (geom); NB : Il faut utiliser st_intersects plutôt que st_contains dans ce cas sinon les plans d’eau qui chevauchent les limites ne sont pas sélectionnés
10. Exécuter des requêtes SQL pour analyser les données 2) Sélection des plans d’eau situés dans les communes bordant le la Garonne ou dans la zone tampon de 10 km autour de Toulouse Validation dans QGIS
10. Exécuter des requêtes SQL pour analyser les données 3) Sélection des plans d’eau dont l’aire est supérieure à 20 hectares parmi ceux présélectionnés SELECT id, aire_ha FROM resultat_final_intersects WHERE aire_ha > 20 ORDER BY aire_ha DESC; Résultat : 9 plans d’eau + export CSV
11. Exporter les résultats selon les formats CSV et KML attendus Exports CSV : OK Export KML de la couche des plans d’eau situés dans les communes bordant la Garonne ou dans un périmètre de 10 km autour de Toulouse Via l’invite de commande de Windows : Attention, l’utilitaire ogr2ogr renvoie un message d’erreur (format non reconnu, or dans la liste !) Via la suite OSGEO4W, l’utilitaire ogr2ogr de GDAL fonctionne ! (même paramètres que ci-dessus) Via QGIS
11. Exporter les résultats selon les formats CSV et KML attendus Exports CSV : OK Export KML de la couche des plans d’eau situés dans les communes bordant la Garonne ou dans un périmètre de 10 km autour de Toulouse Validation dans Google Earth
12. Créer la carte interactive via qgis2web NB : certaines tables ou vues de PostGIS n’apparaissant pas dans la carte interactive, il a fallu reprendre les données sources (cas de garonne.geojson) ou les données transformées dans un autre format (cas du KML de résultats)
12. Créer la carte interactive via qgis2web