comp rend re les mapfiles

Upload: rachid-lhissou

Post on 06-Jul-2015

404 views

Category:

Documents


0 download

TRANSCRIPT

Serveur Cartographique et SIG interactifs en ligneI. Bilbio/Webographie

Bibliographie: Scott Davis, GIS for Web Developpers, adding where to your applications , The Pragmatic bookshelf, 2007, ISBN : 0-9745140-9-8, 254 pages. Bill Kropla, Beginning MapServer: Open Source GIS Development , APRESS, aot 2005, ISBN: 1-59059-490-8, 448 pp Tyler Mitchell, Web Mapping Illustrated, Using Open Source GIS Toolkits , O'Reilly, juin 2005, ISBN: 0-596-00865-1, 367 pages

Webographie : Forums d'utilit gnrale : http://www.forumsig.org, http://www.portailsig.org , http://www.georezo.net Site collaboratif proposant des prsentations et tutoriels de WebMapping : http://www.geotribu.net

Normes Open Geospatial Consortium . Site officiel : http://www.opengeospatial.org Documentation illustre de Demis sur le WMS : http://www.demis.nl/home/pages/wms/docs/OpenGISWMS.htm

MapServer Site officiel : http://mapserver.gis.umn.edu/index.html (tlchargements, documentations). Tutorial officiel : http://biometry.gis.umn.edu/tutorial/ Actes de la confrence OpenSource GIS 2004 : http://www.omsug.ca/osgis2004/proceedings.html 2005 : http://ms.gis.umn.edu/community/conferences/MUM3 2006 : http://www.foss4g2006.org 2007 : http://www.foss4g2007.org/ 2008 : http://conference.osgeo.org/index.php/foss4g/2008 Ressources du TYDAC (prsentation du mapfile et outils) : http://umn.mapserver.ch Prsentation extensive de MapServer: http://ms.gis.umn.edu/new_users/index_html1

Wiki officiel : http://mapserver.gis.umn.edu/cgi-bin/wiki.pl FAQ Portail SIG : http://www.portailsig.org/faq/mapserver Recettes (trucs et astuces) : http://www.mobilegeographics.com/mapserver/ PostGIS Site officiel : http://www.postgis.org Site de rfrence francophone : http://www.postgis.fr Site de tutoriaux de J.D. Techer : http://techer.pascal.free.fr/postgis

II.

Le serveur web SIG, principes et solutions

Cette premire partie vise prsenter les rles d'un serveur SIG sur Internet, au travers d'un aperu des solutions logicielles commerciales et d'un examen plus approfondi de MapServer, la principale solution open source. On y commence la prsentation technique, pragmatique, du sujet.

1- Qu'est-ce qu'un serveur SIG ? a) Principe

2

Un serveur SIG est un serveur Internet dot de fonctionnalits SIG, c'est dire qu'il est capable de : grer des donnes gorfrences; excuter des requtes numriques, textuelles et spatiales; gnrer des documents cartographiques retourner ces documents l'ordinateur client qui les a demands. Ce serveur SIG prend gnralement la forme d'une couche logicielle installe sur la machine serveur, qui va intercepter les requtes de type SIG et complter les rponses du logiciel serveur par des lments cartographiques. Par serveur on entend la machine qui sert des donnes internet en rponse des requtes, mais aussi les logiciels qui effectuent concrtement cette opration sur la machine. b) Les fonctions Le serveur SIG va donc ajouter aux fonctions habituelles d'un serveur Internet des fonctions en relation avec la gestion et le traitement de donnes graphiques gorfrences. stockage et gestion des donnes SIG3

Cette fonction centrale du serveur se base le plus souvent sur un stockage des donnes SIG sous la forme de fichiers, qui sont lus et traits au moment des requtes. Plus intressant, le stockage peut se faire par une solution SGBD classique tendue de possibilits de stockages d'lments graphiques gorfrencs. Par exemple : PostgreSQL possde une extension nomme PostGIS Oracle possde une capacit OracleSpatial ArcGIS peut se baser sur une BDD Access, sur une GoDatabase... MySQL est tendu par MyGIS Beaucoup de solutions logicielles SGBD sont aujourd'hui compatibles entre elles par le biais de passerelles de conversion comme ODBC. L'ajout de donnes SIG un SGBD classique s'effectue le plus souvent par conversion des informations graphiques en format texte ou binaire, li un dictionnaire de donnes spcifique (topologique). Cette conversion s'effectue soit automatiquement en interne au logiciel (solutions

commerciales), soit par traduction des fichiers (PostGIS, MyGIS, FME...). traitement des requtes spatiales Le serveur SIG doit tre capable de rendre les services de base d'un vritable moteur SIG, au del du stockage des donnes, c'est dire la possibilit d'effectuer des requtes composante spatiale : inclusion / juxtaposition / croisement calculs de longueurs et superficies mesure de distances, zones tampons mise jour des donnes graphiques et attributaires assemblage et habillage graphique des couches d'information pour obtenir une carte formatage et diffusion Enfin le serveur SIG doit tre capable de retourner l'information sous une forme adapte l'interface Internet, c'est dire au site affich dans le navigateur de la machine cliente.4

Cela suppose en particulier la capacit de transformer les donnes graphiques et alphanumriques issues d'une requte dans le SGDB dans un format compatible avec les navigateurs : gif, jpeg ou png pour les bitmaps svg, swf (flash), pour les vecteurs (plugin ncessaire). 2- Les principaux serveurs SIG commerciaux. a) ESRI ArcWeb Services http://www.esri.com/software/arcwebservices/index.html C'est un serveur de donnes SIG et un pourvoyeur de services web orients SIG. Les donnes sont interrogeables en utilisant les protocoles XML (dont le standard soap) et WMS. Les donnes peuvent tre directement utilises comme sources dans ArcGIS (arcweb toolbar). Les donnes sont en fait stockes sur des serveurs ddis grs par ESRI, le poste de travail n'a besoin que de l'installation d'un logiciel client, pas de serveur, de solution de stockage, et de maintenance a prvoir. En consquence, la commercialisation est assez originale : il faut prendre un abonnement d'un an et acheter des packs de 100.000 requtes (1250$, hors discounts en volume). b) ESRI ArcIMS et ArcGIS Server http://www.esrifrance.fr/produit/arcims.asp ArcIMS C'est la solution intgre d'ESRI pour serveur SIG, accompagne d'outils de conception et d'aide la mise en place. Il permet, classiquement, l'intgration de donnes varies et leur interrogation (protocoles varis, GML, XML, WFS et WMS...), mais propose en plus de nombreuses fonctionnalits connexes : webservices de localisation, de gocodage, gestion de clients varis voir lgers comme les pda... La contrepartie de cette grande intgration est une relative lourdeur, l'installation, la gestion... et l'achat.

ArcGIS Server

5

Nouveau produit d'ESRI, depuis la version 9.2, qui propose une solution de stockage et de dveloppement d'applications, selon les deux technologies les plus courantes, .Net et J2EE (Java), de faon beaucoup plus accessible qu'ArcIMS. c) Mapinfo MapXtreme http://www.mapinfo.com/products/developer-tools/desktop%2c-mobile-%26-internetoffering MapExtreme est une plateforme de dveloppement qui offre des fonctions de webmapping : stockage et l'interrogation de donnes SIG par des clients Internet. L'interrogation s'effectue selon les protocoles courants (GML, WFS et WMS), sur des bases Access, Oracle, SQLServer ou tout SGBD compatible ODBC. L'dition Java apporte de nouvelles fonctionnalits en plus de la capacit multi-plateforme, notamment de reprsentation (lissages, auroles). MapXtreme est aussi disponible sous forme de composant .Net, le standard de dveloppement de Microsoft. Mais cela reste une plateforme de dveloppement d'applications, pas une application directement utilisable.

6

d) Autodesk Mapguide, Mapguide OpenSource http://www.autodesk.fr/adsk/servlet/index?siteID=458335&id=7499959 https://mapguide.osgeo.org/ Autodesk MapGuide est un moteur SIG client-serveur et une plate-forme de dveloppement, compatible PHP, .Netet Java. La version OpenSource est plus rcente, et place sous l'aile de la fondation OSGeo. Les fonctionnalits des deux versions sont quasi les mmes, la diffrence jouant sur le service, le support, la langue, et la disponibilit de passerellesd'importation plus nombreuses (SQL server notamment pour la version commerciale, mais en beta pour la version OS).Autodesk propose en outre une application commerciale, MapGuide Studio, pour composer plus facilement des applicationsde webmapping bases sur MapGuide. Son quivalent OS est Fusion, un projet assez rcent, qui a comme particularitintressante de foncitonner aussi avec MapServer.

e) Goconcept Internet Server http://www.geoconcept.com/-Le-developpement-web-une-.html Goconcept propose lui aussi des solutions varies de mise en rseau de SIG, autour de son moteur cartographique prvu pour travailler en client-serveur. Ces solutions se dclinent en packages plus ou moins fournis, intgrs, autour du composant GoConcept Internet Server (GCIS) qui fait la liaison GC / rseau. GCIS peut tre utilis seul ou accompagn de services prts lemploi. Ce composant permet de mettre en ligne des cartes et des analyses, mais aussi des interfaces ( clients ) toutes prtes, et le moyen den dvelopper de plus adaptes aux besoins (technologies ouvertes du web, html, js, xml, java, et kit de dveloppement). Plus rcemment, GoConcept a ajout son offre une solution radicalement oriente client-serveur : LBS Platform, qui reprend GCIS et lui ajoute des modules complmentaires, un gocodeur automatique, des clients ajax et applet java, ainsi qu'un kit de dveloppement java ct serveur.

3- Prsentation des solutions open source a) Panorama des solutions disponibles et de leurs fonctions, ct client et ct serveur.7

b) Prsentation de MapServer, moteur de webmapping OS le plus rpandu. MapServer est un programme, une application, qui permet de gnrer des cartes partir de donnes diverses et de fichiers de recettes, qui contiennent les paramtres dcrivant la faon dont les donnes doivent tre prsentes. Le plus souvent, MapServer est utilis sur un serveur Internet pour gnrer des images dans des pages web, et ainsi permettre l'affichage mais aussi la modification, d'images cartographiques sur un site Internet. On peut aussi utiliser MapServer sur son ordinateur pour gnrer des cartes, effectuer des analyses et croisements... MapServer existe sous deux formes concrtes principales : un excutable, utiliser la ligne de commande ou en programme CGI (c'est dire accd distance au travers d'un serveur http comme Apache), et une bibliothque de fonctions PHP, Perl, Ruby, Python, C# ou Java : MapScript. c) Organisation concrte d'un serveur SIG bas sur des composants OpenSource autour de MapServer8

-> schmas 3 et 4

Un site Internet classique (statique) l'utilisateur demande afficher une page dans son navigateur, en donnant son adresse URL. Le navigateur convertit cette demande en une requte HTTP.

9

Cette requte HTTP est convertie par le rseau Internet (DNS et noeuds) en un chemin vers un fichier HTML sur une machine serveur. Le serveur traite cette demande en rassemblant les lments de la page HTML (fichier html et images, feuilles de styles, scripts, etc., potentiellement utiles). Le serveur envoie au navigateur client les fichiers. Le navigateur traite les fichiers pour afficher la page. Un site Internet dynamique, avec php et MySQL L'Utilisateur demande afficher une page dans son navigateur, en donnant son adresse URL. Le navigateur convertit cette demande en une requte HTTP. Cette requte HTTP est convertie par le rseau Internet (DNS et noeuds) en un chemin de fichier PHP sur une machine serveur. Le serveur transfre la requte PHP. Php traite le fichier demand, c'est dire interprte le script en langage php, ce script peut : crire du texte, donc gnrer des balises HTML. lire et modifier des images. excuter des requtes sur un SGBD et en traiter les donnes des rsultats. Php convertit le rsultat de l'excution du fichier en un fichier HTML, qui est retourn au serveur. Le serveur traite ce fichier en rassemblant les lments de la page HTML (fichier html et images, feuilles de styles, scripts, etc., potentiellement utiles). Le serveur envoie au navigateur client les fichiers. Le navigateur traite les fichiers pour afficher la page. Un site Internet dynamique sur serveur SIG.

10

L'Utilisateur demande afficher une page dans son navigateur, en donnant son adresse URL. Le navigateur convertit cette demande en une requte HTTP. Cette requte HTTP est convertie par le rseau Internet (DNS et noeuds) en un chemin de fichier PHP sur une machine serveur. Le serveur transfre la requte PHP. Php traite le fichier demand, c'est dire interprte le script en langage php, ce script peut :

o crire du texte, donc gnrer des balises HTML. o lire et modifier des images. o excuter des requtes sur un SGBD et en traiter les donnes des rsultats. MapScript traite les aspects SIG de la requte en prparant un ou plusieurs documents (images), partir de : o donnes raster o donnes vecteur o donnes alphanumriques attributaires donnes stockes sur serveur SGBD avec extension spatiale. Ces donnes peuvent tre accessibles en local ou sur d'autres serveurs, distants. Les images gnres par MapServer sont ajoutes aux sources de la page rassembles par PHP. Php convertit le rsultat de l'excution du fichier en un fichier HTML, qui est retourn au serveur. Le serveur traite ce fichier en rassemblant les lments de la page HTML (fichier html et images, feuilles de styles, scripts, etc., potentiellement utiles). Le serveur envoie au navigateur client les fichiers. Le navigateur traite les fichiers pour afficher la page.

11

Cette organisation se complique le plus souvent dans les faits par une interface utilisateur, gnralement base sur un formulaire qui va aider crire la requte en direction de MapServer, avec notamment la gestion des clics de la souris sur un image pour demander un zoom, un dplacement, et l'affichage de case cocher, de listes de champs et de paramtres (cf. exemples en bibliographie). c) Intgration des fonds Shapefile ou conversion SGBD ? Pour tre prises en compte directement par MapServer, les donnes doivent tre stockes dans un SGBD (SDE, PostGIS, Oracle), ou tre au format shapefile. La lecture directe des shapefiles et le plus souvent plus rapide que celle des donnes dans une table PostGIS, pour les cartes simples, mais l'utilisation d'un SGBDR trouve son utilit dans la gestion multi-table, l'interrogation des donnes attributaires et la possibilit d'utiliser des fonctions de requte SIG plus puissantes. En outre, la rapidit globale de fonctionnement est amliore avec un SGBDR lorsque les donnes sont en grandes quantits. La bibliothque de fonctions (library en anglais) GDAL/OGR permet de convertir la vole des formats de donnes spatiales pour leur lecture par MapServer, mais les temps de traitement sont un peu plus longs. Intgration dans PostGIS La solution de stockage des donnes la plus souvent retenue dans les solutions MapServer est celle de PostGreSQL tendu par PostGIS. Ce SGBDR est en effet trs performant pour la gestion et l'interrogation des donnes, c'est par exemple beaucoup plus simple de mettre jour des informations quand elles sont dj structures en table. De plus, le systme est sous licence GPL. On peut donc l'utiliser de faon libre. L'alternative reste bien sur Oracle et son extension Oracle Spatial. PostGIS (http://www.postgis.org et http://www.postgis.fr) est une extension du SGBDR PostgreSQL qui permet la gestion d'objets SIG. Ces objets correspondent la dfinition des Simple features de l'OpenGIS Consortium (http://www.opengeospatial.org/specs/?page=specs). Des utilitaires de conversion sont disponibles pour faciliter la migration des donnes dans des tables PostGIS.

12

Intgration

par fichier SQL

:

http://postgis.refractions.net/documentation/manual-

1.3/ch04.html#id2568970 Les fichiers SQL sont des fichiers de format texte contenant des commandes SQL. On peut donc les utiliser pour crer des tables postGIS et les remplir de donnes SIG. Intgration avec le loader shape to pgsql : http://postgis.refractions.net/documentation/manual-1.3/ch04.html#id2569045 Le loader , ou chargeur, est un utilitaire compil qui permet de convertir un shapefile en un fichier SQL du type ci-dessus. Utilisation de la bibliothque OGR pour une conversion dynamique des fichiers Une autre possibilit pour utiliser des donnes SIG dans des formats natifs est de les faire convertir la vole par la bibliothque OGR (http://gdal.maptools.org/ogr/). Cette bibliothque (library) permet entre autres d'tablir une passerelle entre les formats de fichiers SIG les plus courants et MapServer (http://www.gdal.org/ogr/ogr_formats.html). Elle fait aujourd'hui partie de la suite de bilbiothques GDAL/OGR, et est directement utilisable par MapServer. Ces modifications faites, on peut fournir des fonds une couche dans un fichier map par : LAYER ... CONNECTIONTYPE OGR CONNECTION "data/mymapinfofile.TAB" ... END # end of layer La bibliothque GDAL (http://www.remotesensing.org/gdal/) permet, sur le mme principe, l'accs des sources de donnes SIG, raster essentiellement.

e) Installation et test de MapServer A l'origine MapServer est un projet OpenSource de l'Universit du Minnesota (http://mapserver.gis.umn.edu/), prsent comme un code source gnrant un excutable installer sur un serveur Unix ou compatible (linux). Une installation normale de MapServer suppose donc les tapes suivantes :13

tlchargement de la dernire version des fichiers source (en langage C) tlchargement des bibliothques complmentaires (proj, ogr, freetype, gd, pg, gdal ...) configuration, compilation, installation des bibliothques complmentaires, configuration des sources de MapServer (./config) compilation par makefile (make) installation (make install) Ces oprations ne sont pas simples effectuer sur une machine unix (linux), et peuvent prendre plusieurs jours de travail un dbutant. Pour simplifier (fortement) cette mise en place, le site MapTools.org propose MS4W MapServer for Windows un dossier compress permettant d'installer : o Apache version 2.2.3 o PHP version 5.2.0 (MS4W 2.x) or 4.4.4 (MS4W 1.x) o MapServer 4.10.0 CGI and MapScript (CSharp, Java, PHP, Python) o support GD 2.0.33, FreeType 2.1.10, GDAL/OGR 1.3.2, PROJ, WMS/WFS, Flash, PDF, ECW3.1, PostGIS, GEOS, libcurl 7.15.1 o mapserver utilities o gdal/ogr utilities o proj.4 utilities o shp2tile utility o shapelib utilities o shpdiff utility o PHP_OGR Extension 1.1.1 o WTChart 1.2.0 Cette ressource est disponible l'adresse : http://maptools.org/ms4w/ L'installation est joyeusement simple : il suffit de dcompresser le fichier la racine d'un disque dur, et de lancer un fichier batch pour installer le serveur apache comme service (c'est dire application lance automatiquement par l'OS). Le dmarrage du serveur peut se faire par l'utilitaire apache Monitor ou en lanant manuellement le service.14

Aprs l'installation, le pointage d'un navigateur sur l'adresse http://localhost aboutit sur la page d'accueil du serveur SIG nouvellement install. On dispose ainsi des principaux outils ncessaires au test et la mise en place d'un sig en ligne bas sur MapServer.

II.

Approfondissement de l'utilisation de MapServer

Aprs avoir install un serveur SIG MapServer sous Windows avec le paquet MS4Wde MapTools, nous allons explorer et en illustrer par des exemples les possibilits offertes par les mapfiles et le fonctionnement avec les templates (fichiers modles) HTML. Prambule : Les diverses manires d'utiliser MapServer. MapServer est l'origine une application la ligne de commande, qui a donn naissance plusieurs versions, offrant les mmes possibilits de cartographie mais dans des contextes diffrents. MapServer CGI : C'est le mapserver.exe de la version Windows, c'est dire une application brute. Cette version est une application CGI, c'est dire accessible distance dans une installation serveur web. CGI signifie Common Gateway Interface, c'est un protocole utilis par tous les serveurs et navigateurs pour permettre l'accs distant des applications (sous certaines conditions de scurit). Dans ce cas, on fournit les paramtres dans l'url, au minimum un mapfile et un mode par exemple : http://localhost/cgi-bin/mapserv.exe?map=../htdocs/raster/rastr1.map&mode=map

MapServer MapScript : C'est la version bibliothque de fonctions du logiciel. Elle est disponible pour les langages PHP, Python, Perl, Java. MapServer est alors disponible sous la forme de fonctions accessibles directement dans le langage de programmation. Par exemple, en PHP, on charge la bibliothque de fonctions (library), puis on peut ouvrir ou gnrer un mapfile, modifier des paramtres, faire des slections, et gnrer des cartes, etc. dans le script PHP. 1- Description illustre de la structure des mapfiles. Documentation officielle : http://mapserver.gis.umn.edu/docs/reference/mapfile15

Les paramtres obligatoires ou importants fournir dans un mapfile sont reprs par un soulignement. Les mapfiles sont des fichiers texte qui vont contenir tous les paramtres ncessaires MapServer pour la gnration d'un document cartographique, statique ou dynamique. Ils sont organiss en blocs (ou objets) hirarchiques, imbriqus, nots NOM_DU_BLOC ... END. Le bloc racine est le loc MAP.

Gnralits Les mapfiles ne sont pas sensibles la casse (minuscules / majuscules), sauf pour les noms des champs attributaires, nots entre [crochets], et naturellement les valeurs de type chane, notes entre guillemets ou apostrophes. Un mapfile contient au maximum 50 couches (layers) (mais on peut modifier cette valeur dans le code source et recompiler MapServer). Les chemins peuvent tre indiqus de manire absolue ( partir de la racine du systme), ou relativement l'emplacement du mapfile. Les chemins vers les donnes sont relatifs au paramtre SHAPEPATH (en labsence de ce dernier les donnes seront recherches dans le mme rpertoire que le mapfile).

Le bloc MAP : Ce bloc est la racine du mapfile, il va contenir les paramtres concernant la globalit de la carte gnrer.

Paramtres gnraux NAME : nom de la carte, prfixe ajout tous les fichiers image gnrs par le mapfile, donc garder de courte taille, et entre guillemets UNITS : Unit de la carte, utilis pour la les calculs et le dessin de la barre d'chelle. L'information sur l'unit du fond de carte n'est pas toujours apporte par le bloc projection , il faut donc essayer de la fournir explicitement chaque fois. Valeurs : [feet|inches|kilometers|meters|miles|dd] EXTENT : Extension de la carte, donc coordonnes des extrmits de la carte dessine dans l'image gnre par le mapfile.16

Valeurs : [xmin] [ymin] [xmax] [ymax]

STATUS : On ou Off, active ou dsactive la totalit du mapfile.

FONTSET et SYMBOLSET : chemin et nom des fichiers contenant les dfinitions de polices de caractre (utile sous linux) et de symboles (on peut aussi dfinir un symbole directement dans le mapfile, mais c'est utile de pouvoir les rassembler dans un seul fichier qui pourra tre appel par diffrents mapfiles). SHAPEPATH : Chemin vers le rpertoire contenant les fichiers de donnes (des couches), ou le chemin de base partir duquel les paramtres DATA iront les chercher. ANGLE : Angle de rotation de limage, en degrs. Utilis en mode MapScript, demande un bloc PROJECTION.

DEBUG : Active le dbogage sur fichier de log et en prcise le niveau. Une variable systme MS_ERRORFILE doit tre prsente et indiquer le chemin du fichier de log. Valeurs : [off|on|0|1|2|3|4|5]

Paramtres de gnration de l'image

IMAGETYPE : type de fichier image gnrer. Correspond l'ensemble inclut par dfaut de blocs OUTPUTFORMAT. Ce paramtre dpend des options avec lesquelles t compil MapServer. Valeurs : [gif|png|jpeg|wbmp|gtiff|swf|user_defined]

SIZE : Dimensions (largeur et hauteur) de l'image gnrer, en pixels, spares par un espace. RESOLUTION : Rsolution de l'image en dpi, par dfaut 72. N'affecte que les calculs d'chelle, cf. le bloc SCALEBAR.17

IMAGECOLOR : Couleur de fond de limage de la carte (RGB). Le bloc MAP va contenir, en plus des paramtres gnraux, les blocs de second niveau, qui vont permettre de spcifier le contenu de la carte. le bloc WEB Ce bloc va paramtrer le fonctionnement du serveur Web autour de la carte gnre par MapServer. IMAGEPATH : Chemin absolu vers le rpertoire temporaire o sera stock le fichier image gnr par le mapfile. Doit se terminer par un slash / , de prfrence utiliser des slashs, pas des anti-slashs \ (mme sous windows). IMAGEURL : Base de l'url (partie de l'adresse web sajoutant au nom du serveur dans l'url) pointant sur le rpertoire temporaire contenant les fichiers image gnrs. Correspond l'alias dfini dans la configuration du serveur Web.

EMPTY : Url vers laquelle l'utilisateur est redirig lorsqu'une requte MapServer ne retourne pas de rsultats. ERROR : Url vers laquelle l'utilisateur est redirig lorsque se produit une erreur.

LOG : Chemin et nom du fichier texte dans lequel sera inscrite l'activit de MapServer sur ce mapfile. Contient une trace des oprations effectues et des ventuelles erreurs survenus. Fonctionne en parallle avec le paramtre DEBUG et les paramtres LOG des blocs LAYER du mapfile.

MINSCALE : chelle minimale laquelle le mapfile sera dessin. Si une chelle plus petite est demande, MapServer dessinera la carte l'chelle prcise par ce paramtre.

18

MAXSCALE : Idem pour l'chelle maximale.

TEMPLATE : Chemin et nom du fichier modle HTML ventuel (cf. seconde partie du prsent support de cours, ddie ce sujet). HEADER : Modle HTML utiliser avant l'insertion de l'image de la carte.

FOOTER : Idem pour le bas de page. METADATA : Bloc secondaire utiliser pour stocker des paires nom valeur . Utilis par les modles HTML (pour stocker des variables gnralises) et en mode serveur WMS/WFS. Le bloc REFERENCE Ce bloc dfinit les paramtres de la petite carte utilise comme rfrence pour la carte principale. C'est une image sur laquelle va tre dessin un rectangle reprsentant l'extension de la carte principale, ou la localisation des rsultats d'une requte, en mode QUERY.

Paradoxalement, MapServer a besoin d'une image fixe reprsentant la petite carte de rfrence, il ne va pas la gnrer. Cela permet par contre l'utilisation d'une image externe. Il faut donc alors, pour produire cette image, utiliser un mapfile simplifi (uniquement les contours de la couche principale par exemple), rgl pour gnrer une image de petites dimensions. MapServer va faire la relation entre la carte principale et la petite carte de rfrence grce aux paramtres EXTENT des deux cartes.

Par dfaut le bloc REFERENCE a un paramtre STATUS la valeur Off, pour activer cette carte il faut donc penser rajouter STATUS ON dans le bloc. Le bloc LEGEND MapServer peut gnrer trois types de lgendes :19

lgendes simples sous forme d'images ; lgendes bases sur un modle de lgende HTML (template, voir ci-aprs) ; lgendes HTML pur. Les lgendes simples sont des images, inclues ou pas dans l'image de la carte principale, reprenant chaque classe nomme des layers du mapfile et son figur. Il faut donc penser nommer toutes les classes que l'on veut voir apparatre en lgende (paramtre NAME). Lorsque la lgende simple est incluse dans l'image de la carte (paramtre : STATUS EMBED), on peut prciser l'endroit o la lgende sera dessine avec le paramtre POSITION. Ce paramtre prend une valeur correspondant un code compos de deux lettres, la premire pour le haut / bas, u pour upper , l pour lower , la seconde pour gauche /droite, l pour left , r pour right . Les caissons (rectangles) de lgende pour les couches de polygones sont rglables en taille avec le paramtre KEYSIZE (valeurs : largeur, espace, hauteur) et leur espacement avec le paramtre KEYSPACING (valeurs : cart horizontal espace cart vertical). Il n'est pas possible de titrer une lgende directement (tout comme pour la carte, on peut par contre le faire en insrant la lgende dans une page html ou utiliser un template html).

Le bloc PROJECTION L'indication d'un gorfrencement pour la carte produite par le mapfile ncessite un bloc PROJECTION. Ce bloc contient les informations de rfrencement, qui peuvent tre de deux formes, une srie de paramtres PROJ.4 (Cf.

http://proj.maptools.org/gen_parms.html) ou un code EPSG (Cf : http://www.epsg.org/). Par exemple : PROJECTION "proj=utm" "ellps=GRS80" "zone=15" "north" "no_defs" END20

Ou : PROJECTION "init=epsg:28992" END Le bloc SCALEBAR MapServer gre les chelles selon une technique assez particulire. En effet, il part du principe que la carte sera au final une image possdant des dimensions en pixels, qui sera visualise au moyen d'un cran qui possde une certaine rsolution. Par ailleurs, la carte doit tre dessine dans un rectangle d'extension maximale donn par le paramtre EXTENT. L'chelle finale de l'image doit donc tre dfinie selon ces paramtres. Le paramtre EXTENT prime sur le paramtre SCALE, car c'est lui qui dfinit plus prcisment ce que doit contenir la carte dessiner. Pour dessiner une chelle indiquant une certaine longueur terrain, il faut donc dterminer combien de pixels cette longueur va reprsenter (ou procder des essais), et l'indiquer dans le paramtre SIZE du bloc. Le bloc SCALEBAR permet de dessiner des barres d'chelle, dans l'image de la carte ou comme une image distincte. Il possde les paramtres suivants :

POSITION : Code deux lettres dfinissant l'endroit o sera dessine l'chelle, ce code est le mme que celui utilis par le paramtre POSITION du bloc LEGEND, cf.cidessus. SIZE : Dimensions en pixels (largeur espace hauteur) du rectangle contenant la barre d'chelle. Important car dtermine la longueur totale de la barre. INTERVALS : Nombre de subdivisions afficher.

STATUS : Inclusion (EMBED), dans une image part (ON) ou annulation (OFF).

21

STYLE : Apparence de la barre, 0 donnant une barre de rectangles pleins de couleurs alternes, 1 une barre fine munie de repres (barbules vers le haut).

UNITS : Units pour le calcul de la longueur des intervalles et laffichage de lunit de la barre d'chelle. Toutes units possibles sauf degrs dcimaux.

IMAGECOLOR : Couleur RGB du rectangle qui contient l'chelle.

BACKGROUNDCOLOR : Couleur RGB de la barre d'chelle et de ses libells.

COLOR : Couleur alternative BACKGROUNDCOLOR si barre de type 0 et plusieurs intervalles spcifis. OUTLINECOLOR : Couleur RGB de la rserve autour de la barre d'chelle (mais pas autour des libells). TRANPARENT : Valeur boolenne (ON / OFF) qui prcise si le rectangle contenant l'chelle est transparent.

Le bloc OUTPUTFORMAT Ce bloc permet de dfinir prcisment le format d'image du fichier qui sera gnr par MapServer. Le paramtre gnral IMAGETYPE correspond en fait des blocs OUTPUTFORMAT prdfinis dans MapServer, par dfaut. On peut ainsi mieux prciser certains paramtres de la sortie image, par exemple le taux de compression pour le format JPEG. Exemple pour produire un JPEG en compression peu destructive : OUTPUTFORMAT NAME jpegfull DRIVER "GD/JPEG" MIMETYPE "image/jpeg"22

IMAGEMODE RGB EXTENSION "jpg" QUALITY=100 END Exemple pour utiliser la sortie avec anticrnelage AGG sur du PNG transparent : OUTPUTFORMAT NAME 'AGGA' DRIVER AGG/PNG IMAGEMODE RGBA END

Le bloc LAYER Ce bloc va dfinir les proprits de cration et d'affichage d'une couche de donnes SIG par MapServer. Les blocs LAYER sont dessins dans l'ordre du mapfile, c'est dire que le premier bloc du mapfile est dessin en premier, les suivants viendront par-dessus sur la carte. L'ordre du mapfile est donc l'ordre inverse de la superposition verticale des sources.

Paramtres gnraux : NAME : Nom de la couche, utilis comme identifiant par l'interface web. Doit tre unique dans le mapfile et d'une longueur maximale de 20 caractres. Entre guillemets de prfrence (ou apostrophes).

GROUP : Groupe auquel le LAYER appartient. Utilis dans les modles HTML pour activer/dsactiver les couches par groupes.

METADATA : Bloc secondaire utiliser pour stocker des paires nom valeur . Utilis par les modles HTML et en mode serveur WMS. STATUS : Statut (visibilit) du layer. Valeurs : default, on, off. Doit prendre la valeur default pour que le layer soit visible lorsque l'on utilise MapServer en mode Map (le23

STATUS ON ne suffit pas le rendre visible, il faut que le layer soit expressment requis).

TYPE : Type d'objet gomtrique ou modalit selon laquelle la couche doit tre dessine. Valeurs : point|line|polygon|circle|annotation|raster|query. Ce paramtre peut prendre une valeur diffrente du type gomtrique des objets contenus dans la couche d'origine, par exemple une couche de polygones peut tre reprsente comme un LAYER de type POINT, ce qui affichera les centrodes des polygones ( MINSCALE : chelle minimale laquelle la couche sera dessine. Si une chelle plus petite est demande, MapServer dessinera la couche l'chelle prcise par ce paramtre. MAXSCALE : Idem pour l'chelle maximale. SYMBOLESCALE : chelle laquelle les symboles et/ou les textes apparaissent leur taille normale. Ce paramtre permet un dimensionnement dynamique de ce type d'objets selon l'chelle de la carte, dans les limites des deux paramtres prcdents. Obligatoire pour l'utilisation du paramtre SIZEITEM dans un bloc CLASS. OPACITY : Degr de transparence de la couche, exprim en pourcentage (sans le signe %), de 100 opaque 0 totalement transparent. OFFSITE : Le numro d'index de la couleur d'une couche raster traiter comme transparent. Cela permet de ne garder que la rgion utile d'une couche raster. POSTLABELCACHE : Valeur boolenne (true / false) qui indique MapServer de dessiner cette couche aprs avoir dessin les libells (labels) qui sont dans le tampon des libells. Prend la valeur false par dfaut. CLASSITEM : Nom de la colonne attributaire qui est utilise dans les expressions de slection des blocs CLASS. LABELITEM : Nom de la colonne attributaire qui fournira le texte des tiquettes. TEMPLATE : Nom du fichier modle HTML qui prend en compte cette couche. Obligatoire pour rendre cette couche interrogeable par requte, mme si on n'utilise pas de modle HTML. DEBUG : Valeur On ou Off. Si le paramtre gnral LOG est dfini, les messages de dbogage dtaills seront ajouts au fichier de log, en plus des messages d'erreur.24

Paramtres de donnes : Shapefiles Les shapefiles sont la source de donnes la plus courante pour MapServer, qui au dpart tait construit uniquement autour de ce format (issu de la bibliothque shapelib). On indique que la source de donnes du layer est un shapefile avec le paramtre DATA, qui prend comme valeur le chemin vers le shapefile, relatif au chemin SHAPEPATH (prciser l'extension .shp est inutile). Le paramtre FILTER permet d'utiliser les expressions rgulires pour filtrer les objets de la source de donnes au niveau du bloc LAYER, c'est dire avant le traitement des blocs CLASS qui peuvent eux aussi comporter une slection. L'utilisation d'une source de donnes shapefile offre de plus la possibilit de lier (jointure) une table dbf de donnes attributaires, en utilisant un bloc secondaire JOIN. Ces donnes deviennent ainsi interrogeables par MapServer en mode Query.

Couches vectorielles accdes avec OGR La bibiothque de fonctions OGR permet MapServer de lire un grand nombre de formats SIG vectoriels : http://www.gdal.org/ogr/ogr_formats.html Pour indiquer une source de donnes OGR, il faut utiliser la syntaxe suivante : CONNECTIONTYPE OGR CONNECTION [nom de la source] Ce dernier paramtre dpend du type de source, gnralement il s'agit du chemin relatif au SHAPEPATH et du nom du fichier, ou du nom du rpertoire (source ArcInfo coverage par exemple). Certains types de sources vectorielles sont organises en couches multiples par fichier, il faut donc choisir la couche utiliser avec le paramtre DATA [numro/nom de la couche]. MapServer peut aussi rcuprer en partie les ventuels styles d'affichage prsents dans les couches, avec le paramtre STYLEITEM AUTO. Le paramtre FILTER est utilisable aussi avec ce type de donnes, comme pour les shapefiles. Source serveurs de donnes MapServer peut se connecter des serveurs SIG directement, et ainsi assembler des couches de diverses origines de faon transparente. Cela permet de construire une25

organisation des donnes disperse sur des serveurs spcialiss. Les paramtres de connexion sont fournis dans une chane de caractres passe en valeur au paramtre CONNECTION. Le paramtre FILTER peut contenir une expression de requte SQL (c'est dire le texte venant aprs un lment SQL WHERE). ArcSDE : CONNECTIONTYPE sde CONNECTION "myhost,esri_sde,gisdb,userid,password" DATA table, colonne_geom PostGIS (objet de la prochaine sance) : CONNECTIONTYPE postgis CONNECTION "user=nom_utilisateur dbname=nom_bdd host=serveur" DATA "colonne_gomtrique FROM table_ou_requte_SQL" Oracle Spatial : CONNECTIONTYPE oraclespatial CONNECTION "snom_utilisateur/mot_de_passe@bdd" DATA "colonne_gomtrique FROM table_ou_requte_SQL" Web Map Services (WMS) L'utilisation d'une source WMS ncssite la prsence d'un bloc PROJECTION dans le bloc MAP, ainsi que l'utilisation d'un bloc METADATA (dans le bloc WEB et dans les blocs LAYER) qui va prciser la requte faite au serveur. Cette fonctionnalit sera explore en dtails lors dune prochaine sance. Couches raster Les donnes raster gorfrences sont gres avec le paramtre TYPE raster, le paramtre DATA devant pointer vers le fichier (et son ventuel chemin relatif SHAPEPATH). GDAL supporte un grand nombre de formats de fichier, cf. : http://www.gdal.org/ formats_list.html MapServer possde quelques fonctions de traitement des rasters, accessibles avec le paramtre PROCESSING. GDAL est capable de raliser des traitements de rchantillonage /mise l'chelle (SCALE), de tramage (DITHERING), et de slection

26

de bande (BAND). Cf. : la documentation spcifique aux donnes raster : http://mapserver.gis.umn.edu/docs/howto/raster_data Les sources de donnes raster composes de nombreux fichiers juxtaposs sont grables en une seule fois par MapServer, sous la forme d'un tuilage (tiles). Ce tuilage consiste en un fichier shape qui contient des objets polygone reprsentant l'extension de chaque tuile raster, et ayant comme attribut le nom du fichier. Ce type de tuilage peut tre produt en utilisant l'utilitaire gdaltindex distribu avec GDAL. Cela permet une gestion beaucoup plus rapide des grandes couvertures raster, notamment si les bitmaps sont eux aussi optimiss pour tre lus diffrentes rsolutions (index pyramidal dans les tif par exemple). Le bloc CLASS Ce bloc permet de dfinir des classes thmatiques dans la couche, qui vont pouvoir tre affiches diffremment sur la carte globale. Les blocs CLASS sont traits dans l'ordre du fichier map, selon l'ordre de classement vertical. Ce bloc peut contenir les paramtres suivants : NAME : Nom de la classe, a prciser si l'on veut trouver cette classe dans la lgende. EXPRESSION : Critre de slection des objets de la couche qui vont tre inclus dans la classe en cours. Comme vu lors de la deuxime sance, ces slections peuvent utiliser quatre mthodes : comparaison de chanes de caractres (en utilisant CLASSITEM), comparasons logiques simples (avec oprateurs), expressions rgulires, fonction de chane length(). COLOR : Couleur de fond des objets possdant une surface, exprime en RGB, trois valeurs entires spares par des espaces. OUTLINECOLOR : Couleur de contour des objets, en RGB aussi. SYMBOL : Numro ou nom du symbole, qui doit tre dfini dans le mapfile par un bloc SYMBOL ou dans un fichier SYMBOLSET li au mapfile. SIZE : Taille du symbole ou de la trame, uniquement utilisable avec les symboles redimensionnables. MINSIZE et MAXSIZE : tailles mini et maxi (en pixels) de dessin des symboles. En dehors de cette fourchette les symboles sont dessins la valeur la plus proche.

27

SYMBOLESCALE : chelle laquelle les symboles et/ou les textes apparaissent leur taille normale. Obligatoire dans le cas de symboles proportionnels avec le paramtre SIZEITEM. TEXT : Nom de la colonne attributaire contenant le texte utiliser pour l'tiquetage des objets de la classe (On peut aussi crer des expressions combinant plusieurs attributs entre crochets). TEMPLATE : Chemin et nom du fichier modle HTML ventuellement utilis. DEBUG : Valeur On ou Off. Si le paramtre LOGFILE est dfini, les messages de dbogage dtaills seront ajouts au fichier de log, en plus des messages d'erreur. Les bloc CLASS peut contenir des blocs secondaires LABEL et STYLE. Le bloc LABEL Ce bloc permet de configurer l'tiquetage des lments de la classe, selon un champ attributaire indiqu par le paramtre LABELITEM du bloc LAYER qui contient le bloc LABEL. Paramtres de base : TYPE : Type de police de caractre utiliser. Avec la valeur bitmap , MapServer utilise ses propres polices internes, bitmap donc, mais elles en peuvent subir de rotation ni tre dimensionnes prcisment (cf. ci-aprs pour la taille de police). Avec la valeur truetype , MapServer utilise une police vectorielle, au format true type. Le paramtre FONT indique l'alias utilis pour indiquer le fichier ttf dans le fichier FONTSET. Par exemple, pour utiliser la police truetype Arial, il faut un fichier dclar par le paramtre FONTSET (du bloc MAP), et ce fichier (texte) comprendra une ligne arial C:\windows\fonts\arial.ttf indiquant l'alias de la police (le nom utilis dans le bloc LABEL) et l'endroit o trouver le fichier correspondant sur la machine. COLOR : Couleur du texte de l'tiquette, en RGB. SIZE : Taille du texte, valeur entire pour la taille en pixels des polices TrueType, ou valeur texte pour les polices bitmap deMapServer, parmi [tiny|small|medium|large|giant]. MINSIZE et MAXSIZE : Tailles mini est maxi de dessin des tiquettes, en pixels. MINFEATURESIZE : Taille minimale (valeur entire en pixels) d'un objet de la couche pour qu'il soit tiquet. Correspond la longueur pour les objets ligne, la surface du28

rectangle d'encombrement pour les objets polygone. La valeur auto indique MapServer de n'tiqueter que les objets au moins aussi gros que leur tiquette. Paramtres d'effets d'affichage du texte (la prsence du paramtre active la fonction) : ANTIALIAS : Rduction de l'effet d'escalier . Alourdit l'image produite car utilise des dgrads de couleur. OUTLINECOLOR : Couleur de la rserve autour du texte, en RGB. OUTLINEWIDTH : paisseur de la rserve, en pixels. SHADOWCOLOR et SHADOWSIZE : Couleur (RGB) et dcalage (en pixels) pour le dessin des ombres sous les tiquettes. BACKGROUNDCOLOR : Couleur du rectangle qui va contenir l'tiquette. Paramtres de positionnement : POSITION : Valeur texte correspondant la position de l'tiquette par rapport au centre de l'objet qu'elle renseigne, selon le schma suivant : ul uc ur cl cc cr ll lc lr Avec la valeur auto MapServer va tester les 8 positions externes pour choisir celle qui interfre le moins avec les autres tiquettes de la classe. ANGLE : Angle en degrs par rapport la verticale, ou auto pour les objets ligne, dans ce cas MapServer alignera l'tiquette sur l'objet. Auto ne fonctionne que si les libells utilisent une police truetype (vectorielle). OFFSET : Valeur X Y de dcalage entre le coin bas-droite de l'tiquette et le centre de l'objet renseign. MINDISTANCE : Distance minimale (valeur entire en pixels) entre deux tiquettes du mme objet. BUFFER : Zone tampon (en pixels) autour des tiquettes, pour viter qu'elles se touchent. FORCE : Force le dessin des tiquettes de la classe, sans tenir compte des contraintes de proximit. Valeur : true/false ( false par dfaut).

29

PARTIALS : Valeur true/false qui dtermine si MapServer peut dessiner des tiquettes incompltes (coupes par les bords de l'image). Vaut false par dfaut. WRAP : Prcise le caractre (entre guillemets) du texte des tiquettes pour indiquer un passage la ligne et donc produire des libells sur plusieurs lignes. 2- Utilisation des templates HTML. Documentation officielle : http://mapserver.gis.umn.edu/docs/reference/templatereference Dans le cadre d'une utilisation sur un serveur web, les auteurs de MapServer ont ajout une fonctionnalit au logiciel pour lui permettre de gnrer non seulement une image de carte, mais un document HTML complet pouvant comprendre les divers lments (carte, chelle, lgende, titres et mentions). Ce fonctionnement utilise un fichier modle HTML, dans lequel MapServer va modifier des valeurs pour les remplacer par les lments qu'il va produire. Ce fichier modle HTML est ce qu'on appelle un "template" dans le vocabulaire de MapServer. Le fonctionnement des templates est trs simple : dans le mapfile on spcifie le chemin vers un fichier template HTML. Ce dernier contient le code HTML de la page dans laquelle vont se trouver les lments produits par MapServer, ainsi que certaines balises spciales, qui seront remplaces par le code HTML adquat par MapServer. La balise la plus importante est la balise [img], qui sera remplace par MapServer par le chemin vers le fichier image de la carte qu'il gnre. Le passage des paramtres entre le template HTML et MapServer passe par le biais de variables CGI, donc en utilisant les formulaires HTML si lon veut faire simple. Exemple : MapServer : Exemple de modele HTML Titre de la carte chelle : 1 / [scale] L'exemple ci-dessus est une page HTML qui comporte un formulaire, deux images et un texte. Le formulaire sert proposer l'utilisateur un bouton qui, lorsqu'il est activ, envoie des paramtres cachs MapServer, qui, en retour, renvoie la mme page HTML mais dans laquelle la balise [img] de la source de l'image t remplace par le chemin vers le fichier image qui a t gnr. De mme, la balise [ref] a t remplce par l'image de la petite carte de rfrence, et la balise [scale] par la valeur numrique de l'chelle. Ce fonctionnement peut tre dcompos en deux parties : un fichier d'initialisation qui fournit les paramtres de base MapServer, et un fichier template diffrent qui lui va tre le modle de la page HTML gnrer. Ainsi l'utilisateur ne sera pas confront un une premire page incomplete (images vides).31

Un fichier template peut tre la solution la plus indique pour utiliser MapServer comme CGI (c'est dire sans programmer), car il peut permettre de spcifier les paramtres de base sans devoir les crire dans une url trs longue, comme on le ferait la ligne de commande. Un fichier template minimal est ainsi mme d'initialiser MapServer, de lui fournir les chemins vers le mapfile et le fichier image gnrer, ainsi qu'un cadre de dimensions prcises pour y insrer la carte. Tous les paramtres de MapServer CGI peuvent tre utiliss (et donc remplacs) dans un template HTML, et l'on peut aussi faire passer MapServer des variables personnalises, il les remplacera dans le HTML final selon les balises du template.

III.

MapServer comme serveur de donnes WMS/WFS OpenLayers comme client WMS/WFS

1- Les WebServices OGC avec MapServer MapServer sait utiliser et produire des donnes spatiales services selon les principales normes Open Geospatial Consortium (OGC) : Web Map Service (WMS) et Web Feature Service(WFS). Il sait par ailleurs tre serveur pour la norme web Coverage Service (WCS). Un ensemble de dmonstrations de ces possibilits a t rassembl pour la confrence FOSS2008 et est disponible comme application MS4W chez MapTools : http://dl.maptools.org/dl/ms-ogc-workshop/ (il suffit de dcompresser le fichier .zip la racine du disque dur contenant MS4W).

a- MapServer client WMS MapServer sait utiliser une source de donnes WMS comme source dun LAYER. Le mode WFS permet de requrir une couche ou un assemblage de couches. Le client reoit une image correspondant aux couches demandes, styles par dfaut ou selon un fichier de paramtrage des styles au format SLD : Styled Layers Descriptors. Voici un exemple de MapFile utilisant le serveur de dmonstration WMS de la socit GeoSignal pour rcuprer une partie dune couche raster : NAME "Test serveur distant WMS" SIZE 400 40032

EXTENT -1 42 1 44 STATUS ON UNITS DD WEB IMAGEPATH "C:/ms4w/tmp/" IMAGEURL "/tmp/" END LAYER NAME "GeoSignal Raster 1000 k" TYPE RASTER STATUS DEFAULT CONNECTIONTYPE WMS CONNECTION "http://www.geosignal.org/cgi-bin/wmsmap?" METADATA "wms_srs" "EPSG:4326" "wms_name" "RASTER1000k" "wms_server_version" "1.1.1" "wms_format" "image/gif" END END END Une seule couche est utilise, et prsente le raster lchelle du millionime. Le serveur source est indiqu par le paramtre CONNECTION, la couche, sa projection et son format dans le bloc METADATA, le tout dans le bloc LAYER du mapfile. On peut ensuite ajouter pardessus dautres informations, locales ou elles aussi distantes. Voici un autre exemple, utilisant cette fois des couches vectorielles styles par dfaut : MAP NAME "Test" SIZE 400 600 EXTENT 7.525556 30.241667 11.583333 36.943611 STATUS ON33

UNITS DD IMAGECOLOR 255 255 255 IMAGETYPE PNG24 WEB IMAGEPATH "C:/ms4w/tmp/" IMAGEURL "/tmp/" END PROJECTION "init=epsg:4326" END SCALEBAR STATUS embed POSITION LR INTERVALS 1 UNITS kilometers STYLE 1 SIZE 80 4 END LAYER NAME "Admin" STATUS DEFAULT TYPE raster CONNECTIONTYPE WMS CONNECTION "http://www.geotests.net/cgi-bin/mapserv?map=../htdocs/test/ wmservice/wms-tunisie.map&" METADATA "wms_srs" "EPSG:4326" "wms_name" "Admin" "wms_server_version" "1.1.1" "wms_format" "image/png" END34

END END Si lon veut modifier lapparence des couches rcupres, on peut utiliser un fichier de style au format SLD et fournir son URL au mapfile en ajoutant deux lignes dans le bloc METADATA du LAYER concern : "wms_style" "default" "wms_style_default_sld" "http://www.geotests.net/test/wmservice/ monstyle.xml" Les fichiers SLD sont en XML, leurs possibilits pour mapserver sont dfinies sur cette page de la documentation : http://mapserver.gis.umn.edu/docs/howto/sldhowto/

b- MapServer client WFS Le principe est sensiblement le mme que pour prcdemment, MapServer rcuprant cette-fois des objets (features) du serveur, au lieu dimages rasters. Les features sont transmises dans un format de type GML (Geographic Markup Language, une variante de XML). Comme ce sont des objets qui sont rcuprs par MapServer, ce dernier peut leur affecter un style suivant les indications de son mapfile local. Exemple: NAME "Test serveur distant WMS" SIZE 400 600 EXTENT 7.525556 30.241667 11.583333 36.943611 STATUS ON UNITS METERS DEBUG ON WEB IMAGEPATH "C:/ms4w/tmp/" IMAGEURL "/tmp/" END PROJECTION "init=epsg:4326" END35

LAYER NAME Cotes TYPE LINE STATUS DEFAULT CONNECTIONTYPE WFS CONNECTION "http://www.geotests.net/cgi-bin/mapserv?map=../htdocs/test/ wfservice/wfs.map&" METADATA "wfs_typename" "Admin" "wfs_version" "1.0.0" END PROJECTION "init=epsg:4326" END CLASS NAME "Admin" STYLE WIDTH 2 OUTLINECOLOR 120 120 120 END END END END c- La diffusion de WebServices OGC par MapServer et leur consommation par un client utilisant la bibliothque OpenLayers Pour devenir serveur de WebServices, MapServer a toujours besoin dun mapfile, muni de mtadonnes spcifiques qui vont prciser les paramtres supplmentaires demands par ces oprations. Mais MapServer ne peut pas tre serveur et client WMS en mme temps, donc tre client de son propre webservice. Pour tester cette fonctionnalit serveur, il va donc falloir trouver un logiciel client WMS qui soit capable dinterroger notre serveur local.36

MapInfo, ArcMap, et les principaux logiciels SIG desktop sont aujourdhui des clients WMS/WMS, cd type de WebService stant bien dvelopp. Nous allons pour notre part essayer un autre type de client, de type lger : une bibliothque de fonctions en JavaScript, OpenLayers. Le principe de cette solution client est de proposer la consommation des WebServices directement dans le navigateur internet, par lutilisation de fonctions JavaScript, et la mise disposition dune interface utilisateur de visualisation et dinterrogation de cartes. Premirement : crire un mapfile qui sert les donnes OSM de la Tunisie comme WebService WMS. NAME "Test" SIZE 4000 3000 EXTENT 7.525556 30.241667 11.583333 36.943611 STATUS ON UNITS DD IMAGECOLOR 255 255 255 SHAPEPATH "../vecteur/" IMAGETYPE PNG24 WEB IMAGEPATH "C:/ms4w/tmp/" IMAGEURL "/tmp/" METADATA "wms_title" "GeoTests" "wms_onlineresource" "http://localhost/cgi-bin/mapserv.exe?map=../htdocs/ wmservice/wms-tunisie.map&" "wms_srs" "EPSG:4326" END END OUTPUTFORMAT NAME PNG24 DRIVER "GD/PNG" MIMETYPE "image/png"37

EXTENSION PNG IMAGEMODE RGBA TRANSPARENT ON END PROJECTION "init=epsg:4326" END LAYER NAME Admin METADATA "wms_title" "Admin" END TYPE LINE STATUS OFF DATA tunisia_administrative PROJECTION "init=epsg:4326" END CLASS NAME "Admin" STYLE OUTLINECOLOR 20 20 20 END END END # Layer LAYER NAME Coastline METADATA "wms_title" "Coastline" END TYPE LINE38

STATUS OFF DATA tunisia_coastline PROJECTION "init=epsg:4326" END CLASS NAME "Coastline" STYLE OUTLINECOLOR 20 20 120 END END END # Layer LAYER NAME Parks METADATA "wms_title" "Parks" END TYPE POLYGON STATUS OFF DATA tunisia_natural PROJECTION "init=epsg:4326" END CLASS NAME "Natural" STYLE COLOR 20 120 20 OUTLINECOLOR 20 40 20 END END END # Layer39

LAYER NAME Highway METADATA "wms_title" "Highway" END TYPE LINE STATUS OFF DATA tunisia_highway PROJECTION "init=epsg:4326" END CLASS NAME "Roads" STYLE OUTLINECOLOR 200 20 20 END END END # Layer END # Map File Notez les diffrences ente ce mapfile de serveur WMS et un mapfile classique : - il faut un bloc projection principal (dans le bloc MAP) et dans chaque bloc LAYER ; - le bloc WEB doit contenir un bloc METADATA comprenant obligatoirement : - le nom du serveur dans le paramtre wms-title ; - ladresse dinterrogation du webservice dans le paramtre wmsonlineressource; - le systme de projection de la carte dans le paramtre wms-srs. - les blocs LAYER doivent eux aussi comport un bloc METADATA donnant le nom de la couche dans le paramtre wms-title. Cest ce nom qui servira retrouver la couche lors des requtes. Deuximement : Consommer ce WebService avec un fichier HTML muni des fonctions dOpenLayers.

40

OpenLayers sinstalle simplement : il sagit dun seul fichier javascript dposer sur le serveur, et qui est ensuite appel dans le document html/php. Pour pouvoir bnficier de la documentation et des exemples, il est intressant de tlcharger la version dOpenLayers empaquete pour MS4W. Dans le rpertoire exemples dOpenLayers se trouve un fichier mapserver.html qui ralise la consommation par OpenLayers dun WebService en WMS distant. Pour ladapter a notre WebService WMS local, il faut modifier le paramtre layer comme suit : layer = new OpenLayers.Layer.MapServer( "Local", "http://localhost/cgi-bin/

mapserv.exe?map=../htdocs/wmservice/wms-tunisie.map&", {layers: 'Admin'}, {gutter: 15}); On indique par cette modification que la source de donnes est lordinateur local, sur lequel MapServer diffuse un WMS partie du mapfile de la Tunisie, et quon veut rcuprer la couche nomm Admin. Le paramtre gutter (gouttire) indique la prise en compte dune marge de 15 pixels entre les tuiles demandes MapServer, pour viter les problmes de pixels vides entre deux tuiles. Le tuilage est automatique, pour sen rendre compte vous pouvez cliquer droit sur la carte et choisir afficher limage : on retrouve la requte MapServer CGI dans lurl. Pour une prsentation plus complte dOpenLayers, deux ressources francophones sont intressantes : - GoTribu : http://www.geotribu.net/node/3 - SoftLibre : http://softlibre.gloobe.org/doku.php/openlayers/start OpenLayers sait utiliser un fichier SLD pour styler diffremment les donnes WMS, comme vu prcdemment avec MapServer en client WMS. Il faut lui fournir un paramtre supplmentaire pointant vers lURL du fichier SLD utiliser : sld: 'http://localhost/test/wmservice/monstyle.xml'

Installation et dcouverte de PostgreSQL / PostGISIntroduction : Prsentation de PostGIS. PostGIS est le module d'extension spatiale du SGDBR serveur PostgreSQL. PostgreSQL (http://www.postgresql.org/) se revendique comme le SGBD OpenSource le plus sophistiqu du monde. C'est en effet un systme trs puissant et trs ouvert, en41

constante volution. Au dpart rserv au monde Unix, PostgreSQL comporte aujourd'hui une version Windows, ce qui permet une collaboration plus simple avec MS4W install prcdemment. PostGIS (http://www.postgis.fr) est une extension de PostgreSQL qui ajoute des fonctions de stockage et de requtes spatiales au SGBD. On peut ainsi stocker sous forme de tables des couches SIG compltes, munies de leurs donnes attributaires, de leur gorfrencement, et composes d'lments

gomtriques varis. Concrtement une telle couche SIG devient une table PGSQL munie d'un champ supplmentaire, comprenant les donnes gomtriques, dcrites selon les normes OGC. Il existe des convertisseurs simples pour intgrer des couches SIG, en les convertissant en commandes SQL. PostGIS comprend tous les types de donnes et de gomtrie spcifis par la norme de rfrence Simple Features for SQL de l'OGC : http://www.opengeospatial.org/standards/sfa 1- Installation et insertion de donnes spatiales. tapes : a. Tlcharger la dernire version Windows de PostgreSQL : option pgIntaller http://www.postgresql.org/download/windows b. Dcompresser le zip et lancer l'installation par le fichier postgresql-8.3.msi. Dans les paramtres d'installation : Activer le support de la langue A ltape dinstallation de PGSQL en tant que service, choisir un mot de passe pour le compte utilisateur postgres : postgres. (PGSQL sera excut par scurit par cet utilisateur, et non pas par lutilisateur ayant ouvert la session). A ltape dinitialisation du groupe de bases de donnes, modifier le nom du superutilisateur en sigma et lui attribuer le mot de passe sigma . A ltape dactivation des modules de contribution, choisissez B-Tree GiST, qui est un type dindex intressant pour les donnes spatiales. c. Aprs linstallation de PGSQL se lance le logiciel Stack Builder, qui permet de tlcharger et dinstaller des options, notamment Postgis 1- Dans la liste droulante, choisissez PostgreSQL sur le serveur local42

2- A ltape suivante, dans la thmatique Spatial extensions, choisissez PostGIS. 3- A ltape suivante choisissez un serveur de type HTTP (en Allemagne par exemple, pour la rapidit). 4- Installez PostGIS, en indiquant le superutilisateur mastersig dont le mot de passe est mastersig. 2- Vrification de linstallation et prsentation de pgAdminIII Aprs linstallation de PGSQL et PostGIS, le serveur est lanc sur la machine, en tant que service Windows. (Pour vrifier, vous pouvez aller voir dans les outils d'administration du panneau de configuration de windows). PGSQL tant une application serveur, il ne possde pas dinterface graphique propre. Un projet dinterface graphique qui tait lorigine distinct a t intgr linstallation de PGSQL : pgAdminIII. Dans pgAdminIII, dans la partie gauche de la fentre principale, cliquez sur le serveur puis sur l'item bases de donnes . Vous devez voir la base par dfaut qui s'appelle postgres , ainsi que les bases postgis et template_postgis qui ont t cres lors de l'installation de ce dernier. La base postgis comporte par dfaut deux tables dans le schma public : geometry_columns et spatial_ref_sys , le langage pl/psql est activ et les fonctions PostGIS disponibles. 3- Conversion d'une couche shape en table PostGIS. L'intgration de donnes existantes dans une BDD PostGIS peut se faire de plusieurs manires, la plus simple tant de convertir ces donnes en un script SQL qui sera excut par pgAdminIII ou tout autre interface de PostgreSQL (psql en ligne de commande, phpPgAdmin avec un navigateur...). PostGIS est fourni avec un utilitaire de conversion des shapefiles vers ce format script SQL (shp2pgsql.exe), et il existe des convertisseurs (ogr2ogr de GDAL/OGR par exemple) qui permettent de transformer divers formats en tables PGSQL (par la cration de fichiers .sql ou linsertion dans la base).

43

Nous allons travailler avec les shapefiles OSM de la Tunisie tlchargs prcdemment. La transformation de ce shapefiles en fichier script SQL s'effectue la ligne de commande avec l'aide de l'outil shp2pgsql.exe. Il vous faut donc : - Ouvrir une fentre de commandes Windows munie des variables systmes PGSQL, en choisissant le raccourci Invite de Commandes du menu Dmarrer / PostgreSQL. - Se dplacer (cd) dans le rpertoire contenant les donnes vectorielles : c:\ms4w\Apache\htdocs\vecteurs - Utiliser loutil de conversion de la manire suivante : shp2pgsql -s code_epsg -I shapefile nom_table > fichier__creer.sql Le code EPSG correspond au SRID, c'est dire au gorfrencement. Shp2pgsql ne sait pas lire le fichier .prj du shapefile pour y trouver ces informations, il faut donc les lui fournir manuellement. Attention ce nest pas une reprojection mais bien une information donne sur la projection existante dans le shapefile. Le paramtre -I sert crer un index de type GiST sur le champ qui contient les donnes spatiales, pour optimiser leur utilisation. Vrifiez la projection du shape avec ogrinfo et reprez son code epsg. Le nom du shapefile est donn sans l'extension .shp. Il faut utiliser une redirection de sortie > pour demander Windows de rediriger le texte produit par shp2pgsql dans un fichier texte, sinon il dfile inutilement l'cran. On pourrait aussi piper (transmettre) cette sortie directement sur le programme psql qui est l'interface en ligne de commande d'origine de PostgreSQL (en utilisant la syntaxe | psql nom_de_la_base , au lieu de > fichier.sql). Dans notre cas, la couche est projete en Lat/Long WGS84, la commande va donc ressembler : shp2pgsql -s 4326 -I tunisia_administrative.shp tunisia_administrative > tunisia_administrative.sql Si l'on ouvre le fichier tunisia_administrative.sql produit, on peut se rendre compte qu'il s'agit bien d'une srie de commandes SQL qui vont crer et remplir la nouvelle table, selon les modalits d'une table gographique PostGIS. Pour excuter ce script SQL sur44

notre serveur PostgreSQL il faut charger le fichier dans l'interface de pgAdminIII, en cliquant sur la base de donnes postgis , puis sur le bouton SQL de la barre d'icnes. L'diteur SQL se charge, il faut y ouvrir le fichier tunisia_administrative.sql, puis lancer la requte (flche verte ou menu). La requte s'excute en quelques secondes, mais ne renvoie pas de rsultat, c'est normal pour une requte sql de cration. Un petit tour dans pgAdmin III nous indique les spcificits de la nouvelle table : - cration d'une table tunisia_administrative dans le Schma public de la BDD postgis . - apparition d'une colonne supplmentaire, gid , qui est un compteur entier attribu chaque lment de la table, pouvant donc servir de cl primaire - apparition d'une colonne supplmentaire, the_geom , qui contient la conversion des gomtries des polygones des communes au format de stockage par dfaut de PostGIS, le WKB (la version binaire, compresse, du Well Known Text). - La table comporte des contraintes (des vrifications automatiques) lies la cl primaire, aux dimensions, au type de gomtrie et au rfrencement spatial des donnes insres ou modifies. - Dans la table geometry_columns , un nouvel enregistrement est apparu, pour indiquer la colonne gomtrique de la table tunisia_administrative. Vous pouvez rpter lopration pour les autres shapefiles : coastline, natural, highway et poi. Voil, nous avons donc un serveur PostGreSQL/PostGIS oprationnel, muni de nos donnes gographiques de test. 4. Requtes MapServer sur les donnes PostGIS. a. Requte daffichage simple La requte la plus simple : affichage de la couche tunisia_highway. Avant toute chose, il nous faut savoir l'extent de la carte, exprim dans l'unit de son gorfrencement, pour pouvoir spcifier l'EXTENT du mapfile. C'est possible de deux manires : en utilisant loutil ogrinfo la ligne de commande ou en faisant une requte PostGIS.

45

Cette

deuxime

faon

de

faire

consiste

utiliser

la

fonction

GetExtent(champ_geometrique) de PostGIS, par le biais dune requte SQL. Le mapfile pour un layer issu de donnes PostGIS (simple.map des exemples) Notre mapfile va ressembler : MAP EXTENT 7.5 30 11.6 37.5 IMAGECOLOR 255 255 255 SIZE 400 600 STATUS ON NAME "Tunisie" WEB IMAGEPATH 'C:\ms4w\tmp\ms_tmp\' IMAGEURL '/ms_tmp/' END LAYER NAME "Routes" CONNECTION "user=sigma password=sigma dbname=postgis host=localhost" CONNECTIONTYPE POSTGIS DATA "the_geom from tunisia_highway as foo using unique gid using SRID=4326" STATUS DEFAULT TYPE LINE CLASS OUTLINECOLOR 100 0 0 END END END Dans le bloc LAYER, on trouve les paramtres de connexion vont permettre de prciser le login au serveur PostgreSQL, et le type PostGIS. Le plus important ici est le paramtre DATA. Dans un LAYER PostGIS, Le paramtre DATA correspond en fait une requte SQL, qui doit renvoyer des gomtries, sous la forme de tout ou partie d'une colonne46

gomtrique d'une table PostGIS. De plus, pour optimiser la recherche des infos, il faut prciser la colonne de cl primaire et le code de projection, le SRID (Spatial Reference IDentifier). La syntaxe du paramtre DATA comporte donc : - the_geom from tunisia_highway => indique la colonne gomtrique et la table rcuprer. - as foo => PostGIS requiert que la requte soit nomme, foo tant le pseudonom utilis par tradition ancestrale en SQL :-) - using unique gid => indique que la colonne gid , une cl rajoute lors de la conversion du shapefile, contient des valeurs uniques. Elle peut donc tre indique comme telle PostGIS qui va en tenir compte pour optimiser son travail de recherche, ce qui est utile dans le cas de tables lourdes. - using SRID=4326 => indique le systme de projection de la couche (code EPSG). b. Requtes de slection Dans un bloc LAYER prenant ses donnes dans une table PostGIS, on peut raliser de multiples oprations de slection et mme excuter des fonctions (de calcul et patiales). Pour commencer simplement, on peut demander n'afficher qu'une partie de la couche PostGIS, selon un critre bas sur ses donnes attributaires. Ce type de slection s'effectue de manire simple en utilisant paramtre FILTER, du bloc LAYER, par exemple : FILTER "type = 'primary'" FILTER "name ''" Ce filtre correspond au texte que l'on ajouterait derrire le paramtre WHERE d'une requte SQL. Notez les apostrophes qui entourent la valeur texte primary, les guillemets tant rservs isoler globalement la valeur du paramtre FILTER. C. Requtes et fonctions spatiales L'apport majeur de PostGIS est l'accs aux requtes bases sur des paramtres gographiques et les fonctions spatiales. On peut utiliser pgAdminIII pour excuter des47

fonctions de recherche ou des calculs spatiaux, par contre pour les fonctions qui retournent des gomtries il faut mettre MapServer au travail, pour reprsenter graphiquement leurs rsultats. Utilisation de fonctions PostGIS retournant des valeurs L'utilisation des fonctions PostGIS de calcul de valeurs comme la distance ou la surface peut se faire simplement par requte SQL sous pgAdminIII. Par exemple, pour retrouver la distance entre une attraction et un htel, cela donnerait : select

distance_spheroid((select the_geom from tunisia_poi where name = 'Attraction:Bordj el Kebir'), (select the_geom from tunisia_poi where name = 'Hotel:Djar El Berber'), 'SPHEROID["WGS 84",6378137,298.257223563]') La fonction Distance_spheroid(gomtrie, gomtrie, sphroide) retourne la distance en mtres entre deux points. Comme les donnes sont non projetes, il faut utiliser cette fonction plutt que distance(gomtrie, gomtrie), car PostGIS a besoin de savoir quel sphrode on veut utiliser pour mesurer la distance. Notez que les sous-requtes sont entre parenthses. Autre solution : reprojeter la vole les donnes spatiales pour pouvoir utiliser un systme permettant des mesures de distances et daires plus faciles. Par exemple : select length(transform((select the_geom from tunisia_highway where name = 'Route Gabes'), 32732))/1000 Naturellement, cela demande plus de travail pour le serveur, et ralentit donc les oprations. Si de nombreuses requtes spatiales sont prvues, autant reprojeter les shapefiles avant de les intgrer dans la base PGSQL, en utilisant loutil en ligne de commande ogr2ogr par exemple (disponible avec la bibliothque de fonctions GDAL/OGR) Ici on a reprojet la route de Gabs dans le systme UTM 32S (code EPSG :32732), pour avoir des mesures en mtres, que lon divise par 1000 pour obtenir des kilomtres. La liste des nombreuses fonctions disponibles et leur paramtres se trouve dans la documentation de PostGIS : http://www.postgis.fr/node/217 On peut aussi utiliser une fonction retournant une valeur comme paramtre d'une fonction retournant une gomtrie, par exemple la fonction Distance peut servir de48

critre de slection d'une requte d'affichage de points dintrt. select name from tunisia_poi where distance_spheroid((select the_geom from tunisia_poi where name = 'Attraction:Star Wars set' limit 1), the_geom,

'SPHEROID["WGS 84",6378137,298.257223563]') < 150000 Utilisation de fonctions retournant des gomtries Buffer PostGIS est capable de gnrer des gomtries en rponse des requtes et de les retourner MapServer pour que ce dernier les affiche. La fonction classique des SIG est le dessin d'un buffer, zone tampon autour d'un objet gomtrique. Voici un exemple de paramtre DATA pour le dessin d'un buffer de 20 kilomtres autour du Bordj el Kebir (Fort de Djerba) : DATA "the_geom from (select gid, buffer(transform((select the_geom from tunisia_poi where name = 'Attraction:Bordj el Kebir'), 32732), 20000) as the_geom from tunisia_poi) as route using unique gid using srid=32732" Notez que le mapfile doit tre transform pour projeter la carte selon le fuseau 32 sud du systme UTM (EPSG :32732). Le paramtre EXTENT doit donc tre modifi, il devient : EXTENT 466955.53125 13345694 735549.375 14088682 Oprations gomtriques PostGIS propose aussi des fonctions de calcul de rsultats doprations du les gomtries : intersections, fusions, diffrences. Tests de superposition et dinclusion PostGIS possde des fonctions de tests spatiaux : Equals(), Touches(), Overlaps(), Crosses(), Intersects(), Contains() et Within().

49