What's new in Geoserver
2.17.0?
Andrea Aime
GeoSolutions
Quick overview
GeoServer 2.17.0
⚫ Released April 21st 2020 along with GeoTools 23.0
⚫ First release of the 2.17.x series
⚫ 2.17.x get 5 more releases
⚫ In "stable status" until September 2020, with some new features getting
backported
⚫ In "maintenance" status until March 2021, mostly with bug fixes
⚫ Can run on Java 8 or Java 11
GeoServer 2.17.0 - extensions
GeoServer 2.17.0 - community
https://build.geoserver.org/geoserver/2.17.x/community-latest/
Map rendering news
Mapbox GL Styles plugin
⚫ Can apply Mapbox GL styles server side
⚫ Graduated from community to extension status
⚫ Use cases:
⚫ Re-use existing Mapbox GL styles on the server side
⚫ Edit styles with external editor (e.g., Maputnik)
⚫ Setup a hybrid rendering solution
WMTS/PNG Classic OGC
client
GeoServer
WMTS/MVT
Mapbox
client
Mapbox
Data GL
Mapbox GL Styles plugin
⚫ Received significant QA work, 18 tickets resolved
⚫ Increased rendering fidelity (e.g. better match of
zoom related functions, improved font matching)
⚫ Increased behavior match (e.g. icons and labels
showing up together, or disappearing together)
Mapbox GL Styles plugin
⚫ Example rendering OpenMapTiles GL Bright
Map engine improvements
⚫ The Mapbox GL work required new functionality,
made available in all style languages.
⚫ Other functionalities added as well, independent
of the Mapbox GL work
⚫ In particular:
⚫ Background fill
⚫ Associate symbol with label, make them show either together, or
none
⚫ Automatic font shrinking to fit labels in polygons
⚫ Drape symbol along a line (vs just repeating it)
Background fill
⚫ Specify a "fill" at the SLD UserStyle level, fills the
background of the map
Offset label shield
⚫ Label shield functionality allows to center a label
and a background graphic.
⚫ Meant to be used for road shields
⚫ New "graphicPlacement" vendor option
⚫ "label" centers with the label
⚫ "independent" centers with the original point +
offset/anchor
⚫ Allows to setup point/label combos that are
stacked, and yet display as a single entity
Offset label shield
Label/icon disappearing due to
conflict resolution, road names
having higher priority
<VendorOption
name="graphicPlacement">
independent
</VendorOption>
Auto-shrink polygon labels
⚫ Make an effort to fit labels inside polygons
⚫ Shrink them down to a min target size, rather
than making them overflow or disappear
Auto-shrink polygon labels
<TextSymbolizer>
<Label>
<ogc:PropertyName>label</ogc:PropertyName>
</Label>
<Font>
<CssParameter name="font-family">Bitstream Vera Sans</CssParameter>
<CssParameter name="font-size">16</CssParameter>
</Font>
<LabelPlacement>
<PointPlacement>
<AnchorPoint>
<AnchorPointX>0.5</AnchorPointX>
<AnchorPointY>0.5</AnchorPointY>
</AnchorPoint>
</PointPlacement>
</LabelPlacement>
<VendorOption name="fontShrinkSizeMin">6</VendorOption>
<VendorOption name="goodnessOfFit">1</VendorOption>
</TextSymbolizer>
Drape line symbol along a line
⚫ LineSybolizer allow to repeat a symbol along a line
⚫ The result is normally dis-continuous at line
vertices
markAlongLine=true markAlongLine=false
Drape line symbol along a line
<?xml version="1.0"?>
<LineSymbolizer>
<Stroke>
<GraphicStroke>
<Graphic>
<Mark>
<WellKnownName>
wkt://LINESTRING (0 0, 0 -0.5, 0.5 -0.5, 0.5 0.5, 1 0.5, 1 0)
</WellKnownName>
<Stroke>
<CssParameter name="stroke">0xFF0000
</CssParameter>
<CssParameter name="stroke-width">2</CssParameter>
<CssParameter name="stroke-linecap">round</CssParameter>
</Stroke>
</Mark>
<Size>20</Size>
</Graphic>
</GraphicStroke>
</Stroke>
<VendorOption name="markAlongLine">true</VendorOption>
</LineSymbolizer>
Data sources and formats
Mbtiles + Vector tiles data source
⚫ A MBTiles file is a SQLite tile storage
⚫ One main table called "tiles"
⚫ One support table called "metadata"
⚫ Limited to the web Mercator tile matrix set
CREATE TABLE tiles (zoom_level integer, tile_column
integer, tile_row integer, tile_data blob);
CREATE TABLE metadata (name text, value text);
⚫ Tiles can be filled with images, but also with
Mapbox Vector Tiles (MVT)
⚫ The metadata table provides, among others, a
schema for them
MBTiles + Vector tiles data source
⚫ Multiple layers contained in a single tile
⚫ Polygons/lines split among tiles
⚫ Clients typically
don't stitch back
data (expensive)
⚫ Each tile contains a
buffer of extra
data around to
avoid rendering
artifacts
https://blog.cyclemap.link/2020-01-25-tilebuffer/
MBTiles + Vector tiles data source
⚫ The store provides access to the layers separately
(usual data model for GeoServer)
⚫ Rendering OpenMapTiles data + MB GL Styles
WMS cascading improved
⚫ Choose which remote
styles to use and expose
⚫ Choose format used for
cascading
⚫ Limit cascading to a scale
range and declared
BBOX
JSON-LD community module
⚫ Generate JSON-LD via templates
{
"@context": {
"gsp": "http://www.opengis.net/ont/geosparql#",
"sf": "http://www.opengis.net/ont/sf#",
"schema": "https://schema.org/",
"dc": "http://purl.org/dc/terms/",
"Feature": "gsp:Feature",
"FeatureCollection": "schema:Collection",
"Point": "sf:Point",
"wkt": "gsp:asWKT",
"features": {
"@container": "@set",
"@id": "schema:hasPart"
},
"geometry": "sf:geometry",
"description": "dc:description",
"title": "dc:title",
"name": "schema:name"
},
"type": "FeatureCollection",
"features": [
{
"$source": "gsml:MappedFeature"
},
→ Continued in next slide
JSON-LD community module
{
"@id": "${@id}",
"@type": [
"Feature",
"gsml:MappedFeature",
"http://vocabulary.odm2.org/samplingfeaturetype/mappedFeature"
],
"name": "${gml:name}",
"gsml:positionalAccuracy": {
"type": "gsml:CGI_NumericValue",
"value": "${gsml:positionalAccuracy/gsml:CGI_NumericValue/gsml:principalValue}"
},
"gsml:GeologicUnit": {
"$source": "gsml:specification/gsml:GeologicUnit",
"@id": "${@id}",
"description": "${gml:description}",
"gsml:geologicUnitType": "urn:ogc:def:nil:OGC::unknown",
"gsml:composition": [
{
"$source": "gsml:composition"
},
{
"gsml:compositionPart": [
{
"$source": "gsml:CompositionPart"
},
{
"gsml:role": {
"value": "${gsml:role}",
"@codeSpace": "urn:cgi:classifierScheme:Example:CompositionPartRole"
},
……….
Service news
OGC API – Marching on!
⚫ The OGC API community
modules keep
improving:
⚫ Updated OGC API -
Features API to latest
spec
⚫ Added filtering and
CRS extensions
⚫ OGC API – Tiles
⚫ OGC API – Styles
FlatGeoBuf community module
⚫ FlatGeoBuf is "a performant binary encoding for
geographic data based on flatbuffers …"
⚫ WFS (OGC API – Features) output format
⚫ New community module
⚫ Performance comparison, shapefile as reference
GeoWebCache
Faster startup
⚫ 30% faster GWC layer loading during startup
⚫ Improved CPU consumption
⚫ Test loading 1 million layers, with 1 million
cached layers associated, over the past releases
Version Released Startup GWC_startup
2.14.4 2019-06-13 9m 5s 39s
2.15.0 2019-02-27 <killed after 2 hours>
2.15.2 2019-06-28 6m 45s 40s
2.16.0 2019-09-18 6m 05s 34s
2.16.2 2020-01-20 6m 45s 34s
2.17.0 2020-04-19 6m 33s 22s
Data courtesy of Gabriel Roldan
Faster tile layer listing
⚫ The tile layer page could get pretty slow
⚫ Sped up by orders of magnitude in 2.17.0
Configure XYZ layout on disk
⚫ GWC disk layout is optimized to keep directory
listings short, but cannot be used to setup a
static tile cache
⚫ In 2.17.0 one can create
a ZYX/Z(-Y)X layout,
seed it, and move to
static file serving
More tolerant seed
⚫ Traditionally GWC seeding threads would stop at
the first map building error encountered. Now
tolerance can be configured on a per job basis.
Configuration improvements
Resource browser extension
⚫ Access contents of the data directory directly
from the GUI
⚫ Useful for remote servers, mandatory if one is
not storing the config on the file system
Edit security from resource pages
⚫ Alternative focus on the single resource, rather
than the full set of security rules
Track last resource change
⚫ Ever wondered if
"something
changed"?
⚫ Now you can check.
Custom dimensions for vector layers
⚫ WMS dimension
⚫ Time
⚫ Elevation
⚫ Custom
⚫ Custom used to be
supported by raster data
only
⚫ Now supported by vector
data too
Enabled/advertised for Groups
⚫ Enabled/advertised controls were available for
layers only
⚫ Now available for layer groups too
That’s all!
https://www.geosolutionsgroup.com/contacts/