TP Bases de données spatiales

publicité
TP Bases de données spatiales
Julien Barde, Nicolas Moyroud
27 Juin 2008
1 Présentation générale du TP
1.1
Contexte et objectifs du TP
On veut représenter l'information géographique sur la position des pêches qui est contenue dans notre base
de données. Pour cela, on va activer dans notre base PostgreSQL la cartouche géographique PostGIS. On
l'utilisera pour stocker l'information géographique et ajouter dans la base une nouvelle table contenant une
couche vectorielle issue d'un chier shape. On utilisera ensuite les opérateurs spatiaux de PostGIS pour réaliser
une analyse spatiale entre diérentes couches. On achera ensuite les couches géographiques de la base avec
le logiciel libre QGIS, en y ajoutant un fond raster (chier tif) ainsi qu'une couche géographique provenant
d'un serveur WMS. Pour nir, on mettra en oeuvre le serveur cartographique MapServer pour publier les cartes
produites sur le web.
1.2
1.3
Principales étapes à réaliser
activer les fonctionnalités PostGIS dans la base,
ajouter et alimenter une colonne géographique dans la table Peche ,
insérer un chier shape dans une nouvelle table de la base,
créer des vues contenant le résultat de requêtes d'analyse spatiale,
visualiser les couches produites avec QuantumGIS,
acher une couche raster et une couche WMS dans QuantumGIS,
publier une carte sur le web avec MapServer.
Matériel et logiciels nécessaires
On dispose pour ce travail :
d'un PC sous Windows,
du SGBD PostgreSQL avec son module spatial PostGIS,
d'une interface d'administration de bases phpPgAdmin,
du logiciel libre QuantumGIS (version 0.10 'Io'),
d'un serveur web Apache/PHP local avec le serveur cartographique MapServer activé (MS4W).
1.4
1.5
Données fournies
les valeurs de latitude et longitude contenues dans la table Peche de la base de données PostgreSQL,
le chier shape qui contient les grands éco-systèmes marins : lme2006.shp,
le chier raster bluemarble.tif,
la couverture mondiale issue du serveur WMS de la NASA.
Liens utiles
documentation PostgreSQL/PostGIS en français : http://www.davidgis.fr/documentation/win32/html/index.html,
site ociel QuantumGIS : http://www.qgis.org,
site ociel MapServer : http://mapserver.gis.umn.edu,
site MS4W (MapServer pour Windows) : http://www.maptools.org/ms4w.
1
2 Ajout des informations géographiques dans la base
Vous allez activer la cartouche spatiale PostGIS puis ajouter des données géographiques dans la base.
Démarche
Activer le langage
PL/PgSQL dans la
base
Activer les
fonctionnalités spatiales
dans la base
Manipulation
Démarrez une console DOS (menu Démarrer, sélectionnez Exéet taper la commande cmd ). Tapez C:, puis allez dans
le
répertoire
Program Files\PostgreSQL\8.3\bin.
Pour
activer le langage PL/PgSQL dans la base, tapez la commande
createlang.exe -U postgres plpgsql isotopes. Un message peut s'acher en indiquant que le langage est déjà activé dans la base. Cela est dû au
fait que dans la conguration du serveur PostgreSQL l'activation du langage
PL/PgSQL est automatiquement réalisée à chaque création d'une base.
Toujours dans la console DOS en restant dans le même répertoire, exécutez les
deux commandes suivantes :
cuter
psql -U postgres -d isotopes
-f "C:\Program Files\PostgreSQL\8.3\share\contrib\lwpostgis.sql"
psql -U postgres -d isotopes
-f "C:\Program Files\PostgreSQL\8.3\share\contrib\spatial_ref_sys.sql"
Ajouter une colonne
géographique dans la
table Peche
La première commande ajoute dans la base toutes les fonctions spatiales et une
table geometry_columns qui contient les informations sur les colonnes géographiques de la base. La deuxième commande intègre une table spatial_ref_sys
qui contient les informations sur les systèmes de références spatiaux.
Se connecter avec PhpPgAdmin dans la base isotopes. Vérier que les deux
tables geometry_columns et spatial_ref_sys ont bien été ajoutées et visualiser
leur contenu.
Vous allez ajouter une colonne supplémentaire lieu_peche dans la table Peche
pour contenir l'information géographique sur les lieux des pêches. Cette colonne
utilisera le système de projection WGS 84 (code SRID=4326) et contiendra des
objets géographiques de type point sur 2 dimensions. Pour cela, exécutez la
requête SQL suivante :
SELECT AddGeometryColumn ( ' peche ' , ' lieu_peche ' , 4 3 2 6 , ' POINT '
Insérer l'information
géographique dans la
colonne lieu_peche
,2);
Visualisez la nouvelle structure de la table Peche ainsi que le contenu de la
table geometry_columns.
Remplissez la nouvelle colonne lieu_peche en utilisant les valeurs contenues
dans les colonnes longitude_peche et latitude_peche. Exécutez la requête SQL
suivante :
UPDATE peche SET lieu_peche = GeometryFromText (
' POINT ( ' | | longitude_peche | | ' ' | | latitude_peche | | ') '
,4326);
Visualisez le contenu de la colonne lieu_peche dans la table Peche. Remarquez que l'information géographique est achée sous forme de code binaire
(WKB). C'est le format de stockage dans PostGIS. Pour acher une forme
plus compréhensible (WKT), vous pouvez exécuter la requête suivante :
SELECT id_peche
,
AsText ( lieu_peche ) from peche ;
Pour acher uniquement la géométrie des objets contenus dans la colonne,
vous pouvez exécuter la requête suivante :
SELECT id_peche
,
GeometryType ( lieu_peche ) from peche ;
2
Importer un chier
shape pour ajouter une
couche vectorielle
Dans la console DOS, toujours depuis le même répertoire
C:\Program Files\PostgreSQL\8.3\bin, exécutez la commande :
shp2pgsql -s 4326 -c -D -i -I
"C:\2008-06-24_formation_IRD_SGBD\05-BD_spatiales\shapes\lme2006.shp"
lme2006 > lme2006.sql
Avec l'éditeur de texte NotePad++, visualisez le contenu du chier
lme2006.sql.
Pour insérer ces données dans la base, vous pouvez copier/coller le contenu du
chier dans phpPgAdmin OU exécuter la commande suivante dans la console
DOS :
psql -U postgres isotopes < lme2006.sql
Avec phpPgAdmin, visualisez la structure et le contenu de la nouvelle table
lme2006 en utilisant la fonction AsText.
3
3 Achage des données géographiques dans le SIG QuantumGIS
Grâce au SIG libre QuantumGIS, vous allez acher les données géographiques de la base. Vous réaliserez
des requêtes d'analyse spatiale grâce à PostGIS et vous visualiserez également les résultats dans QuantumGIS.
Démarche
Acher les lieux de
pêche et les grands
éco-systèmes marins
dans QuantumGIS
Consulter et gérer les
couches dans
QuantumGIS
Réaliser des requêtes
d'analyse spatiale avec
PostGIS
Manipulation
Lancez QuantumGIS (Démarrer>Programmes>QuantumGIS>QuantumGIS ).
Sélectionnez le menu Couche>Ajouter une couche PostGIS. Dans la nouvelle
fenêtre, entrez les paramètres suivants : Nom = BD peches, Hote = localhost,
Base de données = isotopes, Port = 5432, Nom d'utilisateur = postgres, Mot
de passe = postgres. Cochez sauvegarder le mot de passe, puis cliquez sur le
bouton OK. Cliquez sur le bouton Connecter. Les deux couches géographiques
contenues dans la base s'achent. Sélectionnez les deux couches lme2006 et
peche puis cliquez sur le bouton Ajouter.
Vériez que la couche peche se trouve au-dessus de la couche lme2006 dans la
fenêtre à gauche de QuantumGIS (la couche qui contient les points s'ache
alors par-dessus celle qui contient les polygones). Cliquez avec le bouton droit
sur la couche peche, puis sélectionnez Zoomer sur l'emprise de la couche. La
carte est alors positionnée sur la zone couverte par les points de cette couche.
Vous pouvez utiliser les outils déplacement et zoom pour naviguer sur la carte.
Cliquez sur la couche peche puis sur l'outil Identiez les données. Vous pouvez maintenant cliquer sur un des points de la couche peche pour acher ses
informations attributaires. En sélectionnant la couche lme2006, vous pouvez
également acher les informations attributaires de cette couche.
A l'aide de phpPgAdmin, écrivez une première requête qui retourne tous les
points de pêche contenus dans l'écosystème marin de gid=56. Vous utiliserez
l'opérateur spatial within (contenu dans) de PostGIS :
SELECT peche . ∗ FROM peche , lme2006
WHERE lme2006 . gid =56 AND within ( peche . lieu_peche , lme2006 . the_geom ) ;
Ecrivez une deuxième requête pour sélectionner tous les points de pêche situés
à moins de 10 degrés d'un point xe :
SELECT peche . ∗ FROM peche
WHERE distance ( peche . lieu_peche ,
GeometryFromText ( ' POINT (43.32 6.24) ' ,
Utiliser des vues pour
stocker les résultats des
requêtes d'analyse
spatiale
4326)) < 10;
Vous allez eectuer les mêmes requêtes que précédemment en stockant leur résultat de façon permanente dans des vues. Exécutez les deux requêtes suivantes
avec phpPgAdmin :
CREATE VIEW peche_zone_56 AS (
SELECT peche . ∗ FROM peche , lme2006
WHERE lme2006 . gid =56 AND within ( peche . lieu_peche , lme2006 . the_geom ) ) ;
CREATE VIEW peche_point_10 AS (
SELECT peche . ∗ FROM peche
WHERE distance ( peche . lieu_peche ,
GeometryFromText ( ' POINT (43.32 6.24) ' ,
4326)) < 10);
Dans le sous-menu Vues de phpPgAdmin, vous pouvez vérier que le contenu
des deux vues correspond bien aux résultats des requêtes précédentes. Le
contenu aché ici est dynamique : si vous ajoutez des enregistrements dans la
table peche, ils seront automatiquement pris en compte dans ces vues.
4
Achez le contenu des
vues dans QuantumGIS
Ajouter une couche
raster dans
QuantumGIS
Ajouter une couche
provenant d'un serveur
WMS dans
QuantumGIS
Utiliser QuantumGIS
pour importer des
chiers shape dans
PostGIS
Vous pouvez maintenant acher le contenu des deux vues précédentes dans
le SIG QuantumGIS. Pour cela, sélectionnez le menu Couche>Ajouter une
couche PostGIS, sélectionnez la BD peches, cliquez sur le bouton Connecter,
sélectionnez peche_point_10 et peche_zone_56, puis cliquez sur le bouton
Ajouter. Dans la fenêtre des couches de QuantumGIS, positionnez les deux
nouvelles couches en haut puis décochez la case de la couche peche pour la
masquer. Pour mettre en évidence les points d'une couche, vous pouvez changer
leur couleur avec un clic droit sur la couche et en sélectionnant Propriétés.
Vous allez ajouter une image de fond dans l'interface cartographique de QuantumGIS. Cette image provient d'un chier tif géolocalisé présent sur votre
disque. Sélectionnez le menu Couche>Ajouter une couche raster, puis sélectionnez le chier C:\2008-06-24_formation_IRD_SGBD\05-BD_spatiales\shapes\bluemarble.tif.
Dans la fenêtre des couches, faites glisser la couche bluemarble en dernière
position.
Masquez la couche bluemarble. Sélectionnez le menu Couche>Ajouter une
couche WMS. Cliquez sur le bouton Add default servers puis OK. Sélectionnez
NASA (JPL) puis cliquez sur le bouton Connexion. Sélectionnez la première
couche global_mosaic, puis cliquez sur le bouton Ajouter. Dans la fenêtre des
couches, faites glisser la couche NASA(JPL) en dernière position. Cette couche
distante peut provoquer un certain ralentissement pour l'achage de la carte
lorsque l'on utilise les outils déplacement ou zoom.
Dans QuantumGIS, il est possible d'activer une certain nombre de plugins, dont
un qui permet d'importer des chiers shape dans la base PostgreSQL. Sélectionnez le menu Plugins>Gestionnaire de plugin, cliquez sur SPIT, puis cliquez
sur le bouton OK. Le menu d'importation de chiers shape dans PostgreSQL
se trouve dans Plugins>Fractionner>Importer des shapes dans PostgreSQL.
5
4 Publication de cartes sur le web avec MapServer
A l'aide du serveur cartographique libre MapServer, vous allez publier sur le web une carte qui présente
les couches d'information géographique contenues dans la base. Comme fond d'image, vous utiliserez l'image
bluemarble.tif.
Démarche
Mettre en place les
chiers pour MapServer
Acher la carte dans le
navigateur Firefox
Ajouter la barre
d'échelle et la légende
des couches sur la page
Manipulation
Les chiers pour MapServer se trouvent dans le répertoire
C:\2008-06-24_formation_IRD_SGBD\05-BD_spatiales\mapserver.
Copier ce répertoire à l'intérieur du répertoire C:\ms4w\Apache\htdocs. Il
contient deux chiers peche.php et maple.map et un sous-répertoire tmp. Ouvrez le chier peche.php avec l'éditeur Notepad++. Il s'agit d'un programme
PHP qui utilise un objet MapScript pour charger le chier maple.map et
acher dans une page HTML une image générée par MapServer. Toutes les
images seront stockées dans le sous-répertoire tmp.
C'est le chier maple.map qui contient les paramètres de conguration de la
carte à générer. Ouvrez ce chier avec l'éditeur Notepad++ et analysez son
contenu. Les premières lignes contiennent la conguration globale de la carte
(nom, étendue géographique, taille de l'image générée, type d'image générée,
unités). Un bloc PROJECTION contient le système de projection de la carte.
Un bloc WEB contient les chemins vers les images (sur le système et par
rapport au chier maple). La structure du chier est ensuite constituée de
blocs LAYER ... END pour le chargement de chacune des couches. C'est la
dernière couche du chier qui sera chargée en dernier, et donc positionnée audessus des autres. La première couche chargée est le chier raster bluemarble.tif.
Les quatre couches suivantes sont des couches extraites de PostGIS. Un dernier
bloc SYMBOL sert à dénir un cercle qui est utilisé comme symbole pour
représenter les points.
Pour que les images puissent être générées, vous devez mettre les
droits en écriture pour tous les utilisateurs du système dans le
sous-répertoire tmp. Ouvrez le navigateur Firefox et tapez l'URL
http://localhost:8080/mapserver/peche.php. La carte doit s'acher dans
le navigateur. Dans le chier maple.map, commentez les lignes 66 et 86 puis
décommentez les lignes 67 et 87 (ajouter/enlever le #). Recharger la page dans
Firefox. Que constatez-vous ? Pourquoi ? Vous pouvez jouer avec le chier maple.map pour ajouter/enlever des couches.
Dans le chier peche.php, à la ligne 10, ajoutez le code suivant :
$image_legend = $map −>drawLegend ( ) ;
$image_bar = $map −>drawScaleBar ( ) ;
$image_legend = $image_legend −>saveWebImage ( ) ;
$image_bar = $image_bar −>saveWebImage ( ) ;
En-dessous de la balise img qui contient l'image de la carte, ajoutez le code
suivant :
<img
<img
src=" <? php echo $image_legend ; ? >" alt=" legend " />
src=" <? php echo $image_bar ; ?>" alt=" scalebar " />
Actualisez la page peche.php dans le navigateur Firefox.
6
Téléchargement