Avant-propos

Cette préface débute par divers cas de figure concernant PostGIS. Je ne permet de m'égarer dans les quelques lignes qui suivent rapidement avant de revenir à PostGIS au moment util. Vous comprendrez ma démarche en prenant trois exemples je l'espère assez parlant et convaincant pour introduire PostGIS.

MOTIVATION I - L'EXEMPLE CLASSIQUE DE LA CARTE

Quand on démarre une documentation, on dit souvent "Il vaut mieux fournir un exemple parlant que tout un blabla sans intérêt!!".

Figure 1. Accidents corporels ayant eut lieu le long de la Route Nationale 113 dans le Gard en 2006 avant le lundi 2006-09-11 (Source: Accidentologie dans le Gard, http://www.01mapserver.com/applis/dde30)

Accidents corporels ayant eut lieu le long de la Route Nationale 113 dans le Gard en 2006 avant le lundi 2006-09-11 (Source: Accidentologie dans le Gard, http://www.01mapserver.com/applis/dde30)

Sur l'image précédente, j'ai interrogé un serveur cartographique pour connaître l'ensemble des accidents qui ont eu lieu le long de la Nationale 113 dans le Gard(30). Mais on peut aussi demander au serveur PostgreSQL/PostGIS par exemple

"Donne-moi l'ensemble des villes que traverse la Nationale 113 dans le Gard pour lesquesl on dénombre des accidents ainsi que le nombre d'accidents pour les dites-villes"

En SQL avec PostgreSQL, je traduirais la demande formulée ci-dessus par la requête suivante

Exemple 1. Exemple de requête avec PostGIS

SELECT DISTINCT l.com_top AS communes,count(foo.date) AS "nombre d'accidents" 
   FROM limites_communales l,
         (SELECT a.date,a.the_geom FROM rezo_route b,base_accident1 a 
                  WHERE b.route='N113' AND a.the_geom && expand(b.the_geom,100)
                  AND distance(a.the_geom,b.the_geom)<100) AS foo
                  WHERE l.the_geom && foo.the_geom AND intersects(l.the_geom,foo.the_geom) GROUP BY l.com_top;

qui me renverra comme réponse

Exemple 2. Résultat de la requête

   communes   | nombre d'accidents
--------------+--------------------
 AIGUES-VIVES |                  1
 BELLEGARDE   |                  1
 BOUILLARGUES |                  2
 NIMES        |                 26

Mais ceci n'est qu'un exemple parmi tant d'autres de ce qu'est capable de faire PostGIS!!! Notons au passage que cette requête a été ici exécutée en moins de 100 millisecondes! C'est au travers de ce genre de requête que cette documentation essaiera de vous fournir les pistes nécessaires pour vous former à l'utilisation de PostGIS. Mais pour celà commençons par une remarque tout à fait sommaire beaucoup plus générale.

MOTIVATION II - EXPORTER UNE REQUETE EN UN FICHIER KML ET LE VISUALISER AVEC GOOGLE EARTH

Par rapport à l'exemple précédent,on peut aussi essayer par exemple d'aller plus loin. Au lieu d'utiliser MapServer, pourquoi ne pas utiliser GoogleEarth pour tenter de visualiser nos données? Alors pourquoi GoogleEarth? Comme tout le monde le sait, 2006 a été l'année de la grande banalisation de la carte sur le Web notamment grâce à un outil comme GoogleEarth. L'engouement du grand public pour cet outil gratuit d'utilisation a bien été ressentie de par le Web et nul ne peut le démentir. Qui dit GoogleEarth dit aussi le fameux fichier kml. Voyons rapidement que passer de PostGIS a kml - au sens de convertir des données de PostGIS vers le format kml - se fait sans souci.

Si on a un outil comme Gdal (version >= 1.4.0) d'installé sur sa machine, il est aussi possible d'utiliser ogr2ogr pour exporter nos données dans un fichier kml

Note

Le site de Gdal est http://www.gdal.org/ où vous trouvrez aussi bien les sources pour GNU/Linux que pour Windows.

Figure 2. Communes du Languedoc-Roussillon: exportation au format KML exploitable par Google Earth.

Communes du Languedoc-Roussillon: exportation au format KML exploitable par Google Earth.

L'exportation ici de PostGIS vers KML aura été rendu possible par la ligne de command suivante

Exemple 3. Conversion de PostGIS en KML: utilisation de ogr2ogr

/opt/gdal-1.4.0/bin/ogr2ogr -f KML /root/communes_lr.kml PG:'host=localhost port=5432 dbname=diren user=postgres' \
-sql "SELECT (dump).geom FROM (SELECT dump(transform(the_geom,4326)) FROM communes_lr) AS foo"

Ici nos données sont automatiquement reprojetées à la volée en utilisant la fonction Transform() dans le système WGS84[1] (. La fonction dump() permet quant à elle de fractionner un objet multiple en renvoyant les enregistrements contenant l'objet en question. Par exemple, dump() fractionnera un MULTIPOLYGON en un lot d'enregistrements ordonnés (au sens ligne de tableau ) de POLYGON contenus dans ce MUTIPOLYGON...

Note

Ici j'ai utilisé un outil comme ogr2ogr de GDAL mais il est également possible d'utiliser GeoServer (http://docs.codehaus.org/display/GEOS/Home) qui permet de faire des sorties en KML[2]

MOTIVATION III: PGROUTING POUR LE CALCUL D'ITINERAIRE SUR UN RESEAU

PgRouting - couplé à PostGIS - est un module pour .le calcul d'itinéraire. Développé en étroite collaboration par Camptocamp (Suisse/France) et Orkney (Japon), ce module s'est enrichi en début 2007. Si nous considérons par exemple la portion du réseau

Figure 3. Réseau routier et ses noeauds obtenu grâce à PgRouting sur la base GEOROUTE IGN

Réseau routier et ses noeauds obtenu grâce à PgRouting sur la base GEOROUTE IGN

avec des données rélles, on aurait par exemple

Figure 4. PgRouting sur la base GEOROUTE IGN - sens aller.

PgRouting sur la base GEOROUTE IGN - sens aller.

et pour l'autre itinéraire

Figure 5. PgRouting sur la base GEOROUTE IGN - sens retour.

PgRouting sur la base GEOROUTE IGN - sens retour.

Nous aurons l'occasion de voir ces fonctions plus en détail plus tard. Pour l'instant, trois exemples intéressants nous l'avons vu pour le moment du potentiel de PostGIS. Ne nous égarons pas pour le moment. Comme il s'agit ici d'introduire notre travail sur PostGIS, revenons donc à PostGIS de manière conventionnel en commençant par un bref historique.

UN BREF RAPPEL SUR POSTGIS

PostGIS est la cartouche spatial qui confère au SGDBRO [3] PostgreSQL le status de bases de données spatiales.Développé et maintenue par l'équipe de Refractions Research, son cadre d'utiliisation est celui fourni selon les spécificités GPL (http://www.gnu.org/copyleft/gpl.html). Son développement a commencé à l'été 2001. Les débuts de PostGIS étaient assez limités en terme d'offre

C'est au cours de l'automne 2003 que la version 1.0.0 Geos (projet aussi développé par Refractions) fut couplé à PostGIS. Geos offrit des fonctionnalités supplémentaires - étendre les opérateurs relationnelles spatiaux - à PostGIS telle que IsValid(), Intersection(), (...) Il était aussi possible à l'époque d'utiliser le projet Proj. Couplé à ces deux outils, PostGIS offre ainsi plus de 400 fonctionnalités spatiales.

Mais quand est-il actuellement sur PostGIS?

Beaucoup de projets en SIG utilisent PostgreSQL/PostGIS, comme base de données spatiales. Certains sont même venu à abandonner Oracle Spatial pour se tourner vers ce couple. Histoire de licence, coût exhorbitant,...chacun trouvera là ses propres arguments. Même certaines solutions SIG propriétaire proposent dans leur éventail un module ou une extension pour pouvoir se connecter à PostgreSQL/PostGIS: FME...Je citerais aussi à titre d'exemple l'Institut Géographique National - I.G.N - qui a aussi misé sur PostGIS par rapport à d'autre solutions. Dans les premières années de son utilisation PostGIS était utilisé sur GNU/Linux, FreeBSD. Actuellement, il est possible de les utiliser aussi su MAC OS X et Windows.

Pour ce dernier système d'exploitation, son utilisation de 2001 jusqu'au début de l'année 2004 requierait d'avoir cygwin d'installé! C'était la croix et la bannière déjà pour installer Cygwin.Depuis début 2004, des efforts des contributeurs ont été fait pour maintenir à jour une meilleure installation sous WIndows. Je me rappelle encore mes premières heures passées à tenter de les compiler tous les deux sous Windows :D.

Comme j'ai fait parti des premiers à avoir testé PostGIS pour sa compilation sous Windows, un jour je me suis dis. "Tiens ca serait bien de mettre tout ça au propre sur Internet pour les divers utilisateurs!..."

Ce qui est le but du document. Ici j'essaies au fur et à mesure de mes expériences d'enrichir ce document dont je fais la mise à jour fréquemment selon les sorties de nouvelles versions.C'est un travail qui me prend du temps et de la réflexion. Il n'est pas parfait mais j'essais au mieux de le rendre meilleur au fur et à mesure de mes avancées..

Bien qu'il existe aujourd'hui les installeurs sous Windows, je maintiens toujours les premiers chapitres de ce document pour des tests de compilation fréquents, mais aussi pour garder une trace de HOWTO comme on dit pour une nouvelle version. Mais comme on dit aussi "Rien ne vaut un travail bien fait que si on s'est donné la peine de le faire soi-même!"

Figure 6. Architecture PostgreSQL/PostGIS/Geos/Proj

Architecture PostgreSQL/PostGIS/Geos/Proj

Comme je commence maintenant à parler de compilation, notons déjà les points suivants

LES OUTILS QUE NOUS COMPILERONS/UTILISERONS

Les divers installations possibles concernent :

Figure 7. PostgreSQL/PostGIS font un carton dans le monde du logiciel libre!

PostgreSQL/PostGIS font un carton dans le monde du logiciel libre!

Ce document n'a pas la prétention d'êre un document de substitution par rapport aux documentations officielles de PostGIS, PostgreSQL, Geos et Proj. Bien au contraire, il s'agit d'un support de travail de deux contributeurs - principalement PostGIS - pour la commune francophone en SIG. Ce document est autant que possible mis à jour régulièrement.

Le document est divisé en plusieurs parties. Voici un bref descriptif des divers thèmes abordés.

PLAN DU DOCUMENT

PARTIE I - Installation sous Windows

PARTIE II - Installation sous GNU/Linux, Ubuntu Edgy Eft

PARTIE III - PostgreSQL - configuration et administration minimale

PARTIE IV - PostGIS

PARTIE V - Annexes

Important

REMARQUE IMPORTANTE POUR WINDOWS: Dans le cas où vous ne souhaiteriez pas compiler les outils par vous-même (= passer les deux premiers chapitres), deux solutions s'offrent à vous. SOLUTION I: disposer d'une distribution déjà compilée et installer PostgreSQL manuellement. Dans ce cas, merci de consulter au chapitre 3 la section "Se procurer une distribution déjà compilée" et de suivre la documentation à partir du chapitre 3. SOLUTION II: ne rien installer. Dans ce cas, rendez-vous à l'annexe "Foire Aux Questions" pour obtenir des installeurs déjà existants et suivez la documentation à partir du chapitre 4! CE DOCUMENT NE FOURNIT QU'UNE INSTALLATION MINIMALE SUR L'UTILISATION DE POSTGIS ET DE POSTGRESQL!

Avertissement

Droits sur ce document

Ce document est fourni à titre indicatif. En le lisant ou en essayant les commandes par vous-même, vous vous engagez à ne me porter aucune responsabilité éventuelle aussi bien d'odre matériel que software. L'auteur ne saurait être tenu responsable pour un désagrément que ce soit.

Il est libre de droit donc vous pouvez aussi bien l'utiliser:

  • pour un cadre purement pédagogique: un cours dispensé en Université ou pour une formation faite par un prestataire

  • pour une conférence, rédaction de mémoire ou de rapport etc..MERCI EN TOUT CAS DE CITER LES SOURCES LE CAS EVENTUEL!

Les images des données affichées dans ce document ont reçu l'approbation des instances compétentes pour leur affichage que je tiens à remercier ici: DIREN Languedoc-Roussillon, DRASS Languedoc-Roussillon, DIREN et DRASS de Bourgogne.

Notes de rédaction de ce document. Ce document a été rédigé en DocBook Version 4.2. La version imprimable au format pdf de ce document a été rédigée à partir du projet DBLaTEX http://dblatex.sourceforge.net maintenu par Benoit GUILLON. C'est la version 0.1.8 de DBLaTEX que j'ai utilisé.

BONNE LECTURE A TOUS!



[1] WGS84: système utilisé pour le GPS , avec l'identifiant du système de projecion valant 4326)

[2] GeoServer est un projet écrit en Java, supportant aussi bien le WFS Transactionnel que la WMS. GeoServer est certifié OGC pour le support WMS 1.1.1 et WFS-T 1.0. Pour simplifier, on dira que c'est un serveur de données pouvant se connecter à des bases de données comme PostgreSQL/PostGIS, des fichiers (Shapefile),...Il supporte beaucoup de sformat de sortie comme PNG, SVG, KML, PDF

[3] SGBDRO: Système de Gestion de Bases de Données Relationnelles Orienté Objet. Dans un SGBDR classique, les données sont stockées dans des structures de données à deux dimensions: les tables. L'aspect relationnel-objet permet d'étendre ce modèle relationnel: support des tableaux, héritage, fonctions. ..Je ne m'attarderais pas plus sur les grands termes.