Vooraf
Hartelijk welkom bij deze korte workshop “SLD: Tips en tricks”.
Leerdoelen
Aan het eind van de training
Weet je welke tools gebruikt kunnen worden om de data in de database en Geoserver te importeren
Kun je zelf aan de slag met Bridge Tool en Style Viewer
Je kent de opbouw van een SLD
Je kent de mogelijkheden om de SLD’s aan te passen
Je kan mooie SLD’s maken voor WMS: o.a. Stacked Points en Chart
SLD voor WFS in Onemap: je weet welke opties er beschikbaar zijn voor een SLD voor WFS (SLD library voor Onemap)
Let op:
Op de geoserver zijn de volgende Extensions geïnstalleerd:
Importer extension ==> om data en stijl met GeoCatBridge naar geoserver te publiceren
Chart extension ==> om charts in stijl te gebruiken
1. Inleiding
Om de lagen in Geoserver te stylen wordt meestal een xml SLD style document gebruikt.
Voorbeeld van een basis style :
<?xml version="1.0" encoding="ISO-8859-1"?> <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>Simple point</Name> <UserStyle> <Title>Geoserver SLD Cook Book: Simple point</Title> <FeatureTypeStyle> <Rule> <PointSymbolizer> <Graphic> <Mark> <WellKnownName>circle</WellKnownName> <Fill> <CssParameter name="fill">#FF0000</CssParameter> </Fill> </Mark> <Size>6</Size> </Graphic> </PointSymbolizer> </Rule> </FeatureTypeStyle> </UserStyle> </NamedLayer> </StyledLayerDescriptor>
2. Oefeningen
2.1 Voorbereiding QGIS project en data
LET OP:
Wanneer de data met GeoCatBridge naar Geoserver wordt gepubliceerd, wordt er altijd in Geoserver een nieuwe Omgeving en Bron aangemaakt. Namen van de Omgeving en Bron in Geoserver worden hetzelfde als de naam van jouw QGIS project.
Bestaande Workspace, Bron en data/styles ( met hetzelfde naam) worden ALTIJD overgeschreven
Laag die bestaat in een Workspace/Bron maar niet meer in de QGIS project wordt verwijderd uit Geoserver maar de tabel blijft bestaan in database
Om de data in de database en op de Geoserver van andere cursisten niet te overschrijven ga je de QGIS project en de data opnieuw opslaan met een andere naam (voeg overal eigen naam erbij ) :
Open in QGIS een project : c://OpenDag_sld_workshop/Workshop_SLD_ori
Sla het project opnieuw als: c://OpenDag_sld_workshop/‘Workshop_sld_jouwnaam’
Exporteer vervolgens alle lagen naar een locatie: (C:\OpenDag_SLD_workshop\workshop_x\Data\Originelebestandsnaam + jouwnaam)
en hernoem de lagen (rechter muisknop/Exporteren/ObjectenOpslaan). I.p.v.: _naam* gebruik _jouwnaam
Herhaal het voor alle lagen, behalve 'pastel’ laag
Verwijder de originele lagen uit het project zodat er alleen de lagen met jouw naam over blijven
2.2 Een eenvoudige stijl aanmaken en export naar Geoserver (GeoCatBridge)
Ga bij de kaartlaag: ‘Bomen_centrum_naam’ naar Eigenschappen/Symbologie en maak een mooie simple symbologie aan ( denk bv aan de dikte en kleur van de lijn rondom een punt die je kunt aanpassen, zet de units naar pixels om).
Ga nu naar Geoserver :
url: https://Geoserver-cursus.webgispublisher.nl
Inlog: Opendag2024
Ww: Opendag2024#1
Op de Geoserver bevindt zich reeds een aangemaakte Omgeving met databron
( Dataron type: PostGIS)
Deze Databron wordt een template voor de Omgeving die door Bridge wordt aangemaakt wanneer je de lagen naar Geoserver exporteert.
Ga terug naar QGIS project en open BridgeTool
Ga in Bridge naar Tabblad: Servers en klik op ‘Cursus_open_dag’
Hier zie je instellingen van “Cursus Geoserver”, met als ‘Storage’ optie: Import into PostGIS database ( managed by Geoserver) “.
De datastore in Bridge verwijst naar de reeds aangemaakte Datastore/Bron in Geoserver.
Ga in BridgeTool naar tabblad: ‘Publish’ en vink alle lagen uit behalve ‘Bomen_centrum_naam*’ laag.
Kies de juiste dataserver ( wij hebben er hier maar een)
En klik op “Publiceren”
De symbologie en kaartlaag wordt naar Geoserver gepubliceerd.
Ga naar de Geoserver en bekijk de laag
2.3 Style aanmaken voor een kaartlaag met filter ( StyleViewer)
Ga in QGIS naar de kaartlaag: ‘Containers_Wageninen_naam*
Bekijk de style van de laag zoals het nu is, met de TOOL “StyleViewer”
(ga in TOOLBAR naar WEB/GeocatBridge/StyleViewer
Aan de rechterkant verschijnt de StyleViewer.
Klik op tab ‘SLD’:
Je ziet de style van onze kaartlaag in xml formaat.
Een legenda eenheid is aangegeven van <Rule> tot </Rule>
We zien hier als symbool een simple point symbolizer met verschillende parameters.
<Opacity> is een transparency ( 0-1). De namen van de rest van de parameters spreken voor zich.
Je zou kunnen deze SLD kopiëren naar de tekst editor, het eventueel handmatig aanpassen en vervolgens toevoegen aan Geoserver.
Via Eigenschappen/Symbologie pas je de stijl van de laag “Containers_Wageningen_naam* als volgt aan (kies Categorieen en als Waarde: Inhoud) :
Je ziet dat de ‘inhoud’ is opgegeven in dm3 of in m3.
We kunnen de gegevens in de tabel niet aanpassen maar we gaan WEL de gegevens groeperen in de legenda.
Als legenda type kies: Regel-gebaseerd
Dubbel klik op de eerste regel
Pas de filter aan zodat alle Containers met inhoud = 4 m3 een kleur krijgen
"inhoud" = 4 OR "inhoud" = '4,0' OR "inhoud" = 4000
Doe hetzelfde voor de Containers met een inhoud van 5 m3.
Verwijder met de rode -- legenda eenheden die nu opgenomen zijn in de 4 m3 en 5m3 symbolen.
Klik op ‘Toepassen’ en OK
Bekijk de styling in de SLD Styler: in elke <Rule> is een tag <ogc:Filter> bijgekomen.
Publiceer alle lagen in het QGIS project naar Geoserver .
Waarschuwing verschijnt
Klik op ‘Ja’
2.3.1. Bekijken van de stijling in de Geoserver
Ga naar de Voorvertoning en bekijk jouw lagen
2.4 Sld: stack points (WMS lagen)
In SLD kunnen ook functies gebruikt worden. Wij gaan nu een paar stijls/sld met functies voor WMS lagen gebruiken. Bv stack point, om punten te groeperen.
In QGIS bij de laag met bomen kies ‘Cluster punten’ symbologie .
Bekijk nu in de SLD styler de xml van deze stijl.
U ziet dat de stack point symbologie hier niet wordt opgenomen.
Daarom gaan we een andere, bestaande SLD gebruiken om een nieuwe style in geoserver aan te maken voor onze bomen laag.
Ga naar de Geoserver/Stijlen
Voeg een nieuwe stijl toe ( kopieer de code uit de bestaande stackpoint SLD, Locatie SLD:)
Geef de styling een naam: “Workshop_SLD_stackedpoint_bomen_naam*”
Opslaan
Ga naar de laag met Bomen
Voeg de stijl die nu aan de bomen kaartlaag is toegevoegd als Extra stijl en de nieuwe stacked style als een standaard style
Sla de aanpassingen op
Bekijk de laag in Voorvertoning
Vergelijk het met oorspronkelijke style door in de voorvertoning window de oorspronkelijke style te kiezen (klik op de drie punten aan de linkerkant om “Styles” te kunnen kiezen)
Ga terug naar de sld, bekijk deze.
In stacked point sld voor rendering van de data worden gebruikt:
Meerdere functies voor <Transformation>
<ogc:Filter>
<ogc:PropertyName>count</ogc:PropertyName>
De ‘Count’ is een standaard variabel en deze kolom hoeft niet in de data/tabel aanwezig te zijn.
2.5 Sld: Charts ( WMS lagen)
In deze oefeningen gaan we de chart sld’s te maken.
2.5.1 PieChart
LET OP: Om deze styling te kunnen gebruiken op Geoserver dient ‘Chart extension’ geïnstalleerd zijn
Maak in de Geoserver een nieuwe style aan zoals beschreven in oefening 2.4 .
Gebruik hierbij SLD C:\OpenDag_SLD_workshop\Sld_ori\ Workshop_SLD_Piechart_buurt_leeftijd_inzoomen.sldPast de naam van de sld aan:
Workshop_SLD_Piechart_buurt_leeftijd_inzoomen_naam
Voeg deze style aan jouw “Buurten” laag, sla de laag op en bekijk het in Voorvertoning (Let op : zoom in )
Bekijk de sld:
In PieChart wordt er als graphic <Online resource> gebruikt met meerdere variabeles:
<OnlineResource
xlink:href="http://chart?cht=p&chf=bg,s,FFFFFF00&chd=t:${p_00_14_jr},${p_15_24_jr},${p_25_44_jr},${p_45_64_jr},${p_65_eo_jr}&chl=0-14 | 15-24 | 25 - 44 | 45-64 | >65 &&chs=350x250&chco=0000ff,ff0000&chtt=Leeftijd;&" />
cht=p ==> Type Chart
chd=t:${p_00_14_jr},${p_15_24_jr},${p_25_44_jr},${p_45_64_jr},${p_65_eo_jr} ==> Chart data ( kolom namen )
chl=0-14 | 15-24 | 25 - 44 | 45-64 | >65 = > Label
chtt=Leeftijd ==> Title
2.5.2 BarChart
Doe dezelfde oefeningen als met de PieChart.
Gebruik hierbij de sld:
C:\OpenDag_SLD_workshop\Sld_ori\Workshop_Bar_chart_Buurt_allochtonen_wag_Inzoomen.sld
Voeg deze style als een alternatieve style in ‘buurten’ laag,
Bekijk de style in Voorvertoning
Bekijk de SLD
2.6 Styling WFS lagen
Voor de WFS lagen in Onemap kan de styling uit SLD Styler gebruikt worden. Echter de keuze om de WFS lagen te stijlen is gelimiteerd.
2.6.1 WFS library
Bij de WFS styling in Onemap wordt een open source (door Nieuwland aangeboden) library gebruikt.
Ga naar de https://github.com/nieuwlandgeo/sldreader
Scrol naar beneden.
Onder de kop Restrictions on supported SLD Features zijn de stijling opties voor point, line en polygoon Symbolizers beschreven.
2.6.2 ONEMAP: wfs style toevoegen aan kaartlaag
Eerst gaan we een nieuwe kaart in OneMap aanmaken, vervolgens laag toevoegen en sld.
Ga naar de kaart:
Log in met ( xxx 🡺 vervang door een juiste nummer)
User: workshop_sld_xxx
Ww: Workshop_sld_x#1
Sla deze template kaart opnieuw op met de naam: Workshop - SLD – Jouwnaam*
( gebruik optie “Opslaan als” )
Let op: Als je bij deze optie “Opslaan als” gebruikt, blijf je wel in de originele kaart, je wordt niet 'verwezen 'naar de nieuwe kaart
Ga naar de nieuwe kaart
Ga naar Kaartlagen/Kaartlaag toevoegen
Voeg uit geoserver jouw laag met containers als WFS aan Onemap toe (kies: Mapservice “Cursus_GS (wfs) “)
Voeg meteen de nieuwe laag aan jouw kaart (klik op “Laag toevoegen aan kaart” en kies de juiste kaart )
Klik op “Opslaan”
Ga nu naar de ‘Stijl’ tab en kies als ‘Stijltype’ een ‘SLD-bestand’
Ga nu naar QGIS
Kopiëer ( ctrl A + ctrl C) uit StyleViewer SLD code voor de laag: “containers_Wageningen_naam” en “Paste” het in de SLD Onemap.
Publiceer kaartlaag
Bekijk de kaartlaag het in de viewer
2.6.3 Gebruik van external graphic in sld voor wfs laag
We gaan nu in de SLD uit vorige oefening een symbool voor Containers met inhoud van 4 m3 vervangen door symbool met external graphic (png), door eerst SLD aan te passen en vervolgens een symbool aan SLD toe te voegen.
Scrol naar beneden en onder SLD reader klik op ‘Live demos’:
Klik op “Flags of Benelux Countries” en kopieer uit de SLD onder de <PointSymbolizer> de hele tag < Graphic> ( van <Graphic> tot </Graphic> )
In Onemap in de SLD voor containers (wfs) vervang in de bovenste <Rule> het hele stuk van <Graphic> t/m </Graphic> met de gecopieerde code.
Vervolgens pas de volgende tags aan:
<Rotation>:
Van
Naar
< Size>:
Van
Naar
De link naar het symbool dient ook aangepast worden. We gaan de symbool die aan de Onemap is toegevoegd gebruiken.
In Onemap ga naar “Bestanden” / workshop_stijl en klik op de xxx.png bestand
Klik op ‘Directe link’
In SLD vervang de link in ‘href’ door de net opgehaalde link
Publiceer de SLD
Bekijk het WFS-bestand in de viewer
3. Handige links
Voor meer informatie over creating stacked points zie
https://www.cadlinecommunity.co.uk/hc/en-us/articles/360007541578-Geoserver-Creating-Stacked-Points
Voor meer informatie over chart styling zie :
https://docs.Geoserver.geo-solutions.it/edu/en/pretty_maps/charting.html
link naar de github library Onemap
https://github.com/nieuwlandgeo/sldreader
https://docs.Geoserver.org/2.25.x/en/user/styling/webadmin/index.html
4. Tips en Tricks – samenvatting
Gebruik StyleViewer van GeoCat om SLD’s aan te maken ( En evt GeoCatBridge om het naar Geoserver te versturen)
Werkt de SLD van StyleViewer niet?
Pas het aan in een texteditor, gebruik hiervoor bv de code/Rules uit bestaande SLD. Het gaat meestal mis bij de < Filters> en <Symbolizers>
Voor WFS-lagen: controleer op https://github.com/nieuwlandgeo/sldreader of Onemap jouw stijl ondersteunt.
Gebruik online resources bv OSM symbolen, zie https://wiki.openstreetmap.org/wiki/OpenStreetMap_Carto/Symbols
Let op: als je bij het aanmaken van een SLD een code uit andere SLD’s gebruikt, zorg dan dat er geen verschillende ‘prefixes’ in jouw SLD zijn.
Verschillende tools om een SLD aan te maken gebruiken verschillende prefixes bijvoorbeeld:
Geen prefix:
<Sld:> prefix
<Se:> Prefix