Aller au contenu

Utiliser un SLD pour filtrer un flux WMS depuis OpenLayers#

📆 Date de publication initiale : 16 octobre 2008

Défini 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 :

<?xml version="1.0" encoding="UTF-8"?>
<StyledLayerDescriptor version="1.0.0"
    xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd"
    xmlns="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.net/ogc"
    xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <NamedLayer>
        <Name>world</Name>
        <UserStyle>
            <Title>A style for World Population</Title>
            <FeatureTypeStyle>  
  <PolygonSymbolizer>
   <Fill>
    <CssParameter name="fill">#FF7171</CssParameter>
   </Fill>
   <Stroke>
    <CssParameter name="stroke">#FF7171</CssParameter>
    <CssParameter name="stroke-width">2.0</CssParameter>
   </Stroke>
  </PolygonSymbolizer>
     </FeatureTypeStyle>
        </UserStyle>
    </NamedLayer>
</StyledLayerDescriptor>

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.

Densité de population


Auteur#

Arnaud Vandecasteele#

portrait

Bien qu'issu à l'origine d'un parcours universitaire (doctorat et post-doc), j'ai finalement tenté l'aventure entrepreunariale au travers de Geolab.
Mes principaux centres d'intêrets dans le domaine de la géomatique portent sur les logiciels Open Source et plus particulièrement QGIS.
J'aime également le développement informatique avec une forte préférence à tout ce qui se passe côté serveur (base de données, traitements, etc.). Côté techno, mes choix se portent habituellement sur du (Geo)Django et PostgreSQL/PostGIS.

Pendant mon temps libre, vous me trouverez un GPS à la main afin de contribuer à OpenStreetMap ou sur un tatami en train de pratiquer le Jiu-Jitsu Brésilien.

Si vous êtes intéressé par l'un ou tous ces sujets, n'hésitez pas à me contacter !

Commentaires

Afin de favoriser les échanges constructifs, merci de préférer le pseudonymat à l'anonymat. Pour rappel, l'adresse mail n'est pas exposée publiquement. Consulter la page sur la confidentialité et les données personnelles.
Une version minimale de la syntaxe markdown est acceptée pour la mise en forme des commentaires.
Propulsé par Isso.

Ce contenu est sous licence Creative Commons BY-NC-SA 4.0 International Pictogramme Creative Commons Pictogramme Creative Commons BY Pictogramme Creative Commons NC Pictogramme Creative Commons SA