16 oct 2008

Utiliser un SLD pour filtrer un flux WMS depuis OpenLayers


Définit par l'OGC, le Styled Layer Descriptor (SLD) est un format de description (en XML) permettant la mise en forme de données géographique provenant d'un flux WMS. Pour simplifier il joue le même rôle qu'un fichier CSS pour une page HTML, le but étant de séparer complètement le style de la donnée.

Concrètement, lors de la réception d'un flux WMS un style définit lui est rattaché. La particularité, étant que ce fichier n'est pas physiquement lié au moteur carto. En effet, il est tout à fait possible d'interroger un serveur cartographique distant, de réceptionner le flux WMS et de lui appliquer un style que vous aurez vous même défini.

A quoi ressemble un SLD et comment cela fonctionne ?


Un SLD est un fichier XML contenant une liste de balises définie. On y retrouve par exemple la version du SLD utilisé, le nom de la données, le style à appliquer... Ci-dessous vous trouverez un exemple succinct de SLD :


world A style for World Population #FF7171 #FF7171 2.0

Le fonctionnement en lui même n'a rien de bien compliqué, il suffit simplement de bien comprendre les différentes interactions ci-dessous :

  • Un client effectue une requête WMS vers un serveur cartographique en spécifiant un SLD
  • Le moteur cartographique analyse la validité de la requête et le cas échéant envoie le flux correspondant
  • Le client récupère ce flux et peut ensuite l'afficher

OpenLayers et SLD


Il existe en natif dans la librairie OpenLayers un objet WMS dont l'une des propriétés est SLD. Il suffit alors de spécifier l'URL où est stocker votre fichier XML (valide) pour que celui-ci soit automatiquement appliqué à votre flux WMS.

Ce qui donne le code suivant :


var worldWMS = new OpenLayers.Layer.WMS(
"WORLD", "http: //localhost/cgi-bin/mapserv?map=/var/www/html/wms_wfs/world.map&",
{
layers: 'world',
transparent:'true',
SLD :'http://localhost/wms_wfs/styleSLD.xml'
},
{isBaseLayer:true,}
);

La carte ci-dessous, est une représentation mondiale du nombre d'habitant par Km² par pays. Le flux WMS étant généré par MapServer.


density_0.png

A propos de l'auteur: 
Arnaud Vandecasteele

Fervent défenseur de l'Open Source, Arnaud s'est spécialisé dans le développement d'application cartographiques web. OpenLayers, PostGIS ou encore Django sont autant d'outils qu'il manipule au quotidien.
S'il n'est pas en face de son ordinateur, vous le retrouverez un GPS à la main en train de cartographier pour OpenStreetMap, de faire voler son drone ou sur un tatami !