Creating Stunning Maps in GeoServer, with SLD, CSS, YSLD and MBStyles
This is a modal window.
Das Video konnte nicht geladen werden, da entweder ein Server- oder Netzwerkfehler auftrat oder das Format nicht unterstützt wird.
Formale Metadaten
Titel |
| |
Serientitel | ||
Anzahl der Teile | 295 | |
Autor | ||
Mitwirkende | ||
Lizenz | CC-Namensnennung 3.0 Deutschland: Sie dürfen das Werk bzw. den Inhalt zu jedem legalen Zweck nutzen, verändern und in unveränderter oder veränderter Form vervielfältigen, verbreiten und öffentlich zugänglich machen, sofern Sie den Namen des Autors/Rechteinhabers in der von ihm festgelegten Weise nennen. | |
Identifikatoren | 10.5446/43290 (DOI) | |
Herausgeber | ||
Erscheinungsjahr | ||
Sprache |
Inhaltliche Metadaten
Fachgebiet | ||
Genre | ||
Abstract |
| |
Schlagwörter |
00:00
ServerMapping <Computergraphik>MultiplikationsoperatorWort <Informatik>Varietät <Mathematik>Vorlesung/Konferenz
00:25
SchätzungDatenmodellMaßerweiterungSyntaktische AnalyseErweiterungSchlussregelDigitalfilterMaßstabPunktGeradePolygonVirtuelle MaschineTexteditorStandardabweichungFormale SpracheVorzeichen <Mathematik>Lesezeichen <Internet>Mechanismus-Design-TheorieObjektmodellFilter <Stochastik>Zentrische StreckungUmwandlungsenthalpieSoftwareValiditätElektronische PublikationVersionsverwaltungOrtsoperatorSchlussregelSelbstrepräsentationGarbentheorieStandardabweichungVirtuelle MaschineMaßerweiterungMailing-ListePunktTranslation <Mathematik>ARM <Computerarchitektur>HalbleiterspeicherObjekt <Kategorie>Ordnung <Mathematik>ServerMultiplikationsoperatorBeobachtungsstudieSkriptspracheMobiles InternetGemeinsamer SpeicherXMLComputeranimation
03:10
Genetischer AlgorithmusTextbausteinRechenwerkSchlussregelTypentheorieBruchrechnungPunktZentrische StreckungBildgebendes VerfahrenGesetz <Physik>RuhmasseStörungstheorieMedianwertComputeranimation
03:37
Genetischer AlgorithmusTextbausteinMaßstabSpezialrechnerCross-site scriptingp-BlockVariableMAPSchlussregelDateiformatTexteditorKompakter RaumSoftwareentwicklerArithmetischer AusdruckMaßerweiterungGraphische BenutzeroberflächeServerKontrollstrukturSymboltabelleTransformation <Mathematik>Regulärer Ausdruck <Textverarbeitung>MAPRechter WinkelMultiplikationsoperatorFormale SpracheAiry-FunktionClientE-MailTypentheorieKompakter RaumWeb-DesignerDienst <Informatik>ÄquivalenzklasseUmwandlungsenthalpieKomplex <Algebra>OvalQuick-SortProjektive EbeneSchlussregelZentrische StreckungGeradeKomplexe EbeneBruchrechnungRenderingMaßerweiterungZoomResultanteBenutzerbeteiligungTesselationVektorraumComputeranimationXMLUML
05:44
SpieltheorieVideokonferenzGenetischer AlgorithmusVersionsverwaltungSpezialrechnerTextbausteinZahlensystemDigitalfilterMaßstabArithmetisches MittelBruchrechnungBildgebendes VerfahrenDatenfeldElektronische PublikationComputerspielZentrische StreckungZahlensystemZoomBitComputeranimation
06:41
MaßerweiterungMaßstabMAPGebäude <Mathematik>Kompakter RaumCross-site scriptingZentrische StreckungZoomArithmetisches MittelBenutzerbeteiligungMAPArithmetischer AusdruckSpannweite <Stochastik>SchnittmengeMereologieBruchrechnungLokales MinimumZahlenbereichGrößenordnungCASE <Informatik>Güte der AnpassungFormale SpracheCodecMaß <Mathematik>Computeranimation
08:16
Maß <Mathematik>CliquenweiteMeterEinflussgrößeRechenwerkMaßstabKompakter RaumHook <Programmierung>TermMaß <Mathematik>MAPZoomQuellcodeElement <Gruppentheorie>MeterTabelleRechenwerkZahlenbereichTransformation <Mathematik>Zentrische StreckungLineare AbhängigkeitCliquenweiteFunktionalOffene MengeKreisbewegungPixelBitGebäude <Mathematik>LinearisierungGewicht <Ausgleichsrechnung>DickeBruchrechnungComputeranimation
10:05
E-MailFunktion <Mathematik>Transformation <Mathematik>Persönliche IdentifikationsnummerPunktZahlenbereichKategorizitätBildgebendes VerfahrenPunktZentrische StreckungBruchrechnungComputeranimationXML
10:26
URLHyperlinkSymboltabelleSpezialrechnerSchlussregelDigitalfilterMaßstabGenetischer AlgorithmusShape <Informatik>Elektronische PublikationMAPOffene MengeMultiplikationsoperatorGraphfärbungZoomVersionsverwaltungCASE <Informatik>URLBildgebendes VerfahrenZentrische StreckungDelisches ProblemQuick-SortBenutzerfreundlichkeitDialektEvolutionärer AlgorithmusBruchrechnungKreisflächeComputeranimation
12:08
Konfiguration <Informatik>Luenberger-BeobachterPunktSymboltabelleKreisflächeDreieckQuadratzahlPunktProgrammierungGenetischer AlgorithmusVerschlingungTermServerPolygonKonfiguration <Informatik>UmwandlungsenthalpieQuadratzahlBenutzerfreundlichkeitQuellcodeGebäude <Mathematik>DreieckDemoszene <Programmierung>Evolutionärer AlgorithmusKategorie <Mathematik>MultiplikationsoperatorGeradeExogene VariableNetzbetriebssystemProgrammiersprachePunktrechnungTurtle <Informatik>Rechter WinkelNichtlinearer OperatorZeiger <Informatik>CASE <Informatik>FontXML
13:19
PolygonCliquenweiteTermPolygonCASE <Informatik>GraphfärbungEinsSechseckBenutzerbeteiligungMAPBildgebendes VerfahrenComputeranimation
13:49
SpezialrechnerSymboltabelleURLBildgebendes VerfahrenDifferenteZoomStichprobenumfangOrdnung <Mathematik>Genetischer AlgorithmusNatürliche SpracheEnergiedichteComputeranimation
14:11
SpezialrechnerGenetischer AlgorithmusEvolutionärer AlgorithmusZahlenbereichMultiplikationsoperatorComputerspielQuick-SortGruppenoperationKreisfläche
15:07
MultiplikationsoperatorShape <Informatik>GeradeStereometrieGeradeSoftwareentwicklerZoomDifferenteMAPGraphfärbungFlächentheorieWhiteboardAggregatzustandComputeranimationXML
15:53
SymboltabelleGeradeKreisflächeKontrollstrukturKonfiguration <Informatik>GruppenkeimPartielle DifferentiationHydrostatikAttributierte GrammatikGenetischer AlgorithmusPunktQuick-SortGeradeÄußere Algebra eines ModulsGrundraumAttributierte GrammatikSchlüsselverwaltungFunktionalKonfiguration <Informatik>Coxeter-GruppeComputeranimation
16:20
KrümmungsmaßSpezialrechnerAttributierte GrammatikCross-site scriptingPunktFontRadiusSymboltabelleGeradePolygonGeradeMultiplikationsoperatorFunktionalKonfiguration <Informatik>Güte der AnpassungParametersystemPolygonSoftwareTermKurvenanpassungAttributierte GrammatikGamecontrollerFünfeckPunktFitnessfunktionMeterBestimmtheitsmaßTechnische Zeichnung
17:25
BetragsflächeStandardabweichungPASS <Programm>Diskrete-Elemente-MethodeKontrast <Statistik>TermMAPLokales MinimumMinimumSchießverfahrenHill-DifferentialgleichungVertikaleResultanteBitmap-GraphikRechter WinkelComputeranimation
17:49
ErweiterungLuenberger-BeobachterKontrast <Statistik>InformationAlgorithmusLokales MinimumErweiterungKontrast <Statistik>Bildgebendes VerfahrenCookie <Internet>GraphfärbungWhiteboardDatenfeldJensen-MaßGeradeGenerator <Informatik>Computeranimation
18:28
Ordnung <Mathematik>FunktionalTransformation <Mathematik>Bildgebendes VerfahrenMAPCookie <Internet>Ordnung <Mathematik>SkriptspracheNatürliche ZahlProzess <Informatik>PunktMereologieAbschattungTropfenDatenfeldQuick-SortSoundverarbeitungAutomatische IndexierungZweiBitZahlenbereichCASE <Informatik>BenutzerfreundlichkeitSnake <Bildverarbeitung>Data MiningFormation <Mathematik>Delisches ProblemMultiplikationsoperatorInformation
19:43
Dedekind-SchnittSinguläres IntegralBitmap-GraphikCodeGraphfärbungMapping <Computergraphik>Kontrast <Statistik>MAPComputeranimationXML
20:09
TexteditorCodeMapping <Computergraphik>Genetischer AlgorithmusKontrast <Statistik>GraphfärbungMAPBitmap-GraphikSchnittmengeEinsVektorraumTestbedÜberlagerung <Mathematik>ElementargeometrieMereologieTesselationTexteditorSystemaufrufProzess <Informatik>SoftwaretestKurvenanpassungComputeranimation
21:06
Konfiguration <Informatik>Prozess <Informatik>NamensraumVersionsverwaltungTexteditorVorlesung/Konferenz
21:46
BewegungsunschärfeSimulationVektorraumVersionsverwaltungServerNamensraumTesselationNormalvektorInverser LimesPlug inClientModallogikMereologieProtokoll <Datenverarbeitungssystem>Element <Gruppentheorie>ZahlenbereichVerkehrsinformationDienst <Informatik>SoftwaretestPartikelsystemSoundverarbeitungDivisionSchnittmengePunktMultiplikationsoperatorComputeranimation
Transkript: Englisch(automatisch erzeugt)
00:07
Thank you. So my name is Andrea Aime. I work for GeoSolutions, come from Italy, and I work on GeoServer. This talk is about creating maps with GeoServer using a variety of styling languages. And I will use this opportunity
00:21
to compare the various styling languages and show how you do the most common things in the various languages. And well, that should give you an idea of which styling language is your favorite. And people ask me, what is the best? And different people have different answers.
00:40
So I know what I like best, but different people will have a different answer. So in GeoServer, historically, SLD is the main styling language. Well, we all know it. And then we started adding extensions
01:01
like CSS, YSLD, and MBStyles, and I'm going to present them one by one. They all translate down into an object model in memory, Java objects, which is based on SLD. And from there, we can literally create an SLD file for you. So basically, every language gets translated down to SLD.
01:25
This also means that all the styling languages share some concepts. So each styling language contains the notion of a layer that the styles applies to, rules. The rules have filters or selectors. What should be painted? What should I paint red?
01:41
What should I paint yellow? Scale dependencies. When should I paint stuff? Should I paint it on 1 to 1 million, 1 to 10,000? And then they contain symbolizers. So given a certain geometry, how do I paint it? As a point, as a line, as a polygon, I'm just adding a label, and stuff like that. So these are the basic concepts.
02:01
They apply to all styling languages. Everything else is a syntax and mechanics. Styler Descripton 0 and 1.1 is the only OGC standard styling language. There is no other language that is standardized.
02:20
Everything else is vendor specific. So the Geo CSS is specific to GeoServer. MB Styles comes from Mapbox, and so on. SLD has been edited in GeoServer for years, not to his fault, honestly. It was meant for machine interchange. One software exports its own style in XML,
02:41
and another software imports it from the XML in its own internal style representation. It wasn't meant to be unedited. But as we all know, many people do, including myself. Since many people hand edit it, in a recent version of GeoServer, we added autocomplete in the style
03:01
editor, so that you can control space and get a list of valid tags for that position. And it can be generated by external tools, and I have a section about that at the end. This is an example of SLD with just one rule. A filter that says a type has to be equals to alpine hat. A scale dependency with a master scale denominator tag
03:20
that says this rule is painted from one to one to one to 100,000, and not one to one million, for example. And then we symbolize this point with this alpine hat little PNG image. It's painful to look at, honestly.
03:42
Then we have YSLD. The idea is that we have this language, YAML, that can map more or less every XML concept. So what they did was basically to do an equivalent of XML in YAML. And the result is more compact. The verbosity level is in between SLD and CSS,
04:03
has a notion of zoom levels if needed, but otherwise you can use scale denominators. The same style that you saw before is presented here in YSLD. It's more compact, it's more readable. I don't like it at all, personally. I hate YAML, but preference, right?
04:21
This is Geo-CSS, this is the one that I like personally. It's compact syntax, familiar for web developer. We have a very compact filtering syntax, which is CQL. We have auto-completing the style editor, and this is the whole thing in CSS, three lines. Type equals alpine hat, the scale denominator
04:41
has to be less than 100,000, and you have to use that PNG. I don't think it gets any more compact or expressive than this. However, it has a dark side. Cascading style sheets are based on the notion of cascading, rules that override other rules based on specificity. Many people do not understand or are willing to play
05:00
with that kind of complexity, so we added a way to turn it off. Then there is MB Styles. MB Styles has been developed by Mapbox for client-side rendering of a Mapbox vector tiles. It's JSON-based. It has this notion that the zoom levels do not,
05:20
sorry, scale denominators do not exist. You only play with the zoom levels of Web Mercator. So if you play with that projection, all fine. If you don't, well, tough luck. Unlike the other styling languages, it cannot support the styling extensions because, well, it was meant to take the style
05:40
that you develop in the client-side and use it in the server-side as well. And this is how it looks, more or less. I omitted a bit of boilerplate, but you can see it's JSON-based. One oddity is that all the images that you need to use come from a sprite file, which is one giant image which contains all the little subimages, and there is a JSON file telling you where to go
06:02
to extract the little subimages. The sprites are a concept that come from the video games world of when I was little. Then we have a scale dependency. As you can see, there is a mean zoom and not a scale denominator. The filter is in post-fit notation. In almost 20, I really would not like to see
06:22
post-fit notation, but whatever. And then we have the reference to the image. It just says alpine hut because in the sprite definition there is a little JSON telling you, ah yeah, the alpine hut, this coordinates in the sprite.
06:42
So what's next? We are going to explore the styling concept, and I have examples for SLD, YSLD, and CSS. I don't have examples for MB styles, sorry. So scale dependencies. Scale dependencies are the bread and butter of any web map because any web map is multi-scale.
07:00
People can zoom in and zoom out as they please. So we need to turn off and on layers and parts of the layers depending on the zoom level to keep the map faster to render and readable. And we want to maybe render things differently depending on the zoom level, like increasing the thickness of the roads
07:22
and stuff like that. So how do I express scale dependencies in the various languages? In SLD, we have min and max scale denominator tags. In YSLD, I have a range between 1,000 and 1,000,000, or I can do the scale using scientific notation,
07:41
or I can use the zoom levels of a particular well-known grid set. In CSS, the syntax is a scale denominator, and then you can use modifiers to make the big numbers easier to read, like 1K, 1M to identify 1,000 and 1,000,000. I created it because I kept on getting annoying,
08:04
like I was looking at five and some zeros, and I could never tell if it was 5,000, 50,000, 500,000 or five millions. But this way, I can tell it right away what the magnitude is. We have a notion of unit of measure. Okay, so in terms of MB styles,
08:23
you would have only the zoom levels of Webmercator, as I said. GeoServer supports the notion of a unit of measure for your elements. So if I say struct width five, by default, it means pixels, which could be useful or not.
08:41
There's always a possibility in GeoServer to specify that you want the five to mean meters on the ground, or feet on the ground. And that's how you do it in SLD. You have to use that huge URI, HTTP open geospatial.org SC units meter. Okay, thank you. In YSLD gets a bit better,
09:02
UM column meter, nice. In CSS, it's even simpler, 5M, okay. I just want a five meter. Why make it so complicated? There is a number of transformation functions that can be used to express scale varying
09:22
widths or rotations of stuff like that, any numeric value. This is a bit more complicated as a CSS. I'm basically saying, categorized on the scale denominator, categorized FSD, and then below 400,000 is gonna be two pixels. Below 800K, it's gonna be one, nine, and so on and so on. It's a little table.
09:42
Why did I have to go those lengths? Well, because if you render open street map, the widths of the roads vary between the scales, but it's not a linear dependency. So you have to prepare this little table instead. It doesn't go linear. If you try to go linear,
10:01
the roads start interfering with the buildings. The same, the very same style in SLD looks like this. Well, you have the big numbers because there is no compact notation for numbers, and well, the categorize is more or less the same.
10:21
So that covers scale denominators. How do I go about point styling? For the simple image, we can pick back that style that I used before. So you just refer, in CSS, you just refer to the URL of the image.
10:42
In SLD, well, you do exactly the same. It just takes 10 times more lines. You are not limited to PNGs. You can also use SVGs, for example, and SVGs can be used in a couple of ways. You can take an SVG and use it as is with its own colors and shades and whatnot,
11:02
like as if it was a picture, or you can take it as a shape, like in this case, in which I'm saying, okay, let's use the bank.svg, which is just a symbol, and it would be black if I didn't say anything, and then I apply a custom fill on it. Open Street Map rendering uses, the original Open Street Map style
11:22
uses a lot of these little SVGs that are just shapes, and then we have to color them based on our requirements. For comparison, I put the YSLD version of the same style below. As you can see, it's quite a bit longer, but still pretty readable.
11:41
Sometimes, depending on the zoom level, you have to compose the symbols or override them, so this is another case from Open Street Map. At one zoom level, the fountains are sort of a double circle, light blue circle, and the inner darker blue circle, but at the next zoom level, we switch to a more complicated SVG symbol,
12:01
so based on the scale denominator, we do the replacement from one symbology to the other. Marks have a lot of options in GeoServer. There is a lot of sources of symbology. There are the built-in symbol names from the SLD specification, which are like a bunch, like six or something.
12:21
Circle, square, triangle, times, and so on. And then, we can use true type fonts using this syntax, TTF column slash slash, the font name, like windings, and then a char code, which we can pick from the character selector of the operating system, and these fonts actually contain
12:41
little symbols instead of letters. We have the wind barbers generator, in which we say how strong the wind is, and it's gonna generate the right wind barber for the case. We can use WKT, which is a way to, a well-known text, which is a way to specify lines and polygons and points, and then we can build our own little symbols
13:01
by specifying how the pointer should move. I don't know if anyone has ever programmed in that programming language that has a little turtle going around on you, and you have to, it's for the elementary schools, whatever. You can see more symbologies at this link.
13:20
In terms of polygon filling, well, polygon thing can be pretty boring. You just specify a color, and these are the two cases. One highlight, in CSS, I have named colors. The ones that are in the web CSS, it's like 200 named colors or something like that. And well, in SLD, instead, you have to go
13:42
and use the hex syntax for the same color. So for some cases, colors in CSS can be more readable. Sometimes you want to repeat little images inside the field and in this case, to paint cemeteries of different religions, I can say something like, well, okay, let's make the background greenish
14:01
for the cemetery, and then depending on the zoom level, when I'm below one to 50,000, I'm gonna say, okay, if the religion is Jewish, then let's use that PNG, if it's Christian, another PNG, and if it's generic, we have another generic, another generic symbol.
14:20
So this is composing a solid background with repeated symbols. The same, the very same style that I see here in CSS can be expressed in YSLD using this and this. So I need to choose lights to make it fit. So again, verbosity, but still pretty human readable.
14:47
Sometimes we want to fit with hatches, so repeated lines, diagonal lines, crossing lines, and so on. So there are little symbols that are meant to be stacked side by side. So an X, I can put it side by side and it generates a cross hatch
15:02
and I have a number of these symbols that can be used to do hatches, diagonally in the two directions, vertical, horizontal, and crossed. Okay, let's go to painting lines. How do I paint lines? So this is an example from an OSM style
15:20
that I've been developing. It's the same line color, it's borders of states, and I paint them at different zoom levels depending on their importance. So at a certain zoom level, I paint only the country borders, then if I zoom in, I start painting
15:41
the provincial borders and so on, then the municipalities borders and so on. They are all the same color, but they are getting activated based on their importance at different zoom levels. If I want to get fancy, I can do dashing on the lines and I can do repeated symbols as well
16:02
and I can organize them so that they don't step on each other like in this alternation of lines and points. Labeling is a universe of its own. There is a million vendor options to control things. I'm not gonna get in details of explaining each one because it would take a presentation.
16:22
But basically, you have ability to pick from an attribute, maybe apply some functions to make it uppercase, lowercase, connect multiple attributes into one label, and then position the label above, below, centered along the line and so on. This is another case, again, in CSS
16:42
doing road network labeling instead, and I have a few vendor options such as label follow line that makes the line follow the curve of the lines. In terms of polygon labels, they are pretty much the same as points. The only notable thing is this goodness of fit parameter
17:03
which controls whether the label is displayed based on the relative size of the label versus the polygon. Like, I don't want to paint a label if it's 10 times bigger than its own polygon. It would just hide it. So by default, GeoServer paints the label
17:21
if at least 50% of it is inside the polygon. But you can control it. In terms of raster styling, well, we map values to colors like in a digital elevation model. I'm showing something new at the bottom which is hill shading. GeoServer 216 can do this kind of hill shading
17:40
automatically, you just turn it on and enable the right level of vertical exaggeration. The result is kinda nice. We can do contrast enhancement if your image is a bit dull and we have an extension for you to choose the algorithm and the maximum and the minimum.
18:00
It pretty much matches what you have in QGIS if you're familiar with it. And then we have a bunch of other features like color compositing. You take two layers and you compose them but instead of painting one on top of the other, you blend the colors of the two in some ways. For example, I can use a thick line border
18:24
and an alpha composition to generate color border from the field that I add below. So it's basically a cookie cutter. Only the parts that fall in the black, only the parts of the first map that fall in the black gets into the second.
18:43
There is Z-ordering and this is a true crossing somewhere in Germany, I think, which is a nightmare. It probably has 20 Z levels or something like that and you can tell GeoServer, okay, sort by an attribute, the road, Z-order, and put them together in the map
19:02
so that we can respect the natural order of things. We can transform stuff so we can take a geometry and shift it a bit to create a drop shadow effect or we can extract the points in it and these functions are pluggable so you can make your own. There are rendering transformation that we mentioned a number of times,
19:21
the notion that you can call a WPS process to extract information, so you can extract contours, you can extract, in this case, I'm calling a Gful script and I'm extracting the NDVI value, the vegetation index from 12 band image.
19:42
So far, I've shown you only SLD, CSS, and why SLD under the notion that you would be typing them, let's say, or at least understand them, but what if you wanted to do exporting from a desktop tool? Well, you can use QGIS, used to be rather bad,
20:04
but it improved a lot during the last few years. We got label exporting, which wasn't there. We got raster symbolizer export so that you can do contrast enhancement, color maps and the like from QGIS. Basically, you make your map in QGIS so then you go and say save as SLD,
20:22
the style instead of save as QML and then you use it in GeoServer. Then there is GeoStyler, which still is gonna cover in its own presentation, so I'm not gonna bog you with details. It's gonna give you all the ones you want. GeoSolution is working on its own styler, which we will call MapStoreStyler, I think.
20:42
We developed it during OGC testbeds for a Mapbox vector tiles. You can see the interface. It's similar to a desktop approach. Here is another example with a color picker. There is also a desktop tool, which is part of OS Geo called SLD Editor,
21:03
which allows you to point and click your way to create an SLD. And that's it.
21:20
Any question? Any question? So just a quick question on the last option you explained with exporting an SLD from QGIS. So from my experience with this, it's not a seamless process. One of the biggest challenges is name spaces. Oh, wait, wait, wait, wait.
21:42
The question is if it's addressed in the newer version and through this editor. What did you use? Did you use the BoundlessQGIS plugin or did you just use a save as SLD? No, the name spaces are fine. GeoServer supports both SLD 1.0 and SLD 1.1.
22:01
The problem is that older version of QGIS, such as QGIS 2, sometimes exported XML, which was not even valid XML. So unbalanced tags or tags which were in places that were not supposed to be. That has been fixed. However, QGIS exports SLD 1.1 and within the limits
22:22
of our tests, GeoServer understands it. There are a number of symbology elements that don't come through. Much of the advanced symbology doesn't come through, but basic styles do. The idea is that you normally learn SLD anyways and then you un-tune the result as necessary.
22:46
Kevin. Thanks. Can you apply MBStyles to normal vector layers or only to vector tiles?
23:01
No, the idea is that MBStyles was created so that you can do Mapbox vector tiles rendering on the client side, but if you need to fall back on pure GC protocols because vector tiles is not part of that picture, then you can and you can generate PNGs on the server side.
23:22
So the idea is that you use the same style on the client side and the server side and GeoServer will render the PNGs if you need them. Because I've tried to use MBStyles with GeoServer vector tiles. Now I couldn't get it to work. I never tried it myself.
23:42
Okay. Maybe this is a longer topic. We use the vector tiles, but we use them in open layers and the styles where SLD is client side. We did it in the OGC vector tiles pilot and there is an engineering report you can read about the activity.
24:01
Any more questions? Okay. Andrea, thank you very much.