GeoServer Blog
Master GeoServer WPS - Buffer & Intersection Analysis
GeoSpatial Techno is a startup focused on geospatial information that is providing e-learning courses to enhance the knowledge of geospatial information users, students, and other startups. The main approach of this startup is providing quality, valid specialized training in the field of geospatial information.
( YouTube | LinkedIn | Facebook | X )
Master GeoServer WPS - Essential Buffer & Intersection Analysis Techniques!
This blog post provides how to use the Buffer and Intersection analysis in the WPS Request Builder. The WPS Request Builder is a demo page used to try out the Web Processing Service (WPS) used to execute geospatial processes for transformation, summary and analysis.
If you want to access the complete tutorial, click on the link.
Introduction
Buffer analysis is a crucial process in Geographic Information Systems (GIS). It involves creating a zone around geographic features — such as points, lines, or polygons — to analyze spatial relationships and proximity. This type of analysis has various applications, including determining influence areas, assessing environmental impacts, and evaluating accessibility. It provides insights for decision-making in fields such as Urban planning, Natural resource management, and Emergency response planning.
In GeoServer, users can create buffer zones around geographic features by specifying the input geometries and the buffer distance. This functionality is part of the GeoServer WPS extension, which provides a standardized interface for various geospatial processing algorithms.
To create buffers in GeoServer, navigate to the Demos section and select the WPS Request Builder option. In the Choose Process section, type buffer to see a list of available buffer related process. As you can see, GeoServer has six such processes.
As mentioned in our previous blog post, the JTS and geo processes do not directly access to the GeoServer layers. Instead, these processes utilize external libraries, specifically the Java Topology Suite (JTS) and GeoTools.
JTS:buffer
- From the list, select JTS:buffer. This operation requires three inputs for execution:
Text,Reference, andSubProcess.
In the text mode, you need to enter the geometry data in a standard formats For this example, use the application/wkt as the input format, and enter the geometry data:
POINT(-100 50)
- Enter the buffer distance in the Distance textbox. This parameter defines the size of the buffer created around the input feature and is represented as a double data type. In this case, enter
0.1degrees, which is based on EPSG:4326 coordinate system.
Note: The distance value is mandatory and corresponds to the geometric units being used.
-
Choose your desired output format from the Process Outputs section. This enabled you to select the most appropriate format for your specific usecase or workflow. The result can be further processed, visualized, or used for additional spatial analysis. The available formats include: application/wkt , application/json.
-
Select the application/wkt format and press the Execute process in New Page button.
Now that you have executed the buffer operation, you can view the results. Navigate to WKT Map and enter the resulting geometries in the WKT textbox to visualize the buffer created around the specified point.

Go back to geoserver software to explain other parameters:
-
The quadrantSegments parameter in the JTS:buffer, is an optional parameter for shaping quarter-circle buffers. Increasing its value enhances the buffer’s smoothness and circularity but also raises vertex count, which can affect performance.
-
The default is 8 segments, which create 32 sides that are more circular than the others. It’s important to balance precision with processing efficiency, as a higher value improves curve quality but increases computational complexity.
-
Set the distance buffer to
0.11and quadrantSegments to3, then press the Execute process in New page. Now see the resulting shape. Note that the distance value is measured in units provided by coordinate reference system (not in pixels).
As you can see, the result is somewhat circular due to the smaller number of sides.

Go back to geoserver again to explain the last parameter, capStyle.
-
The capStyle is an optional parameter that specifies the type of cap style used at the ends of buffer polygons. There are three available options: Round, Flat, and Square.
- Round: This is the default option, which creates a rounded appearance at the ends of a buffer around a line feature.
- Flat: This option creates clean and straight ends.
- Square: This option creates a more pronounced squared-off effect.
By selecting the appropriate cap style, you can customize the appearance of your buffer areas according to your visualization needs.
- To use the capStyle option, enter the geometry data in the application/wkt format.
- Geometry data: LINESTRING (-101.9 37.36, -101.92 37.7, -100.9 37.46)
- Distance value: 0.01
Press the Execute process in New page button. Repeat this process for the Flat and Square cap styles and then view the results.

GS:BufferFeatureCollection
This function utilizes the GeoTools library to process feature collections by generating buffered geometries around each feature. Users can specify the buffer distance as either a fixed value or dynamically based on a specific field’s value.
The first input parameter is the InputFeatureCollection, which can accept four types of input: Text, Reference, subprocess, and vector_layer. The default option is the vector layer.
For this example, we will use the archsites layer from GeoServer. Select this layer from the Choose one drop-down menu.
We will first apply a fixed value for the buffer distance parameter, followed by using a specific field to dynamically adjust the buffer distance.
Fixed Value Buffering
- Enter a distance value suited to the coordinate reference system (CRS) of the layer. As the
archsiteslayer uses the UTM crs, you can set a value like20.
Note: Filling this parameter is mandatory.
-
Once the input features and distance have been defined, choose the output format for displaying the results of the buffering operation.
-
Select the application/zip format from the Process Outputs section, and then press the Execute process in New Page button.
After the process is complete, open the result file using QGIS software. You will see that buffer areas of 20 meters have been created around each feature.

Dynamic Value Buffering
-
To use a specific field for buffer distance, first, enter a
zerovalue in the mandatory distance box, then specify the attribute name that contains numerical values for the buffer distances. -
In this example, we will use the
catattribute. -
Again, choose the application/zip mime-type for the output file format and press the Execute process in New Page button.
After processing is complete, add the resulting file to QGIS software. As you can see the buffer areas around each feature have different distances based on the values found in the cat field.
Intersection analysis
Intersection analysis is a crucial spatial technique used in GIS to explore and understand the relationships between various geographic features or datasets. This method focuses on examining how different data layers overlap and interact, which provides valuable insights for decision-making processes in areas such as urban planning, environmental management, and resource allocation.
In GeoServer, Intersection analysis facilitates the identification of overlapping areas between features from two distinct datasets. This operation can be efficiently implemented through the WPS request builder, making spatial analysis both effective and user-friendly.
To carry out an intersection analysis, select gs:IntersectionFeatureCollection from the Choose process menu.
-
The first and second feature collections, serve as the main input features and are considered mandatory parameters for this process. Other parameters are optional.
-
For this example, choose
sf:streamsas the first feature collection andsf:restrictedas the second feature collection. -
Select the application/json format from the Process Outputs section, then press the Execute process in New Page button.
After execution, you can view the results by navigating to geojson.io and entering the resulting geometries in the textbox provided.

Go back to geoserver software to explain other parameters:
The intersection analysis also allows you to specify which attributes from the input feature collections should be retained in the output. If this selection is not made, all fields from each layer will be included by default.
- In this example, enter
labelto retain this specific field from the first layer.
IntersectionMode: This parameter allows users to specify how to handle the intersection of two feature collections. By choosing between the Intersection, First, and Second options, users can tailor the results to fit their specific spatial analysis needs.
Let’s describe each of them:
-
Intersection: This is the default option, which includes only the features that geometrically overlap between the two input collections. Only areas where both inputs intersect will be represented in the output.
-
First: This mode filters the first feature collection by retaining only those features that intersect with any feature from the second collection. Features in the first collection without any intersection will be excluded from the output.
-
Second: This mode outputs features from the second collection, retaining only those that intersect with any feature from the first collection.
-
For this example, we select the First option in the intersectionMode parameter.
To view the results and incorporate the resulting geometries into QGIS, press the Execute process in New Page button again. The output will consist only the streams_label field from the first layer.

This means that the output features will only include those from the first collection that intersect with features in the second collection.
Additionally, the analysis includes two boolean options that determine if additional area attributes are included in the output:
-
percentagesEnabled: When set to true, this option includes attributes indicating the percentage of each feature’s area relative to the total area of each respective input feature collection. By default, this option is set to false.
-
areasEnabled: Similar to the percentagesEnabled mode, this option when enabled or set to true, includes attributes representing the area of each feature in the intersection. Its default setting is also false.
By carefully defining the parameters and choosing the appropriate options, users can effectively perform intersection analysis in GeoServer and generate meaningful spatial insights.
In this session, how to use the Buffer and Intersection analysis in the WPS Request Builder. To access the full tutorial, click on this link.
GeoServer 2.28.1 Release
GeoServer 2.28.1 release is now available with downloads (bin, war, windows), along with docs and extensions.
This is a stable release of GeoServer recommended for production use. GeoServer 2.28.1 is made in conjunction with GeoTools 34.1, and GeoWebCache 1.28.1.
Thanks to Andrea Aime for making this release.
Security Considerations
This release addresses security vulnerabilities and is considered an important upgrade for production systems.
- GEOS-11921 - CVE-2025-21621 - Reflected Cross-Site Scripting (XSS) vulnerability in WMS GetFeatureInfo HTML format (Moderate)
- GEOS-11922 - CVE-2025-58360 - Unauthenticated XXE via WMS GetMap (High)
The use of the CVE system allows the GeoServer team to reach a wider audience than blog posts.
See project security policy for more information on how security vulnerabilities are managed.
Release notes
Improvement:
- GEOS-11950 WMS cascade: fully respect ‘restrict to layer bounds’ flag on GetMap requests
Bug:
- GEOS-4159 Layer from SQL view feature type details not refreshing after editing sql query (and refreshing attributes there)
- GEOS-11930 OGC-API extension breaks security REST API
- GEOS-11963 BlobStorePage breaks when failing to save a blob store configuration
- GEOS-11965 KMZ export incorrectly references remote icon URLs instead of embedding them in the KMZ archive
-
GEOS-11981 POST /security/authproviders 400: Unsupported className - GEOS-11988 Fix bug: preserve metaTilingThreads=0 in saneConfig()
Task:
- GEOS-11898 GeoFence: issues in evaluation of virtual layer services access
- GEOS-11962 Run CITE tests against Java 17, 21 and 25
- GEOS-11987 ImageN 0.9.1 migration requires renaming of registryFile.jai to registryFile.imagen
For the complete list see 2.28.1 release notes.
Community Updates
Community module development:
- GEOS-11959 New community module GeoWebCache Google Cloud Storage
- GEOS-11961 OSEO layer management: Support creation of image mosaics in CRS other than 4326
- GEOS-11980 Add support for uploading a single parquet file to GeoServer via REST
- GEOS-11983 GSR /query fails with HTTP 500 when where parameter is empty
Community modules are shared as source code to encourage collaboration. If a topic being explored is of interest to you, please contact the module developer to offer assistance.
About GeoServer 2.28 Series
Additional information on GeoServer 2.28 series:
GeoServer 3 Sprint Update
GeoServer 3 is a major upgrade led by a consortium of Camptocamp, GeoSolutions, and GeoCat and backed by a successful crowdfunding activity.
This is a major investment in the future of GeoServer and we are pleased to provide a project update. The GeoServer 3 code sprint completed last week, and we have quite a list of accomplishments to share.

Milestone 1 Accomplished
With the release of GeoServer 2.28.0 earlier this month Milestone 1 is officially accomplished. Our goal for Milestone 1 was to clear the decks of as much work as possible before performing the big migration to Spring Framework 6. The key objectives met are:
-
Replace the image processing engine, updating from Java Advanced Imaging 1.1.3 to Eclipse ImageN 0.9.0 which was released for the occasion. This is a major technical accomplishment, years in the making, combining the Oracle donation of the JAI codebase with all the work done by GeoSolutions on JAI-Ext.
The Eclipse ImageN integration was completed for the release of GeoServer 2.28.0. This activity was directly sponsored by the Office of Public Works.
-
Java 17 LTS minimum, and related maven “bill-of-materials” improvements, making it easier to manage the vast quantity of updates planned for Milestone 2.
-
Replacement for GeoServer OAuth2 support with a new OAuth2 Open ID Connect module is available to try out today and has been tested (and documented) with Google, GitHub, Microsoft Azure and Keycloak authentication providers. A really nice accomplishment is integration testing with KeyCloak (using test containers) clearing the way for this to be a supported extension in the future. There of course remains work to do, with a list of functionalities to complete by the end of the project.
Milestone 1 was completed a few weeks behind schedule, and we are really happy with the result. Eclipse ImageN is now available to the public and included in GeoServer 2.28.0 for widespread use.
Milestone 2 Code Sprint
GeoSolutions hosted the Milestone 2 code sprint in mid October, arranging perfect weather 🌧️ for a productive indoor gathering.
Prior to the code sprint we performed a code-freeze across five projects, putting external work on hold to allow the team assembled in person to focus. With the path cleared OpenRewrite migrations were performed for JakartaEE, Spring 6.2, Spring Security 6.5, and Wicket 10.
This was followed by manual fixing to get each section to first compile, then pass tests, satisfy the quality assurance checks, and finally to run.
The initial steps went smoothly for ImageIO-Ext and GeoTools. The GeoTools migration took some time out to work on Elasticsearch testing, and updating the http client library to use the same version as the other projects.
For GeoServer careful work was required by the whole team, working module by module. Interesting challenges included:
- Changes made to the Spring Framework URL mapper, to identify which module is responsible for answering a request. Until this was addressed the entire application would compile but not function.
- Some OGC Standards use multi-part HTTP requests, and the Apache Common File Library used to separate out this content does not yet have a stable release for us to depend on.
- The Spring Security 6.5 Update was completed during the code Sprint. This activity was sponsored by the Office of Public Works.
The embedded web applications (GeoWebCache, MapFishPrint and GeoFence) took considerably more work. GeoWebCache in particular was deeply affected by the URL mapper changes, struggling to resolve workspaces and layers when integrated with GeoServer. GeoFence remains in progress and is scheduled to be addressed in Milestone 3.
The code sprint was very successful, it was really effective to have a team meet in person allowing modules to be worked on in parallel. This places the GeoServer 3 project on track and we are confident in meeting the community March release schedule.

Crowdfunding Thanks
We would like to thank all the organizations who have sponsored the GeoServer 3 Crowdfunding activity. We appreciate your trust and recognize your dedication to the GeoServer project.
GeoServer 3 is supported by the following organisation:
Individual donations: Abhijit Gujar, Hennessy Becerra, Ivana Ivanova, John Bryant, Jason Horning, Peter Smythe, Sajjadul Islam, Sebastiano Meier, Stefan Overkamp.
For more information visit the GeoServer 3 Crowdfunding page which provides an overview of the activity as a whole.
GeoServer 2.27.3 Release
GeoServer 2.27.3 release is now available with downloads (bin, war, windows), along with docs and extensions.
This is a maintenance release of GeoServer providing existing installations with minor updates and bug fixes. GeoServer 2.27.3 is made in conjunction with GeoTools 33.3, and GeoWebCache 1.27.3.
Thanks to Jody Garnett (GeoCat) for making this release.
Security Considerations
This release addresses security vulnerabilities and is an important upgrade for production systems.
See project security policy for more information on how security vulnerabilities are managed.
Upgrade instructions
Please take note of the Upgrade Instructions, specifically:
-
The global setting Unrestricted XML External Entity Resolution has been replaced with the
ENTITY_RESOLUTION_UNRESTRICTEDapplication property.This change primarily affects application schema users that have not yet adopted
ENTITY_RESOLUTION_ALLOWLIST. See update instructions for details. -
Due to a user interface change, it is no longer necessary to generate a masterpw.info when upgrading an older data directory.
If this file is present from an earlier upgrade, it is still considered a security warning and is noted on the welcome page.
Attribute Restrictions
Layer Feature Type Details has received a major improvement with an Edit attribute dialog making it easier to define the attribute name, description, type, nillability and for the first time restrictions. Attribute restrictions are used limit data values and are included in DescribeFeatureType.

Two types of restrictions are available:
- Options: Used to restrict set of numeric or string values to a provided set.
- Range: Used to restrict numeric values between a minimum inclusive and maximum inclusive limit.
Thanks to Alessandro Ricchiuti (GeoSolutions) for this powerful improvement.
For more information see Feature Type Details in the User Manual.
- GSIP-234 Advertise and Enforce Attribute Restrictions
- GEOS-11937 GSIP 234 - Advertise and Enforce Attribute Restrictions
Legend: Symbology Encoding Functions
This release includes a long-awaited improvement for legend graphic generation - creating a legend graphic when the Symbology Encoding Recode, Interpolate and Categorize functions are used.
<Fill>
<CssParameter name="fill">
<ogc:Function name="Recode">
<!-- Value to Transform -->
<ogc:Function name="strTrim">
<ogc:PropertyName>SUB_REGION</ogc:PropertyName>
</ogc:Function>
<!-- Map of input to output values -->
<ogc:Literal>N Eng</ogc:Literal> <ogc:Literal>#6495ED</ogc:Literal>
<ogc:Literal>Mid Atl</ogc:Literal> <ogc:Literal>#B0C4DE</ogc:Literal>
<ogc:Literal>S Atl</ogc:Literal> <ogc:Literal>#00FFFF</oac:Literal>
<ogc:Literal>E N Cen</ogc:Literal> <ogc:Literal>#9ACD32</ogc:Literal>
<ogc:Literal>E S Cen</ogc:Literal> <ogc:Literal>#00FA9A</ogc:Literal>
<ogc:Literal>W N Cen</ogc:Literal> <ogc:Literal>#FFF8DC</ogc:Literal>
<ogc:Literal>W S Cen</ogc:Literal> <ogc:Literal>#F5DEB3</ogc:Literal>
<ogc:Literal>Mtn</ogc:Literal> <ogc:Literal>#F4A460</ogc:Literal>
<ogc:Literal>Pacific</ogc:Literal> <ogc:Literal>#87CEEB</ogc:Literal>
</ogc:Function>
</CssParameter>
</Fill>

Thanks to Andrea Aime (GeoSolutions) for this improvement on behalf of German Aerospace Center (DLR).
- GEOS-8002 LegendGraphic display using transformation functions (recode, interpolate, categorize)
Release notes
New Feature:
- GEOS-11911 Application property ROOT_LOGIN_ENABLED
- GEOS-11937 GSIP 234 - Advertise and Enforce Attribute Restrictions
- GEOS-11949 Support MS Excel download from WPS-download
- GEOS-8002 LegendGraphic display using transformation functions (recode, interpolate, categorize)
Improvement:
- GEOS-11867 Improve entity resolution
- GEOS-11892 Column mentioning user that performed last modification for layers and stores list UI
- GEOS-11914 Using namespaces parameter with virtual services does not work
- GEOS-11938 Add support for property selection in OGC API Features
- GEOS-11950 WMS cascade: fully respect ‘restrict to layer bounds’ flag on GetMap requests
Bug:
- GEOS-4159 Layer from SQL view feature type details not refreshing after editing sql query (and refreshing attributes there)
- GEOS-11896 WPS map download flips east/west coordinates
- GEOS-11900 CRS:XY syntax builds isolated CRSs that do not leverage the EPSG database transformation library
- GEOS-11902 More compact, easier to maintain conformance configuration UI
- GEOS-11910 JMS Cluster settings Section is not showing properly
- GEOS-11917 INSPIRE configuration does not get properly saved when OGC API module is included
- GEOS-11944 GetLegendGraphic Fails When Using RasterSymbolizer With Interval ColorMap And ENV variables
- GEOS-11946 DirectRasterRenderer may fail on creating AlphaBand from ROI using Lookup
Task:
- GEOS-11813 Create REST API For Security Providers
- GEOS-11814 Create a REST API for Filter Chains
- GEOS-11815 Create authentication filter REST API
- GEOS-11852 Remove master password info page
- GEOS-11853 Clarify keystore vs master vs root password
- GEOS-11854 Generation of security/masterpw.info no longer required
- GEOS-11869 Replace entity resolution setting with application property
- GEOS-11881 Update postgis-jdbc
- GEOS-11898 GeoFence: issues in evaluation of virtual layer services access
- GEOS-11956 Fix build server WfsCompatibilityTest failure (when testing against “local” GeoServer on port 8080)
For the complete list see 2.27.3 release notes.
Community Updates
Community module development:
- GEOS-11885 Smart Data Loader does not support postgresql UUID data type
- GEOS-11887 Features Templating does not returns content type and charset header on OGC-API
- GEOS-11888 Features Templating does not support CQL2 new syntax
- GEOS-11961 OSEO layer management: Support creation of image mosaics in CRS other than 4326
Community modules are shared as source code to encourage collaboration. If a topic being explored is of interest to you, please contact the module developer to offer assistance.
About GeoServer 2.27 Series
Additional information on GeoServer 2.27 series:
- GeoServer 2.27 User Manual
- CITE Certification achieved
- GeoServer 2025 Q2 Developer Update
- GeoServer 2025 Roadmap
- Content-Security-Policy Headers
- OGCAPI Features Extension
- File system access isolation
- Promote data dir catalog loader to core
- Advertise and Enforce Attribute Restrictions
GeoServer is an Open Source Geospatial Foundation project supported by a mix of volunteer and service provider activity. We reply on sponsorship to fund activities beyond the reach of individual contributors.
GeoServer 2.28.0 Release
GeoServer 2.28.0 release is now available with downloads (bin, war, windows), along with docs and extensions.
This is a stable release of GeoServer, recommended for production use. GeoServer 2.28.0 is made in conjunction with GeoTools 34.0, GeoWebCache 1.28.0, ImageIO-Ext 2.0.0, and ImageN 0.9.0.
Thanks to Jody Garnett (GeoCat) for making this release. Thanks to Daniel Calliess, Sören Kalesse and Gabriel Roldan for providing feedback and testing of the 2.28-M0 milestone release.
Security Considerations
This release addresses security vulnerabilities and is considered an important upgrade for production systems.
- GEOS-11921 - CVE-2025-21621 - Reflected Cross-Site Scripting (XSS) vulnerability in WMS GetFeatureInfo HTML format (Moderate)
- GEOS-11922 - CVE-2025-58360 - Unauthenticated XXE via WMS GetMap (High)
The use of the CVE system allows the GeoServer team to reach a wider audience than blog posts.
See project security policy for more information on how security vulnerabilities are managed.
Upgrade instructions
Please take note of the Upgrade Instructions, specifically:
-
This release requires Java 17 LTS minimum, Java 11 is no longer supported.
GeoServer is tested with Long Term Support releases: Java 17 LTS and Java 21 LTS. For more information see Java Considerations in the user manual.
-
The global setting Unrestricted XML External Entity Resolution has been replaced with the
ENTITY_RESOLUTION_UNRESTRICTEDapplication property.This change primarily affects application schema users that have not yet adopted
ENTITY_RESOLUTION_ALLOWLIST. See update instructions for details. -
Due to a user interface change, it is no longer necessary to generate a masterpw.info when upgrading an older data directory.
If this file is present from an earlier upgrade, it is still considered a security warning and is noted on the welcome page.
Image Processing Engine updated
Updating the image processing engine used by GeoServer to be Java 17 compatible is one of the first major objectives of the GeoServer 3 crowdfunding activity. We are pleased to provide the upgrade from Java Advanced Imaging 1.1.3 to Eclipse ImageN 0.9.0 as part of the GeoServer 2.28.0 release.

Eclipse ImageN 0.9.0 is a stable release of two established codebases (Java Advanced Imaging and JAI-Ext) combined together into a single project. ImageN 1.0.0 will be released once the team has had an opportunity to increase the test coverage and update the user manual, over the course of the GeoServer 3.0 series.
Thanks to Jody (GeoCat), Andrea and Daniele (GeoSolutions) for this work and GeoServer 3 Crowdfunding for accomplishing this key objective for the future of GeoServer. We would also like to thank the Eclipse Foundation for working with Oracle to finally make this Sun Microsystems technology open source, alongside OpenJDK.
For more information see Eclipse ImageN and updated Wikipedia Entry for Java Advanced Imaging.
Attribute Restrictions
Layer Feature Type Details has received a major improvement with an Edit attribute dialog making it easier to define the attribute name, description, type, nillability and for the first time restrictions. Attribute restrictions are used limit data values and are included in DescribeFeatureType.

Two types of restrictions are available:
- Options: Used to restrict set of numeric or string values to a provided set.
- Range: Used to restrict numeric values between a minimum inclusive and maximum inclusive limit.
Thanks to Alessandro Ricchiuti (GeoSolutions) for this powerful improvement.
For more information see Feature Type Details in the User Manual.
- GSIP-234 Advertise and Enforce Attribute Restrictions
- GEOS-11937 GSIP 234 - Advertise and Enforce Attribute Restrictions
Legend: Symbology Encoding Functions
This release includes a long-awaited improvement for legend graphic generation - creating a legend graphic when the Symbology Encoding Recode, Interpolate and Categorize functions are used.
<Fill>
<CssParameter name="fill">
<ogc:Function name="Recode">
<!-- Value to Transform -->
<ogc:Function name="strTrim">
<ogc:PropertyName>SUB_REGION</ogc:PropertyName>
</ogc:Function>
<!-- Map of input to output values -->
<ogc:Literal>N Eng</ogc:Literal> <ogc:Literal>#6495ED</ogc:Literal>
<ogc:Literal>Mid Atl</ogc:Literal> <ogc:Literal>#B0C4DE</ogc:Literal>
<ogc:Literal>S Atl</ogc:Literal> <ogc:Literal>#00FFFF</oac:Literal>
<ogc:Literal>E N Cen</ogc:Literal> <ogc:Literal>#9ACD32</ogc:Literal>
<ogc:Literal>E S Cen</ogc:Literal> <ogc:Literal>#00FA9A</ogc:Literal>
<ogc:Literal>W N Cen</ogc:Literal> <ogc:Literal>#FFF8DC</ogc:Literal>
<ogc:Literal>W S Cen</ogc:Literal> <ogc:Literal>#F5DEB3</ogc:Literal>
<ogc:Literal>Mtn</ogc:Literal> <ogc:Literal>#F4A460</ogc:Literal>
<ogc:Literal>Pacific</ogc:Literal> <ogc:Literal>#87CEEB</ogc:Literal>
</ogc:Function>
</CssParameter>
</Fill>

Thanks to Andrea Aime (GeoSolutions) for this improvement on behalf of German Aerospace Center (DLR).
- GEOS-8002 LegendGraphic display using transformation functions (recode, interpolate, categorize)
OAuth2 OpenID Connect community modules
A new community module sec-oidc is now available based directly on Spring Security Core. This new community module is intended as a direct replacement for the existing sec-oauth2-geonode, sec-oauth2-github, sec-oauth2-google, and sec-oauth2-openid-connectplugins which have reached end of life.

For more information see OAUTH2 OIDC in the user manual. Extensive information (and notes) are provided for working with Google, GitHub, Microsoft Azure, and Keycloak. We are really pleased that the new OIDC community plugin is available alongside the existing OAuth2 implementations for comparison and testing.
The initial work was performed by Andreas Watermeyer (ITS Digital Solutions), and completed for GeoServer 2.28.0 by David Blasby (GeoCat), Ian Turton, and Alessio Fabiani (GeoSolutions). Thanks to the GeoServer 3 Crowdfunding sponsors for supporting this important development.
Developer Updates
A number of significant changes affect developers working on the GeoServer codebase:
-
The change to Java 17 LTS minimum brings new language features to the codebase
-
Java 17 build improvements
-
Maven bill-of-materials import to manage both GeoTools library modules and syncrhonize third-party dependencies with the GeoTools project.
Thanks to Gabriel Roldan (Camptocamp) for working on these activities on behalf of GeoServer 3 sponsors.
Release notes
New Feature:
- GEOS-11937 GSIP 234 - Advertise and Enforce Attribute Restrictions
- GEOS-11949 Support MS Excel download from WPS-download
- GEOS-11800 Implement GeoServer WPS SpatioTemporalZonalStatistics process
- GEOS-11911 Application property ROOT_LOGIN_ENABLED
- GEOS-8002 LegendGraphic display using transformation functions (recode, interpolate, categorize)
Improvement:
- GEOS-11934 Image processing tile cache: better logging and deeper cleanups
- GEOS-11788 Apply feedback from CSP testing
- GEOS-11833 Unnecessary antiCache parameter on some GUI images
- GEOS-11837 MapML Support for LayerGroups
- GEOS-11867 Improve entity resolution
- GEOS-11892 Column mentioning user that performed last modification for layers and stores list UI
- GEOS-11938 Add support for property selection in OGC API Features
Bug:
- GEOS-11823 Quality Degradation in Scanned Map Rendering (GeoServer 2.25.3 onward)
- GEOS-11944 GetLegendGraphic Fails When Using RasterSymbolizer With Interval ColorMap And ENV variables
- GEOS-11946 DirectRasterRenderer may fail on creating AlphaBand from ROI using Lookup
- GEOS-11957 Cannot logout due remember-me cookie with oidc
- GEOS-10728 Cannot download GeoPackage if the source data contains UUID types
- GEOS-11274 Cannot get a JSON legend with an external reference to a non published directory
- GEOS-11620 Smart Data Loader plugin for GeoServer 2.26 produces a Mapping file data source definition and tries to establish a connection pool, but fails
- GEOS-11688 After restart unable to load External Style SLD when requesting multiple tiles
- GEOS-11708 STAC breadcrumbs rendering as plain text
- GEOS-11751 Symbolizer URL in GetLegendGraphic JSON Request is Broken
- GEOS-11808 Attribute names containing characters the XML Encoder can’t handle are accepted for input, causing errors
- GEOS-11832 count=0 service exception for some formats
- GEOS-11857 Random NPE In LocalWorkspaceCallback
- GEOS-11860 MapML does not match raster rendering geometry simplification behavior
- GEOS-11862 Layer Preview and Tile Layers page dropdown links broken after updating table
- GEOS-11863 Use GetTile or GetMap requests in
for cached raster coverages where appropriate - GEOS-11865 MapDownloadProcess washes out 1 band gray images when transparency is on
- GEOS-11866 Prevent requests setting variables that should only be set by GeoServer
- GEOS-11879 Xalan causes a java.lang.NoClassDefFoundError
- GEOS-11902 More compact, easier to maintain conformance configuration UI
- GEOS-11910 JMS Cluster settings Section is not showing properly
- GEOS-11917 INSPIRE configuration does not get properly saved when OGC API module is included
- GEOS-11931 GeoServer binary package fails to start after Jetty 9.x to 10.0.25 upgrade
Task:
- GEOS-11848 Migrate use of JAITools to JAI-Ext
- GEOS-11956 Fix build server WfsCompatibilityTest failure (when testing against “local” GeoServer on port 8080)
- GEOS-11813 Create REST API For Security Providers
- GEOS-11814 Create a REST API for Filter Chains
- GEOS-11815 Create authentication filter REST API
- GEOS-11831 OseoDispatcherCallback improvements
- GEOS-11852 Remove master password info page
- GEOS-11853 Clarify keystore vs master vs root password
- GEOS-11854 Generation of security/masterpw.info no longer required
- GEOS-11855 global settings cog warning in release data directory
- GEOS-11869 Replace entity resolution setting with application property
- GEOS-11881 Update postgis-jdbc
- GEOS-11882 Cleanup postgis-jdbc dependencies
- GEOS-11932 Upgrade Oracle JDBC driver to Java 17
For the complete list see 2.28.0 release notes.
Community Updates
Community module development:
- GEOS-11951 Add PMTiles DataStore community module for reading Protomaps vector tiles
- GEOS-11816 Features templating OGC API fetch by ID fails
- GEOS-11819 Make smart data loader skip unsupported column types
- GEOS-11822 OGC API procesess basic implementation
- GEOS-11829 Features templating ability to override schema
- GEOS-11839 New Community Module for WPS Download in NetCDF output format for spatiotemporal coverages
- GEOS-11870 Singlestore(MemSql) datastore community module
- GEOS-11885 Smart Data Loader does not support postgresql UUID data type
- GEOS-11887 Features Templating does not returns content type and charset header on OGC-API
Community modules are shared as source code to encourage collaboration. If a topic being explored is of interest to you, please contact the module developer to offer assistance.
Developer updates
- GEOS-11845 GSIP-232 Upgrade GeoServer and GeoWebCache Build to Java 17
- GEOS-11943 remove PDF generation of manual from build process
- GEOS-11952 GeoServer 2.28.0 Release cleanup
- GEOS-11836 Upgrade ErrorProne to 2.31.0
- GEOS-11843 Use Spring framework BOM to manage Spring and Spring Security dependencies
- GEOS-11851 Remove unnecessary javac lint suppressions
- GEOS-11858 Update to PMD 7.14 and enable unnecessary suppression rule
About GeoServer 2.28 Series
Additional information on GeoServer 2.28 series:
- GeoServer 2.28 User Manual
- Advertise and Enforce Attribute Restrictions
- GeoServer 2025 Q4 Developer Update
GeoServer is an Open Source Geospatial Foundation project supported by a mix of volunteer and service provider activity. We reply on sponsorship to fund activities beyond the reach of individual contributors.
Tutorials
- Master GeoServer WPS - Buffer & Intersection Analysis
- Master GeoServer WPS - Key Input Categories You Need
- Exploring Types of WPS Operations in GeoServer
- GeoServer WPS Extension Installation Guide
- GeoServer Installation and Upgrade Guide on Windows
- Mastering WFS Transactions in GeoServer
- Powerful SLD Styles & Filters in GeoServer
- Using Logical Operators in GeoServer Filters
- Exploring CQL/ECQL Filtering in GeoServer
- Using Spatial Operators in GeoServer Filters
