Share
Introduction to GeoServer - GeoInt 2025
The training provides an introduction to one of the most complete and most widely used open-source products for the geospatial world, GeoServer. For those wishing to build a spatial data infrastructure using open-source products or those simply looking to explore what is out there, we will provide an overview of the GeoServer capabilities in terms of data management, publishing, and dissemination. Topics covered are as follows:
- GeoServer basic concepts
- Guided tour of GeoServer functionalities
- Adding data to GeoServer
- Styling data with GeoServer
- Disseminating data with GeoServer
- Modern GIS with GeoServer: STAC, OGC API, and cloud native formats
Learning Objectives: At the end of the training, attendees will be able to grasp the main functionalities of GeoServer like how to load, configure, and style vector and raster data and to create maps and services with them. This would give trainees the basic skills to work with GeoServer to create spatial platforms.
Simone Giannecchini PRO
Transcript
121 slides
-
Simone Giannecchini Founder & Director [email protected] We’d like to thank
Jody Garnett for original material contribs This presentation is brought to you by GeoSolutions 3 Enterprise Support Services Deployment Subscription Professional Training Customized Solutions GeoSolutions robust, cost-effective solutions leveraging best-of-breed Open Source products. -
GeoServer WFS OGC API Features WMS OGC API Maps PostGIS
Oracle H2 DB2 SQL Server GeoPackage SQL Server MySql Spatialite MongoDB Shapefile GML CSV Properties ---------- ---------- --------- ---------- ---------- ---------- --------- ---------- ---------- ---------- --------- ---------- WMS WMTS WFS PNG, GIF JPEG TIFF, GeoTIFF SVG, PDF KML/KMZ Shapefile GML2 GML3 GeoPackage GeoRSS GeoJSON CSV/XLS Raw vector data Servers Styled maps DBMS Vector files WCS OGC API Coverages GeoTIFF WMS ArcGrid Img+world, Mosaic, MrSID JPEG 2000 ECW,Pyramid, Oracle GeoRaster, PostGIS Raster, NetCDF Raster files Raw raster data GeoTIFF ArcGrid Img+World WMTS, TMS, WMS-C OGC API Tiles KML superoverlays Google maps tiles OGC tiles OSGEO tiles KML WPS CSW What is GeoServer? -
September 2025 March 2024 2.24.x YOU ARE HERE 2.25.x September
2024 2.25.x March 2025 2.26.x 2.26.x 2.26.x Release Model -
Governance Model Copyright & Stewardship • GeoServer is an Open
Source Geospatial Foundation (OSGeo) project • All source code licensed under the GNU GPL 2 • OSGeo holds the project trademark and copyright • GeoServer is FREE Contribution Workflow • Issue Tracking: Feature requests and bugs managed via GeoServer JIRA. • Development: Fork or clone the GeoServer GitHub repo; develop on feature branches. • Review & Testing: Submit pull requests; automated builds on CI; peer review by committers. • Committing: Approved PRs merged by committers with write access. • Attribution: Contributor names recorded in Git history and release notes. -
Governance Model Decision-Making Process • Community Discussion: Proposals raised on
[email protected] mailing list • Consensus Building: Open debate; input from users, contributors, and committers • PSC Oversight: GeoServer Project Steering Committee (PSC) ratifies major changes • Release Planning: Timed releases managed by release lead; feature freeze and voting Roles & Responsibilities • Users: Report issues, request features, test snapshots • Contributors: Submit code, documentation, and tests • Committers: Maintain codebase, review PRs, make release decisions • PSC Members: Guide project direction, enforce policies, represent OSGeo -
Vulnerability Reporting and Management • Responsible Disclosure: GeoServer maintains a
documented security policy (SECURITY.md on GitHub) and designated [email protected] for responsible disclosure • Security Working Group: the GeoServer Security Working Group (SWG) meets regularly to triage issues, set priorities, and coordinate response efforts • CVE Tracking & Advisories: All confirmed vulnerabilities are assigned a CVE and published via OSGeo Security Advisories and the GeoServer website • Automated Scanning: Routine scans using tools to highlight outdated or vulnerable libraries • Patch & Release Process: Critical fixes are backported to active branches; security releases follow a patch cycle with clear upgrade instructions • Code Review & Testing: Security-focused code reviews, unit tests, and integration tests (e.g., WFS SQL injection checks) are enforced before merging • Community & Audit: Periodic third-party audits and community-driven pentests help uncover issues; contributors are encouraged to report potential flaws -
Commercial Support • Global Service Providers: Multiple companies worldwide offer
professional GeoServer support, including GeoSolutions, GeoCat, Camp2Camp and many others • Services Offered: Ranging from training, custom development, performance tuning, to SLA- backed maintenance and 24/7 monitoring • Regional Presence: Providers span Europe, North America, South America, Asia, and Oceania, ensuring local expertise and time-zone-aligned support • Enterprise Guarantees: Contractual service levels, dedicated account management, and compliance with corporate security policies • Ecosystem Confidence: Commercial backing demonstrates that GeoServer is an industry-grade platform, not just a hobby project • Selected Users: NOAA, EUMETSAT, EMSA, NRL, Sandia Laboratories, NRCAN, Deutsche Bahn, SwissRE, WoodMac, MunichRE, ECMWF, ESA, DLR, IGN, BRGM, MassGIS, Deutsche Telecom, SCNF, UN FAO, NYC DOITT, E-GEOS, Maxar, etc… -
Bit of safety: backup and restore extension • Save the
configuration to a zip file (not the data!) • Restore later, in the same or different environment • UI to run backup and restore • Async operations • REST Interface • During backup the configuration is read only • During restore it’s fully locked • Support “dry run” to for errors prior to restore -
Everybody loves curves • Read curved geometries from Oracle and
PostGIS, paint them, GML output them, linearize everywhere else -
SQL-Views GeoServer WMS/WFS ... DB2 Any DB ... Run query
as layer source -
Parametric SQL Views GeoServer WMS/WFS ... DBMS Any DB ...
Inject params from request Run query as layer source -
Run of the mill Old but gold! Simple Mosaic ArcGrid
Fully configured Mosaic (custom schemas, attributes, filtering, sorting, custom storage) -
Going native GDAL 3.x (NITF files) Fast JPEG2000 libdeflate Read/Write
TIFFs Write JPEGs maps Read/Write TIFFs NetCDF GrIB -
Reproject with confidence GeoServer handles dateline, projection limits, high accuracy
projection grids, and so on Dateline wrap Cut on UTM Cut on polar stereographic Densify for smooth reprojection -
Only want to play with MVT? Ok! • Extension for
publishing vector tiles • Great solution for High DPI Screens • Client side styling • Use GeoServer for “MapLibre” clients • Configure once for Vector tiles with OGC WMS fallback -
YSLD MapBox GL name: style_example title: An example of YSLD
styling abstract: Used in the User Manual of GeoServer feature-styles: - rules: - name: all title: Every feature will be styled this way symbolizers: - polygon: fill-color: '#808080' fill-opacity: 0.5 stroke-color: '#000000' stroke-opacity: 0.75 { "version": 8, "layers": [ { "id": "default_point", "type": "circle", "source": "test-source", "source-layer": "place_label", "layout": { "visibility": "visible" }, "paint": { "circle-color": "#FF0000", "circle-opacity": 1, "circle-radius": 6, "circle-stroke-opacity": 0, } } ] } -
Style several layers together into a single map Great for
SLD and YSLD Use with MapBox style to define once for GeoServer and OpenLayers GetMap SLD=”<URL> Add Style Group... -
Making your Mark windbarbs:// square circle triangle star square x
“standard” shape:// extshape:// wkt:// ttf:// -
GeoWebCache • Tile caching application • Can cache tiles in
PNG/JPG/KML/MVT/GeoJSON • Can store tiles in file system/SQLite/S3/Azure • Supports WMS-C, TMS, WMTS -
Runs integrated in GeoServer • Configuration integration ◦ Configure layer
once ◦ Setup via GUI • Security integration ◦ Configure security once ◦ Limited checks (only layer access, no attributes, areas and alphanumeric filters) • Event integration ◦ Change styles, tiles dropped ◦ WFS-T transaction, tiles dropped • Service integration ◦ Direct integration ◦ Intercept tiled requests from WMS and uses cache for them -
WFS, WCS, OGC API Features and Coverages • Download vector
data • Filter, reproject, join, page • Download raster data • WCS 2.0, a protocol humans can understand -
CQL POP_EST <= 5000000 AND POP_EST >100000 A lightweight “domain
specific language”: • CQL - is a standard from OGC Catalog • E-CQL - extends this basic concept to do everything Filter can do In GeoServer CQL can filter raster data too… in particular, mosaic images with associated attributes -
Editing data since 2003 (the original superpower) WFS-T PostGIS Oracle
Shapefile SQLServer ... -
INSPIRE <inspire_vs:ExtendedCapabilities> <inspire_common:MetadataUrl xsi:type="inspire_common:resourceLocatorType"> <inspire_common:URL/> <inspire_common:MediaType>application/vnd.iso.19139+xml</inspire_common:MediaType> </inspire_common:MetadataUrl> <inspire_common:SupportedLanguages xsi:type="inspire_common:supportedLanguagesType"> <inspire_common:DefaultLanguage>
<inspire_common:Language>eng</inspire_common:Language> </inspire_common:DefaultLanguage> <inspire_common:SupportedLanguage> <inspire_common:Language>eng</inspire_common:Language> </inspire_common:SupportedLanguage> </inspire_common:SupportedLanguages> <inspire_common:ResponseLanguage> <inspire_common:Language>eng</inspire_common:Language> </inspire_common:ResponseLanguage> </inspire_vs:ExtendedCapabilities> -
Complex GML making your eyes bleed? { "type": "FeatureCollection", "features":
[ { "type": "Feature", "id": "0001000001", "geometry": { "type": "Point", "coordinates": [51.0684, 1.4298] }, "properties": { "@featureType": "Borehole", "identifier": { "value": "BSS000AAAA", "@codeSpace": "http://www.ietf.org/rfc/rfc2616" }, "bholeHeadworks": [ { "type": "Feature", "geometry": { "type": "Point", "coordinates": [51.0684, 1.4298] }, "properties": { "@featureType": "BoreCollar", "collarElevation": { "value": -32, • Features templating to the rescue • Your 2020 nighmares will be made of complex GeoJSON instead! -
Execute all the things • BBOX for filtered datasets •
Aggregation processes, provides datasets for building charts (group and count) • Clip and ship • Build animations -
Jiffle and rendering transformations nir = src[7]; vir = src[3];
dest = (nir-vir)/(nir+vir); Map Algebra at your fingertips On the fly, or batch with WPS -
Extract wind barbs from 2 bands raster data <FeatureTypeStyle> <Transformation>
<ogc:Function name="ras:RasterAsPointCollection"> <ogc:Function name="parameter"> <ogc:Literal>data</ogc:Literal> </ogc:Function> <<ogc:Function name="parameter"> <ogc:Literal>emisphere</ogc:Literal> <ogc:Literal>True</ogc:Literal> </ogc:Function> <ogc:Function name="parameter"> <ogc:Literal>interpolation</ogc:Literal> <ogc:Literal>InterpolationBilinear</ogc:Literal> </ogc:Function> <ogc:Function name="parameter"> <ogc:Literal>scale</ogc:Literal> <ogc:Literal>8</ogc:Literal> </ogc:Function> </ogc:Function> </Transformation> -
Extract wind barbs from 2 bands raster data <Mark> <WellKnownName>
windbarbs://default( <ogc:Function name="sqrt"> <ogc:Add> <ogc:Mul> <ogc:PropertyName>u</ogc:PropertyName> <ogc:PropertyName>u</ogc:PropertyName> </ogc:Mul> <ogc:Mul> <ogc:PropertyName>v</ogc:PropertyName> <ogc:PropertyName>v</ogc:PropertyName> </ogc:Mul> </ogc:Add> </ogc:Function> )[m/s]?emisphere= <ogc:PropertyName>emisphere</ogc:PropertyName> </WellKnownName> <Stroke> <CssParameter name="stroke">000000</CssParameter> <CssParameter name="stroke-width">1</CssParameter> </Stroke> </Mark> -
HeatMap Transform Heatmaps title: Heatmap feature-styles: - transform: name: vec:Heatmap
params: weightAttr: pop2000 radiusPixels: 100 pixelsPerCell: 10 rules: - symbolizers: - raster: opacity: 0.6 color-map: type: ramp entries: - ['#FFFFFF',0,0.0,nodata] - ['#4444FF',1,0.1,nodata] - ['#FF0000',1,0.5,values] - ['#FFFF00',1,1.0,values] -
Demo Server • Demo server redeployed multiple times a day
• Occasionally broken, don’t rely on it https://gs-main.geosolutionsgroup.com/geoserver/ -
OGC APIs - OpenAPI • Fresh take on spatial data
interoperability • Based on OpenAPI/RESTful concepts • Resource/representation • HTTP verbs • Small core, a basic service can be implemented in a matter of days • Extensions for every other functionality -
Features API Core • In addition to OAPI core: •
/collection/{collectionId}/items • /collection/{collectionId}/items/{itemId} • Only supported CRS are • CRS84 (WGS84 lon/lat) • CRS84h (WGS84 lon/lat/height) • Schema not required, features can be anything: • Simple • Complex • Heterogeneous • “describeBy” can link to schema (optional) -
Part 2 - CRS by Reference •OGC API - Features,
part 2, Coordinate Reference Systems by Reference •Info about storage CRS •BBOX with CRS •Output reprojection •CRS information as a response header (does not rely on format native ability) •Compliant, CITE tests pass { "crs": [ "http://www.opengis.net/def/crs/OGC/1.3/CRS84", "http://www.opengis.net/def/crs/EPSG/0/4326", "http://www.opengis.net/def/crs/EPSG/0/3857" ], "storageCrs": "http://www.opengis.net/def/crs/EPSG/0/26713" } -
•Queryables: properties that can be used for filtering • May
be a subset of the actual attributes • May not even match the attributes (e..g, like “anyText” in CSW) •filter: the filter specification •filter-lang: the language used filter-crs: the CRS for the geometries used in the filter Part 3 - Filtering (finalized 2024-07-26) -
CQL 2 eo:cloud_cover BETWEEN 0.1 AND 0.2 AND landsat:wrs_row=28 AND
landsat:wrs_path=203 &filter-lang=cql2-text { "and": [ { "between": [ {"property": "eo:cloud_cover"}, 0.1, 0.2 ] }, { "=": [{"property": "landsat:wrs_row"},28] }, { "=": [{"property": "landsat:wrs_path"},203] } ] } &filter-lang=cql2-json -
Sorting •Not part of OGC API - Features •Discussed in
issue 157 •Syntax borrowed from OGC API - Records /items?sortby=name,-dateOfBirth -
OGC API - Maps • Final specification available as of
2024-08-09 (GeoServer implements earlier version) • Building block to produce maps, can be attached to collections, but in general, to any resource that can be mapped E.g., could be a OGC API - process result, that has a “map” sub-resource • Adds a notion of a “style”, listed in collection metadata • Adds a “map” resource -
OGC API - Maps • Fetches a map in the
requested format • Params: width, height, bbox, crs, …. • Unlike WMS GetMap, all params are optional → similar to the GeoServer WMS reflector .../ogc/maps/v1 /collections/topp:states/styles/population/map?f=image/png -
“info” resource (GS specific) Results for FeatureType 'http://www.openplans.org/topp:state s': ------------------------------------
-------- the_geom = [GEOMETRY (MultiPolygon) with 276 points] STATE_NAME = Washington STATE_FIPS = 53 SUB_REGION = Pacific STATE_ABBR = WA LAND_KM = 172447.205 WATER_KM = 12226.63 PERSONS = 4866692.0 FAMILIES = 1264934.0 HOUSHOLD = 1872431.0 MALE = 2413747.0 FEMALE = 2452945.0 WORKERS = 1830031.0 DRVALONE = 1700872.0 CARPOOL = 282240.0 PUBTRANS = 104403.0 EMPLOYED = 2293961.0 UNEMPLOY = 139216.0 ------------------------------------ -------- •Not part of the standard (used to be in a previous draft) •Still useful (considers scale deps, filters, symbology) •Feature info at given location •Params: “i/j” mandatory, others same as “map” .../ogc/maps/v1/ collections/topp:states/styles/populatio n/map/info? f=text/plain&i=50&j=10 -
OGC API - Tiles • Finalized specification https://docs.ogc.org/is/20-057/20- 057.html •
GeoServer: full implementation based on earlier draft • Adds resources for tiles, tile matrix sets, styles ogc/tiles/collections/topp%3Astates/styles/ population/map/tiles/ WebMercatorQuad/{tileMatrix}/{tileRow}/ {tileCol}?f=image%2Fpng -
OGC API - Styles The style identifier Basic metadata info
(yeah, I did not fill it yet, no love lost for metadata!) Access to style source, native (CSS) and converted (SLD) when possible List of layers involved in the style (could have many) and attributes used in each (style editor can use them to check compatibility with available data) -
OGC APIs - Coverage extraction • Collection as a single
coverage • bbox • datetime • Partial implementation from OGC code sprint ...collections/nurc:Img_Sample/coverage? f=image%2Fpng& bbox=-130,20,-100,40 or &subset=Lat(20:40),Long(-90:-70) -
Other interesting bits • Tiled coverages: scalable access to raw
data • Scenes: enumerate, filter, describe sub-images • Implementation? Looking for sponsors -
OGC API Processes • New community module exposing WPS functionality
via OGC APIs • Asynchronous execution • POST JSON execution (core) and KVP execution (1.1 spec draft) • Missing bits • Process chaining, AKA “workflows” draft extension -
OGC API Processes example (Describe, POST and GET) http://localhost:8080/geoserver/ogc/processes/v1/processes/gs:GetCoveragesValue/execution?name=w49060_s10,N44E0 10&x=599851&y=4901966&crs=EPSG:32632
{ "inputs": { "name": "w49060_s10,N44E010", "x": 599851, "y": 4901966, "crs": “EPSG:32632” } } { "values": [2250] } GET POST -
Vector mosaicking store • Useful to handle thousands of files
with similar structure • Database used only to index them • Much cheaper than storing everything in a database (on cloud) • Not suitable if on the fly aggregations are needed • Great if the end user application mostly pulls a few files (one?) at a time -
STAC API • Useful to handle thousands of files with
similar structure • Database used only to index them • Much cheaper than storing everything in a database (on cloud) • Not suitable if on the fly aggregations are needed • Great if the end user application mostly pulls a few files (one?) at a time -
External STAC API as index • Community module for STAC
API store • Integrates well with image mosaic • Tricky issues: each system uses different auth mechanisms to actually download data -
Precision Agriculture • Satellite imagery, index calculation, drone data, IOT
data, you name it… • Terabytes of imagery, hundreds of millions of vector records -
NOAA nowCOAST • Near Real Time Weather Data + alerts
+ hazards • Radar + satellites + Model • GeoServer Cluster + PostgreSQL in AWS -
DLR (German Space Agency) GeoWebServices • Sentinel, AVHRR, MetOp GOME,
TerrasarX, RapidEye, other global maps • GeoServer Cluster • WMS service with time dimension + WCS + direct download + STAC -
GeoServer & the cloud GeoServer is not cloud-native • It
was born when cloud meant this → • We can’t depend on any cloud provider GeoServer is cloud-ready • It is known to run in AWS, Azure, GCP, OpenShift, IBM Cloud, etc.. • It is known to run in K8s, Rancher • It can autoscale (CPU is the resource to look at) • It can use Object Storage (Tile Cache, COG, etc..) • Prefers compute intensive instances • Likes Containers • Likes Automation! (Azure Pipelines, Jenkins, etc..) Check resources on our youtube channel -
Use Case – EO Data at scale • Earth Observation
• Meteorological and Oceanographic data • Continuous data flow of vector and raster data -
• Cloud-ready GeoServer with dockerize microservices • From monolith to
individually deployable components within a microservices-based architecture • Functional decomposition by business capability • Each service (e.g., WMS) is available as a self-contained, individually deployable, and scalable microservice • Provide guidelines for proper dimensioning of services based on their resource needs and performance characteristics • Isolate services to ensure system continuity in the event of specific service unavailability • Implement per-service auto-scaling • Support continuous delivery workflows GeoServer Cloud -
COG • COG plugin • cog-http-plugin • cog-azure-plugin • cog-google-plugin
• cog-s3-plugin • Leverages COG structure • Reads header first • HTTP Range read of the tiles needed (coalesce nearby tiles into single read) • May get caching down the way (looking for sponsors!) -
FlatGeoBuf • FlatGeoBuf is a cloud-native, single file, compact and
fast vector data source • Community module • Now the fastest format for those use cases of • “I have a few million polygons/lines/points and really want to display them all at low scale” • Shapefile used to hold that crown • In the map, what seems pencil drawn, is actually millions of tiny polygons -
GeoParquet • GeoParquet is a single file, cloud native, column
oriented, read only, immutable storage for geographical information • New community module to read GeoParquet available in GeoServer 2.27+ • Flexible source • Local file • Directory of files • HTTP/S3 • Hierarchical Hive partitioning (mosaic like approach) • Efficient implementation • Filter pushdown • Attribute selection and geometry simplification https://guide.cloudnativegeo.org/geoparquet/ https://www.wherobots.ai/post/spatial-data-parquet-and-apache-sedona -
Authentication BASIC DIGEST LDAP and Active Directory Database Github Google
GeoNode OpenID connect X.509 J2EE AuthKey -
Authorization • Built-in • Simple • Layer based • Read/Write/Admin
• GeoFence • Sophisticated rules (“conditions on this layer while being accessed by WFS GetFeature) • Restrict access by attribute, alphanumeric filter, area -
Quality Assurance: JUnit (unit and integration tests) • Build with
Tests takes 25 mins • Build with Tests disabled takes 2 mins • Thousands of tests -
Quality Assurance: PR automatic checks • Static code checks ◦
PMD ◦ CheckStyle ◦ ErrorProne ◦ SortPom ◦ Deprecated checks • One failure above marks the build red -
Cost Free Free as in Beer: • Download now to
$0! • This weeks special 10% off $0!