17
Document sous licence CC-BY-SA 1 Laurent Jégou 07/12/2012 M2 Sigma M2 Sigma – U50_B33 WebMapping Séance 4 Les systèmes de gestion de bases de données spatiales : L'exemple de PostGIS Webographie spécifique : Tutoriel FOSS4G 2011 (en français) : http://www.postgis.fr/chrome/site/docs/workshop-foss4g/doc/index.html Guide utilisateur de D. Techer (en français, mais pour la version 1.3 de 2007) : http://www.davidgis.fr/documentation/win32/html/index.html 1- Le principe du stockage d’objets spatiaux et des fonctions d’interrogation et de traitement et de génération d’objets. a- La norme Simple Features for SQL (Norme OpenGIS de l’OGC). Il s'agit de la norme de base, elle définit le format numérique de stockage pour des objets géographiques, munis ou non d’attributs. Il s’agit de géométries 2D simples, avec interpolation linéaire entre vertex (pas d'arcs, pas de topologie,pas de 3D). (Schéma tiré de la norme OpenGeo / OGC SF-SQL, 05-134) La norme définit en outre des fonctions de conversion de formats et opérations spatiales sur ces géométries (calculs de distances / surfaces, relations spatiales, arithmétique entre géométries, etc.). Elle a été complétée depius par d'autres normes pour des objets plus

Laurent Jégou 07/12/2012 M2 Sigma Séance 4 Les systèmes de

  • Upload
    doanque

  • View
    214

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Laurent Jégou 07/12/2012 M2 Sigma Séance 4 Les systèmes de

Document sous licence CC-BY-SA 1

Laurent Jégou 07/12/2012 M2 Sigma

M2 Sigma – U50_B33 WebMapping Séance 4

Les systèmes de gestion de bases de données spatiales : L'exemple de PostGIS

Webographie spécifique : Tutoriel FOSS4G 2011 (en français) :

http://www.postgis.fr/chrome/site/docs/workshop-foss4g/doc/index.html Guide utilisateur de D. Techer (en français, mais pour la version 1.3 de 2007) : http://www.davidgis.fr/documentation/win32/html/index.html

1- Le principe du stockage d’objets spatiaux et des fonctions d’interrogation

et de traitement et de génération d’objets.

a- La norme Simple Features for SQL (Norme OpenGIS de l ’OGC). Il s'agit de la norme de base, elle définit le format numérique de stockage pour des objets géographiques, munis ou non d’attributs. Il s’agit de géométries 2D simples, avec interpolation linéaire entre vertex (pas d'arcs, pas de topologie,pas de 3D).

(Schéma tiré de la norme OpenGeo / OGC SF-SQL, 05-134) La norme définit en outre des fonctions de conversion de formats et opérations spatiales sur ces géométries (calculs de distances / surfaces, relations spatiales, arithmétique entre géométries, etc.). Elle a été complétée depius par d'autres normes pour des objets plus

Page 2: Laurent Jégou 07/12/2012 M2 Sigma Séance 4 Les systèmes de

Document sous licence CC-BY-SA 2

complexes (arcs, topologie, 3D, projection prise en compte dans les calculs, etc.).

b- Les principales implémentations

- PostGIS (extension intégrée de PostGreSQL) - SpatiaLite (extension de SQLite) - MyGIS (extension intégrée de MySQL depuis la v.4.1) - Oracle Spatial - Microsoft SQL Server (depuis la v.2008)

Aujourd'hui certains de ces logiciels progressent vers des possibilités SIG plus avancées comme le support de types de données géographiques possédant une topologie complète, de rasters, la gestion de la temporalité (suivi de l'évolution dans le temps des objets par versionnement). 2- PostGIS, principes et utilisation

a- Présentation Un moteur de BD orienté entreprise et réseau (sécurité, optimisation, réactivité) PostgreSQL est un SGBDR basé sur le logiciel POSTGRES développé à l'université de Californie au département des sciences informatiques de Berkeley à partir de 1986. POSTGRES était un logiciel expérimental dans le domaine des BDD, et il a servi de plateforme de test pour de nombreuses technologies modernes :

• requêtes complexes ; • clés étrangères ; • déclencheurs (triggers) ; • vues ; • intégrité des transactions ; • contrôle des accès concurrents (multi-utilisateur en temps réel, MVCC ou

multiversion concurrency control). Aujourd’hui PostgreSQL qui est son successeur open source se vante d’être le SGBDR le plus avancé au monde, car il possède des fonctionnalités très puissantes et le moyen de les étendre facilement par la programmation (macros en perl, java et python). PostGIS est pour une bonne partie codé dans un de ces langages de macro, PlpgSQL. Organisation d’une BDD PostGIS (particularités de PostgreSQL et tables PostGIS)

Une installation de PostgreSQL (un cluster) contient une ou plusieurs bases de

données, totalement indépendantes. Chaque base de données peut ensuite contenir un ou plusieurs schémas, ou subdivisions logiques, ces derniers contenant les objets courants de base de données (tables, vues, fonctions, requêtes, etc.).

Page 3: Laurent Jégou 07/12/2012 M2 Sigma Séance 4 Les systèmes de

Document sous licence CC-BY-SA 3

• Cluster o Base de données

§ Schéma • Tables • Fonctions • Requêtes • Vues • …

Comme il s'agit d'une base client-serveur, les utilisateurs peuvent avoir des droits différents (rôles), sur chaque base de données et chaque table.

PostGIS ajoute à ce système ses types de données et ses (très nombreuses) fonctions, Cf. : http://postgis.org/docs/reference.html Il ajoute aussi deux tables (ou vues, selon la version) utilitaires : geometry_colums et spatial_ref_sys. La première sert à indiquer au logiciel quels sont les champs contenant des types géographiques dans chacune des tables. La seconde contient les paramètres des systèmes de projection supportés et sert en interne au logiciel : ce sont en fait les paramètres utilisés par la bibliothèque de fonctions PROJ.4 qui gère le système de projection. On peut y retrouver les principales projections utilisées sous leurs identifiants EPSG (Lambert93 = EPSG:2154). La dernière version de PostGIS, 2.0, sortie début 2012, a apporté des innovations importantes, comme la gestion des données rasters et la prise en compte plus poussée des relations topologiques.

b- Principe d’utilisation de PostGIS Le principe est donc de pouvoir :

- stocker des informations géographiques en tenant compte de leurs caractéristiques particulières (projection, position, dimensions),

- réaliser des opérations de type SIG comme des mesures de distance, d’intersection, - créer de nouvelles géométries en les décrivant dans un format reconnu, ou comme

résultat d’opérations sur des géométries existantes (arithmétiques), - retourner des informations géographiques (géométries et/ou attributaires) selon

un format précis, sur le réseau.

Page 4: Laurent Jégou 07/12/2012 M2 Sigma Séance 4 Les systèmes de

Document sous licence CC-BY-SA 4

c- Installation de PostgreSQL / PostGIS sous Windows XP Cf. Procédure détaillée en annexe, avec copies d’écrans.

• Télécharger le paquet d’installation sur http://www.enterprisedb.com/products/pgdownload.do

• Laisser les chemins d’installation par défaut (programme et data) • Choisir un mot de passe pour le superuser du cluster : postgres

(nous faisons une installation locale de test, naturellement en production il faudra choisir un mot de passe plus sur).

• Laisser le port par défaut (5432) • Choisir le « locale » French/french • Laisser l’installeur lancer le « stack builder » à la fin de l’installation • Dans StackBuilder, choisir le cluster PG local • Dans le groupe « spatial extensions », choisir PostGIS • Choisir un serveur FTP où télécharger l’extension • Dans l’installation de PostGIS, laisser les choix par défaut (postgis et « create

spatial database ») • Fournir l’identifiant et le mot de passe du superuser postgres • Une base de données spatiale sera créée et nommée « postgis » par défaut • Le serveur PostGreSQL est installé, il s'agit d'un service windows à démarrage

automatique (lancé à chaque fois que windows démarre, à modifier en démarrage à la demande sur une machine qui n'est pas dédiée serveur).

• Lancer ensuite PGAdminIII dans le même menu démarrer pour vérifier la connexion.

Préparation de la base : • Créer un nouveau rôle d’utilisation (un nouvel utilisateur), ayant les droits sur

la base « PostGIS » du cluster, par exemple « sigma » et mot de passe « sigma ».

• Tester la connexion au serveur avec ce rôle.

Configuration de PostGIS sur le serveur

- ouvrir si besoin les connexions au réseau local dans le fichier pg_hba.conf : host all all 0.0.0.0/0 trust

- modifier la définition de la page de codes du client dans le fichier postgresql.conf client_encoding = latin1 (Sinon les caractères avec accents ne seront pas reconnus et bloqueront l'insertion de nouvelles données dans la base, qui est en codage UTF8 par défaut).

– recharger la configuration (dans le menu démarrer de Windows, PostgreSQL). L'installation de PostGIS seule peut se faire par-dessus une installation de PostGreSQL, en utilisant l'application "StackBuilder".

Page 5: Laurent Jégou 07/12/2012 M2 Sigma Séance 4 Les systèmes de

Document sous licence CC-BY-SA 5

d- Alimentation de la base de données Les jeux de données gratuites et libres d’utilisation sont à récupérer dans une archive compressée : Leur provenance originale est :

- Données GéoFla Départments IGN au format shape (Lambert93) o http://professionnels.ign.fr/sites/default/files/GEOFLA_1-

1_SHP_LAMB93_FR-ED111.tar.gz

- Données BD Carthage : Cours d’eau du bassin Adour-Garonne (Lambert93) o http://services.sandre.eaufrance.fr/data/zonage/Hydrographie2011/arcgis/

Bassins/AG/

- Données DREAL Midi-Pyrénées des stations de mesures hydrobiologiques (Lambert93)

o http://carmen.developpement-durable.gouv.fr/index.php?map=global.map&service_idx=23W

Conversion en commandes SQL et intégration des données : Dans PGAdminIII, choisir dans le menu « Plugin » : « Shape File to PostGIS Importer » Modifiez les paramètres proposés en écrivant le nom de la table en minuscules et en changeant le code système de projection par défaut (-1 pour « inconnu ») par celui des couches à importer : 2154 (code EPSG pour le Lambert 93).

è cette opération est à répéter à chaque importation de données, sinon elles ne seront pas correctement reconnues dans leur projection.

è Attention à placer les fichier shape à importer dans un répertoire dont le chemin ne présente pas un nom trop complexe : 8 lettres maximum et pas d'espace.

Autre possibilité : utiliser le programme en ligne de commande shp2pgsql (il se trouve dans le répertoire /bin de PostGreSQL). Exemple pour le GéoFla Départements (IGN) :

Page 6: Laurent Jégou 07/12/2012 M2 Sigma Séance 4 Les systèmes de

Document sous licence CC-BY-SA 6

Attention : pour les données BD Carthage, qui comportent des toponymes en minuscules avec accents, prenez bien soin de préciser (bouton « Options ») que l’encodage des caractères est de type « LATIN1 » dans le .dbf de la source (les fichiers DBF ne contiennent pas d'information sur leur encodage de texte).

L’importation par ce plugin va convertir les shapefiles en tables postgis, et créer les informations utiles dans la table geometry_columns ainsi qu’un index sur la colonne contenant les géométries. Un champ "gid" (identifiant géo) sera de même rajouté (sauf option contraire) aux tables, contenant des valeurs numériques uniques permettant de créer une clé primaire.

Les géométries des objets spatiaux sont stockées dans un champ de type "geometry", type qui a été ajouté au serveur par l'installation de PostGIS. Ces champs contiennent en fait une description de la géométrie dans un format binaire compressé, que l'on peut lire en utilisant la fonction ST_AsText(the_geom). PostGIS possède dans le même ordre d'idées des convertisseurs de format permettant de générer du KML ou du GeoJSON.

Page 7: Laurent Jégou 07/12/2012 M2 Sigma Séance 4 Les systèmes de

Document sous licence CC-BY-SA 7

e- Exercices pratiques de découverte progressive des fonctions L'utilisation des fonctions de PostGIS s'effectue au travers de requêtes SQL, comme on utiliserait les fonctions habituelles de PostGreSQL.

• Sélection attributaire simple Les départements de la région Midi-Pyrénées (code 73) :

SELECT * FROM departement WHERE code_reg = '73' Les noms des cours d’eau principaux du bassin Adour-Garonne : SELECT toponyme FROM courseau WHERE classe = '1' Lister les différents noms de cours d’eau comportant le nom « Garonne » : SELECT distinct(toponyme) FROM courseau WHERE toponyme like '%Garonne' Compter le nombre de tronçons de la Garonne :

SELECT count(gid) FROM courseau WHERE toponyme = 'La Garonne' • Calculs spatiaux simples Mesurer la Garonne (dans le jeu de données partiel téléchargé) :

SELECT sum(st_length(geom)) FROM courseau WHERE toponyme = 'La Garonne' La superficie du département du Tarn (code 81) :

SELECT st_area(geom) FROM departement WHERE code_dept = '81' Résultat : 5 781 488 782.5 m2 (donc 5 781 km2).

Le périmètre du polygone du Tarn :

SELECT st_perimeter(geom) FROM departement WHERE code_dept = '81'

Résultat : 459 569.4 m (la couche est en projection Lambert 93, donc les données sont dans l'unité du mètre, ce qui correspond à 460 km).

Page 8: Laurent Jégou 07/12/2012 M2 Sigma Séance 4 Les systèmes de

Document sous licence CC-BY-SA 8

• Sélections spatiales simples (sans relation entre plusieurs tables) Les départements limitrophes du Tarn (sous-requête) :

SELECT d.nom_dept FROM departement AS d, (SELECT geom FROM departement WHEREcode_dept = '81') AS tarn WHERE ST_Touches(d. geom, tarn. geom)

Les départements à moins de 200 km de la frontière du Tarn :

SELECT DISTINCT d.code_dept, d.nom_dept FROM departement AS d, ST_buffer((SELECT geom FROM departement WHERE code_dept = '81'), 200000) AS buffer WHERE ST_contains(buffer, d.geom)

Les cours d'eau du Tarn :

SELECT DISTINCT ce.toponyme, ce.classe FROM courseau AS ce, WHERE ST_intersects((SELECT geom FROM departement WHERE code_dept = '81'), ce.geom)

Le nom des points de mesure à proximité de la Garonne :

SELECT nm_station FROM st_hydrobio_mp, (SELECT st_buffer(geom, 200) AS geom FROM courseau WHERE toponyme = 'La Garonne') AS garonne WHERE st_contains(garonne.geom, st_hydrobio_mp.geom)

f- Test du logiciel QuantumGIS comme client PostGIS

– Créer une connexion au serveur PG (ip, port, login, nom base) – Charger les couches disponibles – Vérifier les projections – Tester la visualisation et la symbolisation – Tester la modification de couches, observer la répercussion sur le serveur – Tester la création de couches issues de requêtes de sélection.

g- Exercices

- Télécharger les données "Admin-0 Countries" version 1:110M du site : http://www.naturalearthdata.com/downloads/

- Télécharger les données "Populated Places" version 1/110M

Page 9: Laurent Jégou 07/12/2012 M2 Sigma Séance 4 Les systèmes de

Document sous licence CC-BY-SA 9

- Les intégrer au serveur PostGIS, dans leur projection

Répondre aux questions suivantes : - Quels sont les pays frontaliers du Bhoutan ? - Quelle est la distance, en km, entre Paris et Londres ?

h- PostGis 2.0 : travail avec des données raster Présentation des nouveautés : http://www.postgis.us/downloads/FOSS4G2011PostGIS20NewStuff.pdf Tutorial : http://trac.osgeo.org/postgis/wiki/WKTRasterTutorial01 PostGIS 2.0 est la version sortie au début de l'année 2012 qui a apporté une assez vaste série de nouveautés aux fonctionnalités du logiciel. La principale innovation est la capacité de gestion des données rasters, dans les mêmes conditions que les données vecteur (importation simplifiée, gestion des caractéristiques spatiales, fonctions d'interrogation spécifiques, croisement spatiaux). Aujourd'hui seule l'exportation au format raster reste délicate, mais il faut mentionner l'existance d'une extension de QuantumGIS qui permet d'afficher directement ce type de données PostGIS (et de les importer). Pour tester les possibilités de gestion desz données raster, on va intégrer deux types de données : un MNT et une image satellite. Les données MNT sont deux dalles du SRTM v4 disponibles à l'adresse web suivante : ftp://xftp.jrc.it/pub/srtmV4/tiff/ (Dalles N43E00 et N43E01) L'image satellite est une portion d'une image Landsat (composition colorée des trois canaux 7, 4 et 2) sur la région Toulousaine, téléchargée depuis : http://zulu.ssc.nasa.gov/mrsid/ (Image N-31-40-2000, au format MrSid, convertie en GeoTiff et en Lambert 93 avec GDAL, importée avec un tuilage de 512x512 px). Ces deux sources ont ensuite été converties au format PostGIS en utilisant l'utilitaire raster2pgsql, en ligne de commande, par exemple : C:\Program Files (x86)\PostgreSQL\9.2 \bin>raster2pgsql -s 2154 –C –I –t 512x512 tlsa_landsat.tif > tlse_landsat.sql Exemples de requêtes spatiales raster

• Coordonnées d'un pixel de l'image Landsat : SELECT St_AsText(St_Transform(St_PixelAsPolygon(rast, 100,100), 4326)) FROM tlse_landsat limit 1;

Page 10: Laurent Jégou 07/12/2012 M2 Sigma Séance 4 Les systèmes de

Document sous licence CC-BY-SA 10

• Valeur de rouge d'un pixel de l'image à une localisation précise : SELECT St_Value(rast, 1, St_Transform(ST_SetSRID(ST_Point(1.08, 43.8), 4326), 2154), true) FROM tlse_landsat limit 1;

• Calcul des statistiques par bande (RVB) de l'image Landsat : SELECT rid, band, (stats).* FROM (SELECT rid, band, ST_SummaryStats(rast, band) AS stats FROM tlse_landsat CROSS JOIN generate_series(1,3) AS band WHERE rid=2) AS foo;

• Calcul d'un histogramme de fréquence des valeurs de l'image Landsat : SELECT band, (stats).* FROM (SELECT rid, band, ST_Histogram(rast, band) AS stats FROM tlse_landsat CROSS JOIN generate_series(1,3) AS band WHERE rid=2) AS foo;

• Calcul des coordonnées des dalles de l'image Landsat correspondant au département du Tarn :

SELECT rid, ST_upperleftx(rast), ST_upperlefty(rast) FROM tlse_landsat,

(SELECT geom FROM departement WHERE code_dept = '81') AS tarn WHERE ST_Intersects(rast, tarn.geom)

• Altitude d'un point selon ses coordonnées spatiales : SELECT St_Value(rast, St_SetSrid(St_MakePoint(0.1, 43.2), 4326)) FROM srtm_n43e00;

• Altitude des 20 premières stations hydrobiologiques de Midi-Pyrénées : SELECT St_Value(rast, St_Transform(stations.geom, 4326)) FROM (SELECT geom FROM st_hydrobio_mp limit 20) AS stations , srtm_n43e01;

• Altitude des stations hydrobiologiques de la Haute-Garonne : SELECT stations31.nm_station,

St_Value(srtm_n43e00.rast, St_Transform(stations31.geom, 4326)) AS altitude1, St_Value(srtm_n43e01.rast, St_Transform(stations31.geom, 4326)) AS altitude2

FROM (SELECT st_hydrobio_mp.nm_station, st_hydrobio_mp.geom FROM st_hydrobio_mp, departement WHERE departement.code_dept = '31' AND St_Intersects(departement.geom, st_hydrobio_mp.geom)) AS stations31 , srtm_n43e00 , srtm_n43e01

Page 11: Laurent Jégou 07/12/2012 M2 Sigma Séance 4 Les systèmes de

Document sous licence CC-BY-SA 11

ANNEXE : Installation de PostGreSQL + PostGIS sous Win32.

• Télécharger le paquet d’installation sur http://www.enterprisedb.com/products/pgdownload.do

• Laisser les chemins d’installation par défaut (programme et data)

Page 12: Laurent Jégou 07/12/2012 M2 Sigma Séance 4 Les systèmes de

Document sous licence CC-BY-SA 12

• Choisir un mot de passe pour le superuser postgres du cluster : postgres (installation locale de test, naturellement en production il faudra choisir un mot de passe plus sur).

• Laisser le port par défaut (5432)

Page 13: Laurent Jégou 07/12/2012 M2 Sigma Séance 4 Les systèmes de

Document sous licence CC-BY-SA 13

• Choisir le « locale » French/french

• Laisser l’installeur lancer le « stack builder » à la fin de l’installation

Page 14: Laurent Jégou 07/12/2012 M2 Sigma Séance 4 Les systèmes de

Document sous licence CC-BY-SA 14

• Dans StackBuilder, choisir le cluster PG local

• Dans la catégorie « Spatial Extensions », choisir PostGIS

Page 15: Laurent Jégou 07/12/2012 M2 Sigma Séance 4 Les systèmes de

Document sous licence CC-BY-SA 15

• Choisir un serveur FTP où télécharger l’extension

• Dans l’installation de PostGIS, laisser les choix par défaut (postgis et « create spatial database »)

• Laisser le chemin d’installation par défaut (le chemin de PG).

Page 16: Laurent Jégou 07/12/2012 M2 Sigma Séance 4 Les systèmes de

Document sous licence CC-BY-SA 16

• Fournir l’identifiant et le mot de passe du superuser : postgres

• Une base de données spatiale sera créée et nommée « postgis » par défaut

Page 17: Laurent Jégou 07/12/2012 M2 Sigma Séance 4 Les systèmes de

Document sous licence CC-BY-SA 17

• Laisser l’installateur insérer la commande shp2pgsql dans PGAdminIII

• Lancer ensuite PGAdminIII dans le même menu démarrer pour vérifier la connexion.