( YouTube | LinkedIn | Facebook | X )
In this session, we want to talk about the Using logical operators to combine multiple filters in GeoServer. If you want to access the complete tutorial, click on the link.
Logical operators in Web Feature Service (WFS) filtering are essential for combining multiple conditions within GeoServer. These operators enable users to construct complex queries, facilitating data retrieval from the WFS service. The primary logical operators include AND, OR, and NOT.
Note. This video was recorded on GeoServer 2.22.4, which is not the most up-to-date version. Currently, versions 2.25.x and 2.26.x are supported. To ensure you have the latest release, please visit this link and avoid using older versions of GeoServer.
This operator combines multiple conditions into a single filter expression. The resulting expression matches only those features that meet all of the specified criteria.
Use the following block codes to replace line 26:
<ogc:And>
<PropertyIsLessThan>
<PropertyName>LAND_KM</PropertyName>
<Literal>100000</Literal>
</PropertyIsLessThan>
<PropertyIsGreaterThan>
<PropertyName>PERSONS</PropertyName>
<Literal>5000000</Literal>
</PropertyIsGreaterThan>
</ogc:And>
Note. In all examples in this blog post, we utilize the topp:states
layer.
In this example, we applied a filter to the layer, where the value of the LAND_KM
attribute, is less than 100,000 and the PERSONS
is greater than 5 million people.
The results include three states: Massachusetts
, New Jersey
and Indiana
.
To use the CQL filtering to apply the equivalent of this example, first, preview the top:states
layer in the Layer Preview section. Then, add the filter CQL_FILTER=LAND_KM<100000 And PERSONS>5000000
to the end of the URL.
The complete URL for the layer is as follows:
http://localhost:8080/geoserver/topp/wms?service=WMS&version=1.1.0&request=GetMap&layers=topp%3Astates&bbox=-124.73142200000001,24.955967,-66.969849,49.371735&width=768&height=330&srs=EPSG%3A4326&styles=&format=application/openlayers&CQL_FILTER=LAND_KM<100000 And PERSONS>5000000
This operator allows you to combine multiple conditions and retrieve features that satisfy any of the specified conditions. In simpler terms, at least one condition must be true for the filter to be considered a match.
Here’s an example of how to use the “OR” operator to filter a WFS layer based on two conditions.
<ogc:Or>
<PropertyIsLessThan>
<PropertyName>LAND_KM</PropertyName>
<Literal>100000</Literal>
</PropertyIsLessThan>
<PropertyIsGreaterThan>
<PropertyName>PERSONS</PropertyName>
<Literal>5000000</Literal>
</PropertyIsGreaterThan>
</ogc:Or>
Press the Submit button.
In this example, we filtered the layer to display features that meet either of these conditions: The value of the LAND_KM
attribute is less than 100,000 or the PERSONS
attribute represents a population greater than 5 million people. The results include 25
states.
To apply the same example using the CQL filtering and observe the results, use the following code in the URL of the layer as mentioned above:
http://localhost:8080/geoserver/topp/wms?service=WMS&version=1.1.0&request=GetMap&layers=topp%3Astates&bbox=-124.73142200000001,24.955967,-66.969849,49.371735&width=768&height=330&srs=EPSG%3A4326&styles=&format=application/openlayers&CQL_FILTER=LAND_KM<100000 Or PERSONS>5000000
In GeoServer, the NOT operator, also known as the logical negation operator, is used to invert the meaning of a filter expression. It takes one or more filter expressions and returns features that don’t meet the specified conditions.
Here’s an example of using the “NOT” operator for filtering a WFS layer by two conditions:
<ogc:Not>
<ogc:Or>
<PropertyIsLessThan>
<PropertyName>LAND_KM</PropertyName>
<Literal>100000</Literal>
</PropertyIsLessThan>
<PropertyIsGreaterThan>
<PropertyName>PERSONS</PropertyName>
<Literal>5000000</Literal>
</PropertyIsGreaterThan>
</ogc:Or>
</ogc:Not>
Press the Submit button.
In this example, we filtered the layer to show features that don’t meet any of these conditions. That is, neither the value of the LAND_KM
attribute is less than 100,000 nor is the value of the PERSONS
parameter more than 5 million people. The results include 24
states.
To see how to use the NOT operator in CQL filtering, use the following code at the end of the URL’s layer:
http://localhost:8080/geoserver/topp/wms?service=WMS&version=1.1.0&request=GetMap&layers=topp%3Astates&bbox=-124.73142200000001,24.955967,-66.969849,49.371735&width=768&height=330&srs=EPSG%3A4326&styles=&format=application/openlayers&CQL_FILTER=NOT(LAND_KM<100000 Or PERSONS>5000000)
GeoServer provides the capability of combining logical operators with geometric filters, enhancing the flexibility of WFS filtering. This feature enables users to create more specific and reliable filtering criteria.
Here is an example that effectively uses both spatial and comparison filtering:
<ogc:Filter>
<ogc:And>
<ogc:Intersects>
<ogc:PropertyName>the_geom</ogc:PropertyName>
<gml:LineString xmlns:gml="http://www.opengis.net/gml" srsName="EPSG:4326">
<gml:coordinates>-73.9,43.5 -81.1,38.6 -78.57,35.5</gml:coordinates>
</gml:LineString>
</ogc:Intersects>
<PropertyIsGreaterThanOrEqualTo>
<PropertyName>PERSONS</PropertyName>
<Literal>10000000</Literal>
</PropertyIsGreaterThanOrEqualTo>
</ogc:And>
</ogc:Filter>
In this example, we filtered out states with populations exceeding 10 million, as well as states intersected by a LineString with given coordinates.
Thus, we identified New York
and Pennsylvania
as the two states that satisfy these conditions.
To see how to use CQL filtering for this example, follow the instance shown on the screen:
CQL_FILTER=INTERSECTS(the_geom,LINESTRING(-73.9 43.5,-81.1 38.6,-78.57 35.5)) AND PERSONS>10000000
As a final example, we examine a comprehensive scenario that incorporates different operators. This example includes a spatial operator, such as the Within filter. Additionally, it showcases two comparison operators, namely PropertyIsLike
and PropertyIsGreaterThan
.
To better understand these concepts, use the following example:
<ogc:Filter>
<ogc:And>
<ogc:Within>
<ogc:PropertyName>the_geom</ogc:PropertyName>
<gml:Polygon xmlns:gml="http://www.opengis.net/gml" srsName="EPSG:4326">
<gml:outerBoundaryIs>
<gml:LinearRing>
<gml:coordinates>-100,30 -100,45 -80,45 -80,30 -100,30</gml:coordinates>
</gml:LinearRing>
</gml:outerBoundaryIs>
</gml:Polygon>
</ogc:Within>
<ogc:Or>
<ogc:Filter>
<ogc:PropertyIsLike wildCard="%" singleChar="_" escape="!">
<ogc:PropertyName>STATE_NAME</ogc:PropertyName>
<ogc:Literal>%na%</ogc:Literal>
</ogc:PropertyIsLike>
</ogc:Filter>
<PropertyIsGreaterThan>
<PropertyName>STATE_FIPS</PropertyName>
<Literal>30</Literal>
</PropertyIsGreaterThan>
</ogc:Or>
</ogc:And>
</ogc:Filter>
In this example, we use WFS filtering to extract the States that are completely enclosed within specific coordinates. Moreover, we retrieve States whose STATENAME
includes the letters “na” or whose STATEFIPS
value is greater than 30.
Therefore, we have identified three states that meet the specified criteria: Tennessee
, Indiana
, and Ohio
.
To use the CQL filtering for this example, use the following code:
CQL_FILTER=Within(the_geom,Polygon((-100 30,-100 45,-80 45,-80 30,-100 30))) AND (STATE_NAME LIKE '%na%' OR STATE_FIPS > 30)
In this session, we took a brief journey through the Combining multiple operators for WFS filtering in GeoServer. If you want to access the complete tutorial, click on the link.
]]>This is a maintenance release of GeoServer providing existing installations with minor updates and bug fixes. GeoServer 2.25.5 is made in conjunction with GeoTools 31.5, and GeoWebCache 1.25.3. The final release of the 2.25 series is planned for February 2025, please start making plans for an upgrade to 2.26.x or newer.
Thanks to Andrea Aime (GeoSolutions) for making this release.
Improvement:
Bug:
Task:
For the complete list see 2.25.5 release notes.
Community module development:
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.
Additional information on GeoServer 2.25 series:
Release notes: ( 2.25.5 | 2.25.4 | 2.25.3 | 2.25.2 | 2.25.1 | 2.25.0 | 2.25-RC )
]]>This is a stable release of GeoServer recommended for production use. GeoServer 2.26.1 is made in conjunction with GeoTools 32.1, and GeoWebCache 1.26.1.
Thanks to Peter Smythe (AfriGIS) for making this release.
This release addresses security vulnerabilities and is considered an important upgrade for production systems.
See project security policy for more information on how security vulnerabilities are managed.
Improvement:
Bug:
Task:
For the complete list see 2.26.1 release notes.
Community module development:
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 make contact and offer assistance, even if it is just to say that it works for you.
Additional information on GeoServer 2.26 series:
]]>( YouTube | LinkedIn | Facebook | X )
In this session, we want to talk about the Using CQL/ECQL Filters in GeoServer in detail. If you want to access the complete tutorial, click on the link.
Contextual Query Language (CQL) is a text-based query for search/retrieval adopted by the OGC for the Catalogue Web Services specification. Unlike the XML-based Filter Encoding language, CQL is more readable and easier for manual authoring. However, it has limitations, such as not being able to encode ID filters and requiring the attribute to be on the left side of comparison operators.
To overcome these limitations, GeoServer offers an extended version called ECQL, which closely resembles SQL and provides greater flexibility. ECQL allows users to define filters for querying data in GeoServer using attribute comparisons, logical operators, and spatial predicates. It is compatible with GeoServer’s REST API and can be used for WMS and WFS requests to retrieve filtered data.
Note. This video was recorded on GeoServer 2.22.4, which is not the most up-to-date version. Currently, versions 2.25.x and 2.26.x are supported. To ensure you have the latest release, please visit this link and avoid using older versions of GeoServer.
Note. Future version of GeoServer will include support for CQL2 which provides both a text and a JSON representation.
To compare attribute values or other numeric and text values in your CQL / ECQL (Extended Common Query Language) expressions, you can utilize comparison operators.
In the Layer Preview section, first click on the OpenLayers option for the topp:states
layer. Next, locate and click on the Toggle options toolbar in the top left corner to access the advanced options.
In the CQL filter box within this toolbar, enter the filter expression STATE_NAME = 'Texas'
, and then press the Apply button. This filter will retrieve and display the data for the state of Texas.
By reviewing the following examples using the Toggle options toolbar from the LayerPreview page, you will learn how to effectively understand and apply comparison operators using CQL/ECQL expressions:
This filter shows the states that have more than or equal to 5 million inhabitants.
PERSONS >= 5000000
This filter shows the states whose names, contain the letters ‘ing’ like Washington and Wyoming.
STATE_NAME like '%ing%'
This filter shows the states with a population of 5 million to 10 million.
PERSONS between 5000000 and 10000000
These operators enable you to perform spatial queries and filter data, based on various relationships between geometries. Here are the explanations for some commonly used spatial operators:
This filter allows you to query spatial data in GeoServer based on geometric intersection relationships. This filter returns all features that have any spatial intersection or overlap.
The syntax for the Intersect filter in CQL is as follows:
Intersects(the_geom,Point(-90 40))
The Within filter checks if a spatial object is completely within another spatial object. This filter retrieves all features that are located within the boundaries of a specified geometric shape, using spatial relationships.
Within(the_geom,Polygon((-100 30,-100 45,-80 45,-80 30,-100 30)))
This filter is the inverse of the “Within” filter. It checks if a spatial object completely contains another spatial object and helps you retrieve features that fully enclose the specified geometry.
CONTAINS(the_geom,LINESTRING(-73.9 43.5,-77.76 42.56))
The Bounding Box operator is used to filter data based on a specified bounding box. The “bbox” filter in CQL allows you to query spatial data in GeoServer based on a bounding box or a rectangular area.
CQL filters can also be utilized with the GET method. To use the bbox filter using the GET method, enter the following code in the URL address bar of your browser:
http://localhost:8080/geoserver/topp/wms?service=WMS&version=1.1.0&request=GetMap&layers=topp:states&bbox=-124.73142200000001,24.955967,-66.969849,49.371735&width=768&height=330&srs=EPSG:4326&format=application/openlayers&CQL_FILTER=BBOX(the_geom,-110,41,-95,45)
This filter enables you to retrieve all features that intersect, or are contained within the specified bounding box.
In this session, we took a brief journey through the “CQL filtering in GeoServer”. If you want to access the complete tutorial, click on the link.
]]>This is a maintenance release of GeoServer providing existing installations with minor updates and bug fixes. GeoServer 2.25.4 is made in conjunction with GeoTools 31.4, and GeoWebCache 1.25.3.
Thanks to Jody Garnett for making this release.
Update 2024-11-08: Testing from Sören Kalesse noted the downloads included snapshot jars. The binaries have been updated with intended geotools and geowebcache jars.
This release addresses security vulnerabilities and is considered an important upgrade for production systems.
See project security policy for more information on how security vulnerabilities are managed.
New Feature:
Improvement:
Bug:
Task:
For the complete list see 2.25.4 release notes.
Community module development:
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.
Additional information on GeoServer 2.25 series:
Release notes: ( 2.25.4 | 2.25.3 | 2.25.2 | 2.25.1 | 2.25.0 | 2.25-RC )
]]>If you have sent email to geoserver-devel
list this week you have been met with the following reply:
This list is now closed, join us on geoserver developer forum:
https://discourse.osgeo.org/invites/7DX66egwux
That is right, developer communication has moved to GeoServer Developer on discourse.
How to help:
The consortium of Camptocamp, GeoSolutions and GeoCat have responded to our roadmap challenge with a bold GeoServer 3 Call for Crowdfunding established as a multi-party contract.
How to help:
GEOS-11275: Brad and David have made considerable progress on Wicket UI updates. After a year of effort the first results towards Wicket 10 are being merged onto the main
branch.
Thanks to Brad for doing much of the difficult work starting this activity, and to David for working hard to stabilize this work for testing.
Peter and Jody started a wicket test plan and evaluated an initial 2.26-M0 milestone release.
How to help:
docker pull docker.osgeo.org/geoserver:2.27.x
docker run -it -p8081:8080 docker.osgeo.org/geoserver:2.27.x
GEOS-11271: Andreas Watermeyer (ITS Digital Solutions) has completed this activity ahead of the GeoServer 2.26.0 release.
How to help:
GEOS-11272: Andreas Watermeyer (ITS Digital Solutions) set up new community modules to work on this activity. This is a new implementation as the spring security internals have changed, and the new spring api allows for a cleaner implementation.
How to help:
We would like to welcome a new project sponsor:
Route4Me - Simplify Last Mile Complexity: proven route planning and route optimization software.
The GeoServer project steering committee seeks sponsorship to fund maintenance activities, code sprints, and research and development that is beyond the reach of an individual contributor or organization.
We would like to thank everyone who has responded thus far:
( YouTube | LinkedIn | Facebook | X )
In this session, we want to talk about the Spatial operators in GeoServer in detail. If you want to access the complete tutorial, click on the link.
GeoServer supports various spatial operators that filter geospatial data based on their location or spatial relationships with other features. These operators are commonly used with other filter expressions to create complex queries. These queries are useful for extracting specific subsets of data from a larger dataset.
The spatial operators are Topological, Distance, and Bounding Box operators. We’ll explain them in more detail below.
Note. This video was recorded on GeoServer 2.22.4, which is not the most up-to-date version. Currently, versions 2.24.x and 2.25.x are supported. To ensure you have the latest release, please visit this link and avoid using older versions of GeoServer.
In GeoServer, topological operators are used for spatial analysis and processing of geographic data. These operators perform geometric operations that preserve the spatial relationship or topology between geometric features. Some common topological operators in GeoServer include: Intersects, Within, Contains, etc.
The Intersects filter in GeoServer is used to query spatial data based on the intersection of two geometry objects. For example, you can use this operator to extract all features that intersect with a specified Point, Line, or Polygon.
Here are some examples of how you can use this filter in an XML request to filter the States
layer by the State_Name
attribute:
getFeatureIntersects
operation of the WFS service being used.GML2
. Additionally, GeoServer supports several other commonly used formats such as “gml3, shapefile, geojson, and csv.”topp:states
.Note. For GeoServer 2.25.2 the Demo Request page has been improved to show response Headers, and provide the option to pretty print XML output.
This operator is used to retrieve features that are completely within the specified geometry. For example, you can use this operator to extract all features that are within a polygon.
Here’s an example of how you can define a Within
filter in XML. As an example of using this filter in a WFS getFeature request, use the following block codes to replace lines 24 to 31:
<Filter>
<Within>
<PropertyName>the_geom</PropertyName>
<gml:Polygon xmlns:gml="http://www.opengis.net/gml" srsName="EPSG:4326">
<gml:outerBoundaryIs>
<gml:LinearRing>
<gml:coordinates>-90.73,29.85 -90.73,35.92 -80.76,35.92 -80.76,29.85 -90.73,29.85</gml:coordinates>
</gml:LinearRing>
</gml:outerBoundaryIs>
</gml:Polygon>
</Within>
</Filter>
Press the Submit button. As you can see, the result includes two states named Alabama
and Georgia
.
This operator is used to filter data that is completely contained within a given geometry. For example, you can use this operator to extract all features that are completely contained within a polygon that represents a state boundary.
Here’s an example of how you can define a Contains
operator in XML:
<Filter>
<Contains>
<PropertyName>the_geom</PropertyName>
<gml:LineString srsName="EPSG:4326">
<gml:coordinates>-89.35,31.46 -89.35,32.11 -89.49,32.23 -90.21,32.23</gml:coordinates>
</gml:LineString>
</Contains>
</Filter>
Press the Submit button. As you can see, the state that contains the given geometry is Mississippi
.
You will need to adjust the filter and shape to match your data and SRS. Assuming you have a data source with a geometry column named the_geom that uses the EPSG:4326 coordinate system.
In GeoServer, Distance operators like “DWithin” and “Beyond” filters, are used to filter and retrieve features based on their spatial relationship and proximity to a given geometry or location. These operators can be used in WFS requests and are useful for performing spatial analysis and finding nearby features.
The ‘DWithin’ or ‘Distance Within’ filter, will return records that are located within a specific distance of a defined point, much like a buffer. As well as the point geometry, you must specify the value of the distance from this point and the unit of measure. The units for the DWithin are: Feet, meters, kilometers and miles.
Here’s an example of how to use the DWithin
filter in a GeoServer XML configuration file. To find all the features that are within 10000
meters of a given point in a layer called “sf:archsites”, the following WFS request can be used.
<wfs:GetFeature service="WFS" version="1.0.0"
outputFormat="application/json" xmlns:wfs="http://www.opengis.net/wfs"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:gml="http://www.opengis.net/gml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/WFS-basic.xsd">
<wfs:Query typeName="sf:archsites">
<ogc:Filter>
<ogc:DWithin>
<ogc:PropertyName>the_geom</ogc:PropertyName>
<gml:Point srsName="http://www.opengis.net/gml/srs/epsg.xml#26713">
<gml:coordinates>593250,4923867</gml:coordinates>
</gml:Point>
<ogc:Distance units="meter">10000</ogc:Distance>
</ogc:DWithin>
</ogc:Filter>
</wfs:Query>
</wfs:GetFeature>
This will return all the features in “sf:archsites” layer, that are within 10000 meters of the given point. Remember that, the EPSG code mentioned in line 11 is very important because it serves as a reference point for importing coordinates and distance values.
Press the Submit button.
The Bounding Box operator is used to filter data based on a specified bounding box. A bounding box is a rectangular region defined by its lower left and upper right coordinates: minx, miny, maxx, and maxy. For example, you can use this operator to extract all features that are located or partially located inside a box of coordinates.
As an example of using this operator, select the WFS_getFeatureBBOX1.0.xml from the Request section. Now the filters block code is as follows:
<Filter>
<BBOX>
<PropertyName>the_geom</PropertyName>
<gml:Box srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
<gml:coordinates>-75.102613,40.212597 -72.361859,41.512517</gml:coordinates>
</gml:Box>
</BBOX>
</Filter>
In this case, we just get the STATE_NAME
and PERSONS
attribute.
Using the range specified in the code specifies the features that are completely or partially located in this area.
The result includes four states named New York
, Pennsylvania
, Connecticut
, and New Jersey
as you see on the screen.
In this session, we took a brief journey through the “Spatial operators in GeoServer”. If you want to access the complete tutorial, click on the link.
]]>This is a stable release of GeoServer recommended for production use. GeoServer 2.26.0 is made in conjunction with GeoTools 32.0, GeoWebCache 1.26.0, ImageIO-EXT 1.4.13, and JAI-EXT 1.1.27.
Thanks to Peter Smythe (AfriGIS) and Jody Garnett (GeoCat) for making this release and everyone who has helped out during this release cycle. Special thanks Andrea for helping with release announcement, and Torben for troubleshooting the build server and docker environment for this release.
This release cycle we asked our new user forum to test a nightly build, as we did not have capacity to make a release candidate.
Thanks to Daniel Calliess for responding during our public testing cycle. Daniel noted that he had to add /geoserver/webresources
to his proxy for the OpenLayers preview to function. This change is due to an ongoing effort to move all CSS and JS to external resources allowing Content Security Policy headers to be introduced.
This release addresses security vulnerabilities and is a recommended upgrade for production systems.
See project security policy for more information on how security vulnerabilities are managed.
The binary distribution and the Windows installer now work with Java 17.
When using the war distribution with Tomcat and Java 17 double check the Server status page. If the Java Rendering Engine is listed as “Unknown”, double check the Running in Java 17 production considerations.
Thanks to Andrea Aime and everyone who worked on testing this in different environments.
The base image tomcat:9.0.95-jdk17-temurin-jammy
is now used - providing the latest Tomcat 9 and Java 17. The docker crew changed from using ubuntu:22.04
with our own Tomcat install script earlier in the year.
To try out GeoServer 2.26.0 with docker:
docker pull docker.osgeo.org/geoserver:2.26.0
docker run -it -p8080:8080 docker.osgeo.org/geoserver:2.26.0
Thanks to Nils Bühner (terrestris) and everyone who has contributed to the Docker build.
A small but fun change for the layer preview - it is now easier to find just the layer you are looking for using quotes to isolate an individual word.
Thanks to Alessandro Ricchiuti for this work.
Thanks to Natural Resources Canada for sponsoring an extensive set improvements for the MapML extension.
This update was carried out by a group of GeoSolutions devs, Andrea Aime, Daniele Romagnoli and Joseph Miller.
The Demo Request page has been rewritten to use JavaScript to issue POST examples. This provides a much better user experience:
The WCS Request Builder and WPS Request Builder demos now have the option to show their results in Demo Requests page. Combined these changes replace the previous practice of using an iframe popup, and have allowed the TestWfsPost servlet to be removed.
For more information please see the Demo requests in the User Guide.
Thanks to David Blasby (GeoCat) for these improvements, made on behalf of the GeoCat Live project.
We are overjoyed to update to the latest JTS 1.20.0 release which includes a new implementation of spatial relationships.
Use -Djts.relate=ng
to try out the new implementation (replacing RelateOp
with theReleateNG
next generation implementation). Let us know how it goes, a future update will make this setting the default and expand the approach to “prepaired geometry” bulk operations used for WFS Queries.
Thanks to Martin Davis (CrunchyDB) for the JTS improvements, and Jody Garnett (GeoCat) for the release and GeoServer update.
A new extension is available that takes advantage of the GDAL Raster Attribute Table (RAT). This data structure provides a way to associate attribute information for individual pixel values within the raster. This provides a table that links each cell value in the raster to one or more attributes on the fly.
Thanks to Andrea Aime (GeoSolutions) for the development and NOAA for sponsoring this new capability. Please see the user guide Raster Attribute Table support for more information.
GeoCSS can now perform scale dependent rendering by the zoom level, assuming web mercator by default, but allowing the configuration of a different gridset as well. It’s also possible to create multi-layer styles and use them as style groups.
@mode 'Flat';
@TileMatrixSet 'WorldCRS84Quad'
tiger:poly_landmarks {
/* @title parks and green spaces */
[CFCC in ('D82', 'D32', 'D84', 'D85')] {
fill: #B4DFB4;
stroke: #88B588;
};
…
}
tiger:tiger_roads [@z > 12] {
stroke: #666666, #FFFFFF;
stroke-width: 6, 4;
z-index: 1, 2;
…
}
…
Thanks to Andrea Aime (GeoSolutions) for this work, performed in preparation for the FOSS4G-NA 2024 vector tiles workshop.
AUTO:97004
has been introduced as a new vendor extension to WMS AUTO codes. It implements the geostastionary satellite project and allows to change the central meridian as part of the GetMap request.
Thanks to Andrea Aime (GeoSolutions) for this work, and Eumetsat for sponsoring it.
The labelPoint
function has been improved with more precise calculation of the polygon label points, and not requiring to specify a tolerance any longer. This helps get better maps, especially with tiling enabled (fixed labelling point no matter which tile is requested):
<sld:TextSymbolizer>
<sld:Geometry>
<ogc:Function name="labelPoint">
<ogc:PropertyName>the_geom</ogc:PropertyName>
</ogc:Function>
</sld:Geometry>
</sld:TextSymbolizer>
Thanks to Andrea Aime (GeoSolutions) for this work, performed in preparation for the FOSS4G-NA 2024 vector tiles workshop.
A few new vendor options have been added in GeoServer, that control how vector tiles are built, with the objective of producing smaller, faster, more useful vector tiles.
vt-attributes
: comma separated list of attributes included in the vector tilevt-labels
: when true, generates a sidecar -label
layer for polygons, with the label point of the polygon (vector tile clients generally cannot produce a good label placement otherewise)vt-label-attributes
:: attributes included in the label point layervt-coalesce
: if true, takes all features in the tile sharing the same attribute values, and coalesces their geometries into a single multi-geometry.Here is an example style using the above vendor options, in GeoCSS:
@mode "Flat";
tiger:poly_landmarks {
fill: gray;
vt-attributes: 'CFCC,LANAME';
vt-labels: true;
}
tiger:tiger_roads [@z > 11] {
stroke: black;
vt-attributes: 'NAME';
vt-coalesce: true;
}
tiger:poi [@z > 12] {
mark: symbol(square);
}
The GWC layer preview has also been improved to show the vector tile feature attributes on hover:
Thanks to Andrea Aime (GeoSolutions) for this work, performed in preparation for the FOSS4G-NA 2024 vector tiles workshop.
A number of issues affecting interoperability with QGIS have been addressed:
GeoPackage extension output could contain field types that are not supported by GDAL. It turns out the GeoPackage export was picking up some of the file type information intended for PostGIS resulting output that could not be read by other programs such as QGIS.
We were also able to fix up the TIMESTAMP information representation as DATETIME, making the file format timezone agnostic as intended.
Thanks to David Blasby (GeoCat) for these fixes made on behalf of Zeeland and South Holland.
These two new image mosaic merge modes activate when multiple images overlap with each other, choosing respectively the minimum and maximum value amongst the super-imposed pixels.
Thanks to Andrea Aime for the work, and the US National Research Laboratory for sponsoring it.
New Feature:
Improvement:
GEOS-11369 Additional authentication options for cascaded WMS | WMTS data stores |
Bug:
Task:
For the complete list see 2.26.0 release notes.
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.
Community module development:
OGC API modules now nicely slot into the home page in the corresponding functional section, e.g., since both provide raw vector data, both OGC API Features and WFS show up in the same area:
Thanks to David Blasby (GeoCat) for this work.
The “Data Directory loader”, by Gabriel Roldan (Camptocamp), is a replacement data directory loader, reading the XML configuration files at startup. It has been optimized to achieve better parallelism and be more efficient over network file systems.
It can be found amongst the nightly builds, it’s a simple drop in replacement, just unzip the plugin in WEB-INF/lib
and restart. Let us know how it works for you.
The WFS HTML Freemaker output format is a community module generating HTML in response to GetFeature, using the GetFeatureInfo Freemarker templates.
Thanks to Alessio Fabiani (GeoSolutions) for starting this activity.
The graticules module is the combination of a data store and a rendering transformation allowing to generate graticules at multiple resolutions, and optionally placing the graticule labels at the map borders.
Thanks to Ian Turton for working on this activity. Ian needs a few more people to try this out before it can be included in our GeoServer roadmap.
GeoServer team has identified quite the challenges for GeoServer 2024 Roadmap Plannings.
After initial testing of 2.26-M0 milestone release we held off including Wicket 9 until after the 2.26.0 release. Thanks to Peter Smythe and Jody Garnett for testing.
Thanks to Brad Hards who started this work in November 2023, and David Blasby who helped bring this up to a state it could be tested ahead of the 2.26.0 release.
Thanks to Andreas Watermeyer (ITS Digital Solutions) completed this important update.
This is the last stopping place before Spring Security 6, and the last chance to work with the OAuth2 community modules.
Additional information on GeoServer 2.26 series:
]]>This vulnerability, in the handling of XPath expressions, affords a “remote code execution” attack that is under active exploit. A remote code execution (RCE) attack allows an attacker to run malicious code on your computer or network.
For more information:
You are responsible for running a GeoServer instance that has not been updated.
CVE-2024-36401 provides mitigation instructions which you should perform immediately.
Please stop reading and do this now.
Update your instance: Upgrading existing versions (User Guide)
The instructions include notes on upgrading specific versions. Please read carefully to see if any manual changes are required.
With such a serious issue several service providers have stepped forward to make fixes available for prior releases.
Full release:
Patch provided with CVE-2024-36401 report:
Free software is a participation sport - to create a patch for a prior release volunteer with community development.
GeoServer operates with a time boxed release cycle, maintaining “stable” and “maintenance” releases, over the course of a year.
Upgrade GeoServer twice a year as new stable releases are made.
Once the release you are using has entered “maintenance” it is a good idea to upgrade (before the release is no longer supported).
GeoServer security policy provides one year of support. You may also contact our service providers for extended support beyond this timeframe.
Stay up to date:
Please monitor release announcements for the heading “Security Considerations”.
Security Considerations
This release addresses security vulnerabilities and is considered an essential upgrade for production systems.
- CVE-2024-36401 Critical
You can review the release announcement, and in this case with a “Critical” vulnerability decide to update.
When everyone has had an opportunity to update the details of the vulnerability are announced.
Security Considerations
This release addresses security vulnerabilities and is considered an essential upgrade for production systems.
- CVE-2024-36401 Remote Code Execution (RCE) vulnerability in evaluating property name expression (Critical)
As GeoServer has now adopted use CVEs for publication you may also have success with vulnerability scanning tools.
These tools function when the vulnerability is published, and do not provide any advance notice.
As security reports contain sensitive information they are only shared with representatives of the geoserver-security email list.
Participation in geoserver-security, like commit access, is volunteer based and reflects trust.
Please review GeoServer Security Policy if you are in a position to help out.
]]>This major upgrade, led by Camptocamp, GeoSolutions, and GeoCat, will deliver:
Future-Proof Performance: A modernized core for compatibility with the latest data management and deployment technologies.
Enhanced Image Processing: Faster, smoother handling of spatial imagery and larger datasets.
Improved Security and Compliance: Meet regulatory standards and protect your data with the latest security enhancements.
Streamlined User Experience: Easier navigation, integrating new services, and empowering users at all levels.
The scope of this work is beyond routine updates or maintenance since the transition to GeoServer 3 requires extensive redevelopment of core systems as well as implementing modern security practices and also thorough testing and validation across all GeoServer extensions.
The consortium members - Camptocamp, GeoSolutions, and GeoCat- have a long-standing history of supporting and contributing to GeoServer and are fully committed to the success of this migration. However, this is a major effort that cannot be completed without community support.
By supporting this crowdfunding campaign, you are investing in the future of GeoServer and helping to sustain the innovative, open-source geospatial community.
As the digital landscape evolves, staying up-to-date with the latest technology is no longer optional — it’s essential. GeoServer 3 is being developed to address crucial challenges and ensure that GeoServer remains a reliable and secure platform for the future. Several key factors make this upgrade critical right now:
Regulatory Compliance: New regulations, including the CISA known exploited vulnerabilities list, demand that systems be fully patched to ensure operational readiness. Without the latest updates, GeoServer risks falling short of these standards, which is why migrating to Spring 6 is essential.
End of Support for Spring 5: By January 2025, Spring 5 will no longer receive security updates, leaving systems vulnerable. As GeoServer operates as middleware between web services and essential data layers, this upgrade to Spring 6 is crucial to maintaining secure connections and protecting data from potential breaches.
Security Enhancements: Upgrading to Spring 6 enables OAuth2 protocols for secure authentication, especially critical for large-scale or enterprise-level use. These advancements will help organizations meet evolving security requirements and protect sensitive geospatial data.
Switching to JDK 17: This upgrade also marks GeoServer’s transition to JDK 17, which brings improvements in performance, security, and long-term support. Keeping GeoServer aligned with the latest Java versions ensures compatibility with modern deployment technologies Tomcat 10 and Jakarta and future-proofs the platform.
Improved Image Processing: GeoServer 3 will replace the outdated Java Advanced Imaging (JAI) library with the more modern and flexible ImageN toolkit. This switch will significantly enhance image processing capabilities, enabling faster handling of large spatial datasets and improving Java compatibility.
Future-Proof Technology Stack: With the migration to Spring 6 and the shift to JDK 17, GeoServer 3 ensures long-term viability. Addressing the entire GeoServer stack, including enterprise components GeoFence and Cloud Native GeoServer, allows organizations to seamlessly adopt modern infrastructure and deployment models without compromising performance or security.
With this work, GeoServer is moving into a more secure, high-performing future—ready to tackle the evolving needs of the geospatial community. For more information on the work to be performed and its phases, please visit this document.
The crowdfunding will be structured in two phases to ensure success:
Commitment Phase: Sponsors and community members will pledge their financial support during this phase, but no funds will be collected. The goal is to reach a predefined target that covers the full scope of work necessary for the migration.
Funding Activation: Once the target is reached, the crowdfunding will be activated, and sponsors will be invoiced for their pledged amounts. This ensures there is enough financial backing to complete the migration without risking underfunding.
This structured approach ensures that GeoServer 3 is fully funded before any work begins, preventing the risk of an incomplete migration. This guarantees that the project will have the necessary resources to be completed in its entirety.
This structure forms a multi-party agreement:
Consortium: Three companies are forming a consortium (Camptocamp, GeoSolutions, and GeoCat) providing expertise, a proven track record, and capacity. These companies are also taking on responsibility for project management, estimating, and importantly risk.
Supporters: We are seeking organisations to pledge their support via funding during the commitment phase. No funds will be collected until we reach the target established below for the full scope of work necessary.
Community: We ask that our community step forward to match the contributions above with both financial contributions and in-kind development and testing.
The financial target is ambitious, 550,000.00 €. CamptoCamp, GeoCat and GeoSolutions have generously stepped up and will provide 50,000.00€ each, which means the current funding goal starts at 400,000.00 €. Here below you will find the live updated situation as far as committed funding is concerned.
If you are ready to support GeoServer 3, please, fill this online form or contact us at gs3-funding@googlegroups.com to express your interest and pledge your support.
Together, we can secure the future of GeoServer for years to come.
]]>