Om een publicatie te kunnen aanmaken in GeoServer is het nodig om een Styled Layer Descriptor (SLD) aan te maken, die de stijl van de datalaag zal bepalen. In dit document wordt beschreven op welke manier dit kan gebeuren.

Het opstellen van een SLD kan op verschillende manieren uitgevoerd worden: 

Op basis van een bestaande SLD 

  1. Zoek een bestaande SLD die gebruikt wordt voor de voorstelling van gegevens van dezelfde geometrie en volgens een manier die ook gebruikt zal worden in de nieuwe SLD: uniek symbool, classificatie obs één of meerdere attributen,... 
  2. Maak een kopie van deze SLD en open de kopie in een teksteditor, zoals bijvoorbeeld Notepad++ of OxyGen
  3. Pas de SLD aan volgens de vereisten van de desbetreffende dataset. 


Aanmaken SLD en bijbehorende legende via QGIS

Vector

In QGIS is het mogelijk om de stijling aan te maken en te exporteren als SLD. Het geëxporteerde SLD bestand heeft nog wel een aantal wijzigingen nodig. De procedure is als volgt:

  1. Open de desbetreffende datasets in QGIS
  2. Maak de gewenste legende aan met de functionaliteiten die hiervoor beschikbaar zijn in QGIS:
  3. Open het formulier 'Eigenschappen' voor de desbetreffende laag (bv via dubbelklik op de laagnaam in de TOC), ga naar de tab 'Stijl' en klik onderaan rechts op de knop 'Stijl Opslaan...'
  4. Bewaar de stijl als SLD op de gewenste locatie: kies onderaan bij 'Save as type' de optie 'SLD bestand (*.sld)' uit de mogelijkheden.
  5. Open deze SLD in een teksteditor en voer volgende acties uit:
    1. Vervang de tweede lijn volledig door: <StyledLayerDescriptor xmlns="http://www.opengis.net/sldxmlns:sld="http://www.opengis.net/sldxmlns:ogc="http://www.opengis.net/ogcxmlns:gml="http://www.opengis.net/gml" version="1.0.0">
    2. verwijder overal de namespace prefix se:
    3. Voeg tussen <UserStyle> <Name> naam van de stijl </Name> en <FeatureTypeStyle> een title toe:

<UserStyle>
<Name>Naam van de stijl</Name>
<Title>Steunmaatregelen bedrijventerreinen</Title> (De title is verplicht indien je INSPIRE conform wil zijn)
<FeatureTypeStyle>

                  d. Vervang overal SvgParameter door CssParameter
                  e. Verwijder de tags <: Desription> <:/Description> maar laat <Title>...</Title> ertussen staan
                   f. Controleer namen, titels,... in de SLD en pas aan waar nodig. 

       6. Om de legende (GetLegendrequest) goed weer te geven dient deze actie nog te gebeuren (indien niet automatisch).

    • Je neemt binnen de <Rule> de voorstellingsparameters in de SLD op binnen een <Name>..</Name> tag. Bijvoorbeeld:
      <FeatureTypeStyle>
         <Rule>
         <Name>Ramsar gebieden</Name>
            <PolygonSymbolizer>
               <Fill>
                  <CssParameter name="fill">#E6E600</CssParameter>
                  <CssParameter name="fill-opacity">1</CssParameter>
               </Fill>
               <Stroke>
                  <CssParameter name="stroke">#E6E600</CssParameter>
                 <CssParameter name="stroke-width">1</CssParameter>
               </Stroke>
            </PolygonSymbolizer>
         </Rule>
      </FeatureTypeStyle>
    • Indien deze <Name> tag niet is opgenomen dan valideert de SLD wel. Maar er zal geen legende tekst in de legendimage getoond worden. 
       

Het is nu ook mogelijk om bovenstaande operatie automatisch uit te voeren aan de hand van een python script, genaamd transform_sld.py. De download naar het pythonscriptpakket is te vinden op de confluencepagina Kookboek - Pythonscripts

Raster

De qgis plugin SLD4raster laat toe om stijlbestanden te maken op basis van rasters. Deze kan geïnstalleerd worden via plugins→ plugins beheren en installeren. De plugin werkt eenvoudig. Kies een rasterlaag om in te laden en klik op Generate SLD. De resulterende sld output kan vervolgens opgeslaan worden met de knop Export as SLD of kan rechtstreeks in geoserver worden ingeladen via Upload to GeoServer. Er is hierna geen manuele bewerking van de sld meer vereist.

Eenmaal de SLD is aangemaakt, kan deze geplaatst worden in de beschrijving van de dataset, vanwaar hij geïmporteerd en gevalideerd kan worden in de TaskManager. 

Bijkomende tips

Schaalafhankelijkheden

In sommige gevallen dient er best een schaalafhankelijkheid ingesteld te worden, dit om een optimale weergave en performantie voor de gebruiker te voorzien. Schaalafhankelijkheden (schaalbereik en schaalniveaus) kunnen enerzijds bepaald worden in de SLD, anderszijds op de naam van de laag zelf. 

Indien je een schaalafhankelijkheid wil instellen voeg je deze regel toe in je SLD. 

 <MaxScaleDenominator>20000</MaxScaleDenominator>

De 20000 geeft in dit geval de maximale schaal aan waarop de laag zichtbaar is. 

Via QGIS

De scaledenominators (schaalafhankelijkheden) worden niet mee geëxporteerd vanuit QGIS wanneer je die instelt op de algemene instellingen van je datalaag.

Dit gebeurt wel indien je gebruik maakt van regel gebaseerde inkleuring:


Gebruik geen 'ronde getallen' als scale denominators (bv geen 1/5000 maar beter 1/5005 als maximumscale denominator) omdat veel software pakketten standaard een ronde schaal hebben als zoomfactor. Dan krijgt de gebruiker de data net niet te zien op een ronde schaal. 

vb <MaxScaleDenominator>20005</MaxScaleDenominator>

De datalaag labelen 

Info voor het labelen van een laag vind je op hier

Voor de labels heeft ervaring geleerd dat volgende instellingen wel 'mooi' zijn voor labeling op een weg (dus lijnelement)

<Rule> 
       <MaxScaleDenominator>20005</MaxScaleDenominator> 
          <TextSymbolizer>
           <Label>
                      <ogc:PropertyName>STRAATNAAM_RECHTS</ogc:PropertyName>
                     </Label> 
                 <Font> 
                        <CssParameter name="font-family">SansSerif.bold</CssParameter> 
                        <CssParameter name="font-style">normal</CssParameter> 
                        <CssParameter name="font-size">10</CssParameter> 
                        <CssParameter name="fill">#ffffff</CssParameter> 
                    </Font> 
                <Halo> 
                         <Radius>2</Radius> 
                         <Fill> 
                                <CssParameter name="fill">#000000</CssParameter> 
                                <CssParameter name="fill-opacity">0.85</CssParameter> 
                            </Fill> 
                    </Halo> 
                <Fill> 
                        <CssParameter name="fill">#ffffff</CssParameter> 
                        <CssParameter name="fill-opacity">1</CssParameter> 
                   </Fill> 
               <Priority>1</Priority> 
                   <VendorOption name="followLine">true</VendorOption> 
                   <VendorOption name="repeat">750</VendorOption> 
                   <VendorOption name="group">yes</VendorOption> 
             </TextSymbolizer> 
</Rule>

Voorkomende problemen + oplossingen

Transparante polygonen

Indien je een polygoon transparant wil voorstellen, kan je de fill parameter niet toevoegen. 
In het verleden werd de transparantie van een polygoon vaak op volgende wijze gecreëerd met het gevolg dat de getfeatureinfo niet meer werkte indien je binnen een polygoon klikt. Dit ligt aan het feit dat de opacity op 0 werd gezet. 

 <Fill>
   
<CssParameter name="fill">#000000</CssParameter>
   
<CssParameter name="fill-opacity">0</CssParameter>
</Fill>

Door bovenstaande regels te verwijderen en enkel een '<stroke>' te gebruiken voor de rand wordt dit probleem verholpen. 

  • Geen labels