Welcome to Planet OSGeo

December 08, 2025

Reinder said “My wife and I did a presentation / lecture on our new book ‘Nederland Waterland’ in the city of Roermond, in the south of the Netherlands, at a bookshop called De kleine tovenaar (the little wizzard). At the children’s books department, they’ve got a few globes … “

by Steven at December 08, 2025 10:00 AM

December 07, 2025

I've got good news for people who love news about Rasterio, the Python package for reading and writing classic GIS raster data. Alan Snow is the release manager for 1.4.4 and 1.5.0 and has shepherded a release candidate with 40 wheels and one source distribution onto the Python Package Index: https://pypi.org/project/rasterio/1.4.4rc0/. The release notes are here.

Please try these out and let us know if they work as expected.

by Sean Gillies at December 07, 2025 01:38 AM

December 06, 2025

December 04, 2025

December 03, 2025

The journey continues: QgsArrowIterator is now merged! This makes it possible to iterate over QgsFeatures as Arrow batches.

This is where we are now, quoting Dewey Dunnington:

import geopandas
from nanoarrow.c_array import allocate_c_array
import qgis
from qgis.core import QgsVectorLayer

# Create a vector layer
layer = QgsVectorLayer("tests/testdata/zonalstatistics/polys.shp", "layer_name", "ogr")
schema = qgis.core.QgsArrowIterator.inferSchema(layer)

it = qgis.core.QgsArrowIterator(layer.getFeatures())
it.setSchema(schema, 1)

c_array = allocate_c_array()
schema.exportToAddress(c_array.schema._addr())
it.nextFeatures(5, c_array._addr())

print(geopandas.GeoDataFrame.from_arrow(c_array))
#> lev3_name                                           geometry
#> 0    poly_1  MULTIPOLYGON (((100.37934 -0.96049, 100.37934 ...
#> 1    poly_2  MULTIPOLYGON (((100.37944 -0.96044, 100.37955 ...
#> 2    poly_3  MULTIPOLYGON (((100.37938 -0.96049, 100.37949 ...

print(geopandas.read_file("tests/testdata/zonalstatistics/polys.shp"))
#> lev3_name                                           geometry
#> 0    poly_1  POLYGON ((100.37934 -0.96049, 100.37934 -0.960...
#> 1    poly_2  POLYGON ((100.37944 -0.96044, 100.37955 -0.960...
#> 2    poly_3  POLYGON ((100.37938 -0.96049, 100.37949 -0.960...

Further improvements are already being planned. To quote from the ticket:

“The final state after this improvement would be a compact way for Arrow Python consumers like GeoPandas to ergonomically consume a layer. Maybe:

geopandas.GeoDataFrame.from_arrow(qgis_layer_object)

Or maybe:

geopandas.GeoDataFrame.from_arrow(qgis_layer_object.getArrowStream())

Looking forward to seeing this develop further.

by underdark at December 03, 2025 08:33 PM

Reinder said “There is this quite prolific Dutch writer Ilja Leonard Pfeijffer, born in 1968. Today I heard a presentation on the work he did when he was a kid: he designed a country called Mocanië. The full design is extremely detailed, with even a language and a grammar. It was quite fascinating – and of course there were maps. It’s all in Dutch of course — but still. See https://literatuurmuseum.nl/verhalen/ilja-leonard-pfeijffer/het-ontstaan#wat-is-mocanie

by Steven at December 03, 2025 10:00 AM

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, and SubProcess.

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.1 degrees, 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.

buffer

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.11 and quadrantSegments to 3, 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.

buffer_quad

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.

buffer_capstyle

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 archsites layer uses the UTM crs, you can set a value like 20.

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.

buffer_fixed

Dynamic Value Buffering

  • To use a specific field for buffer distance, first, enter a zero value 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 cat attribute.

  • 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:streams as the first feature collection and sf:restricted as 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.

intersection

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 label to 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.

interscetion_mode

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.

by Nima Ghasemloo at December 03, 2025 12:00 AM

December 02, 2025

December 01, 2025

November 30, 2025

November 29, 2025

November 28, 2025

November 27, 2025

November 26, 2025

Full release notes at Release v0.8.0 · torchgeo/torchgeo · GitHub

TorchGeo is a PyTorch domain library, similar to torchvision, providing
datasets, samplers, transforms, and pre-trained models specific to
geospatial data.

TorchGeo 0.8 includes 28 new pre-trained model weights and a number of
improvements required for better time series support, including a
complete rewrite of all GeoDataset and GeoSampler internals,
encompassing 8 months of hard work by 23 contributors from around the world.

Highlights of this release

Open and independent governance

You may have noticed that GitHub - torchgeo/torchgeo: TorchGeo: datasets, samplers, transforms, and pre-trained models for geospatial data is now
GitHub - torchgeo/torchgeo: TorchGeo: datasets, samplers, transforms, and pre-trained models for geospatial data. This is not an accident!

Note - TorchGeo now belongs to YOU, please join our monthly Technical
Steering Committee meetings!

TorchGeo was initially created as an intern project at Microsoft's AI
for Good Lab back in 2021. Once we made it open source, we were blown
away by how quickly it was adopted by the AI4EO community! Since then,
over 100 people from around the world have contributed to making
TorchGeo what it is today.

Despite being open source, we have received feedback from many current
and potential contributors that they have found it difficult to
contribute to TorchGeo due to its ownership by Microsoft. While
Microsoft has been an excellent incubator for TorchGeo over the past
four years, we believe TorchGeo has outgrown its incubation phase.

Over the past year, we have been working diligently with Microsoft to
come up with a solution. As of this release, we are excited to announce
the formation of the TorchGeo /Organization/, a governing body designed
to ensure the independence and longevity of the TorchGeo /Project/. The
TorchGeo Organization is led by a Technical Steering Committee (TSC),
initially composed of the current maintainers of the TorchGeo Project:

* @adamjstewart <https://github.com/adamjstewart&gt; (TUM) - Chair
* @calebrob6 <https://github.com/calebrob6&gt; (Microsoft)
* @anthonymlortiz <https://github.com/anthonymlortiz&gt; (Microsoft)
* @isaaccorley <https://github.com/isaaccorley&gt; (Wherobots)
* @ashnair1 <https://github.com/ashnair1&gt; (Space42)
* @nilsleh <https://github.com/nilsleh&gt; (TUM)

TorchGeo now lives at TorchGeo · GitHub, and Microsoft has
graciously volunteered to give away the copyright to YOU, the TorchGeo
/Contributors/. We would like all TorchGeo users and developers to take
ownership of the project, and thus invite each and every one of you to
join our TSC meetings. Please join the |#technical-steering-committee|
channel in the TorchGeo Slack
<Join torchgeo on Slack;
for more information on our monthly meeting schedule.

Other than this new open and independent governance, not much will
change with the TorchGeo Project. TorchGeo will always remain open
source under an MIT license and be free for all users and developers. We
hope this change will open up opportunities for more collaboration, more
awesome libraries built on top of TorchGeo, and more confidence in the
long-term future of the project!
_______________________________________________
Announce mailing list
Announce@lists.osgeo.org

1 post - 1 participant

Read full topic

by jsanz at November 26, 2025 08:34 AM

November 25, 2025

What’s new in a nutshell The GRASS GIS 8.4.2 release provides more than 35 improvements and bug fixes compared to version 8.4.1. The changes span core GIS modules, GUI, Python support, packaging, and build infrastructure — making GRASS more stable, reliable, and polished for day-to-day use. Most importantly, since the 8.4.0 release: location is now project: The Python API, command line, and graphical user interface are using project instead of location for the main component of the data hierarchy while maintaining backward compatibility.

November 25, 2025 09:42 AM

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.

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:

Release notes: ( 2.28.1 | 2.28.0 | 2.28-M0 )

by Andrea Aime at November 25, 2025 12:00 AM

November 24, 2025

Credits : Bru-nO (Pixabay Content License)

Thanks to funding from the Bordeaux Metropolis, I had the chance to work on CMYK (Cyan Magenta Yellow blacK) support in QGIS. The metropolis’ goal is to remove the last barrier preventing their complete migration from ArcGIS to QGIS.

The developments are now complete and will be available in QGIS version 3.40, scheduled for release in October 2024, before becoming the next LTR in February 2025. It should be noted, however, that CMYK support will only be complete in QGIS versions built with Qt 6 (still unofficial version) for reasons explained in the article. On Windows, this version can currently only be installed using OSGeo4W (qgis-qt6-dev version).

EDIT: Actually, QGIS version built with Qt 6.8, which ships the needed modifications for CMYK PDF export, is not yet released. More information here.

What is CMYK?

You probably know RGB, which allows you to code a color on screen by choosing the amount of red, green and blue in that color. You may also use TSL or TSV.

RVB – Credits : Daniel Roberts (Pixabay Content License)

These 3 color references allow a color to be coded for a screen, while CMYK targets printers by allowing to set the exact quantity of ink that will be released during printing (hence the 4 CMYK components, one per ink cartridge).

 

CMYK ( here from left to right KCMY ) – Credits : Magnascan (Pixabay Content License)

The characteristics of CMYK differ greatly from RGB, it’s considered a subtractive colorimetric mode, because the ink absorbs light unlike RGB which is said to be additive, the more red, green, blue you have the closer you are to full light, white.

The intrinsically different nature of these 2 color spaces means that it is strongly advised not to convert from one to the other. The best is to choose a color in a space (CMYK for printing, RGB for rendering on screen) and stick to it.

Worse, printing the same color is different depending on the printer, ink, paper… The choice of a CMYK color has to be done in a color space, represented by a ICC profile file, provided by your printer. It is a bit like a color chart used when choosing paint.

 

Now you can argue about the REALLY good color of a road line – Credits : Yanis Ladjouzi (Pixabay Content License)

Developments in QGIS… and Qt

It is now possible in QGIS to:

  • Enter colors in CMYK format, and in floating precision;
  • Define your preferred color mode (RGB or CMYK) and your color space;
  • Generate a file in PDF/X-4 format (ready for printing) embedding a color space and using CMYK colors;
  • Allow the expression engine to manipulate CMYK colors without converting them to RGB;
  • Manage CMYK color ramps;
  • Lots of other small improvements and corrections about color management.

 

Selecting colors in QGIS in CMYK

The beautiful story of Open source

I took great pleasure in participating in this development because it is the result of the collaboration of many players in free software.

During a first phase of study concerning the support of CMYK in QGIS, we quickly identified that Qt, the framework used by QGIS for rendering maps, has limitations. It converts all colors to RGB when rendering maps in PDF format and its support for CMYK color spaces is incomplete.

It is therefore necessary to make it evolve. We therefore turn to our preferred partner when it comes to Qt, KDAB, and more precisely Giuseppe D’Angelo who then carries out the necessary developments.

Regarding new features, these are only available in Qt 6 (Qt 5 is end of life). This is why CMYK support is incomplete in official versions of QGIS still based on Qt 5.

QGIS.org, the association that oversees the QGIS project, decided to fund the developments on Qt. Oslandia, on the other hand would have to manage these developments and then to carry out the integration in QGIS. This integration as well as the related new features was funded by the Bordeaux metropolis.

My developments were then reviewed by other QGIS contributors. (If you want to know more about the QGIS contribution process, you can read a previous blog post about software quality in QGIS)

Finally, I wanted to give a special thanks to Jehan, developer on the GIMP project. His availability and thoroughness in our mail exchanges greatly helped me understand the technical and functional issues of CMYK, and most certainly contributed to the quality of the result.

Next

QGIS 3.40 will therefore be able to generate a PDF/X-4 file using CMYK colors. Qt, for its part, improves CMYK support, PDF writing, and color space management.

Thanks again to the Bordeaux metropolis and QGIS.org for funding these developments, and all the people involved in their realization.

We would be delighted to have feedback from users on your use cases related to color management in QGIS. Do not hesitate to write to us or comment on our posts to tell us how you use these features.

These foundations in the management of color spaces in QGIS open the door to future improvements. If you are interested in this topic and would like to contribute, please contact us at infos+qgis@oslandia.com and check out our QGIS support offer.

by Julien Cabieces at November 24, 2025 12:30 PM

November 23, 2025

TorchGeo 0.8.0 Release Notes

TorchGeo 0.8 includes 28 new pre-trained model weights and a number of improvements required for better time series support, including a complete rewrite of all GeoDataset and GeoSampler internals, encompassing 8 months of hard work by 23 contributors from around the world.

Highlights of this release

Open and independent governance

TorchGeo logo

You may have noticed that https://github.com/microsoft/torchgeo is now https://github.com/torchgeo/torchgeo. This is not an accident!

Note

TorchGeo now belongs to YOU, please join our monthly Technical Steering Committee meetings!

TorchGeo was initially created as an intern project at Microsoft's AI for Good Lab back in 2021. Once we made it open source, we were blown away by how quickly it was adopted by the AI4EO community! Since then, over 100 people from around the world have contributed to making TorchGeo what it is today.

Despite being open source, we have received feedback from many current and potential contributors that they have found it difficult to contribute to TorchGeo due to its ownership by Microsoft. While Microsoft has been an excellent incubator for TorchGeo over the past four years, we believe TorchGeo has outgrown its incubation phase.

Over the past year, we have been working diligently with Microsoft to come up with a solution. As of this release, we are excited to announce the formation of the TorchGeo Organization, a governing body designed to ensure the independence and longevity of the TorchGeo Project. The TorchGeo Organization is led by a Technical Steering Committee (TSC), initially composed of the current maintainers of the TorchGeo Project:

TorchGeo now lives at https://github.com/torchgeo, and Microsoft has graciously volunteered to give away the copyright to YOU, the TorchGeo Contributors. We would like all TorchGeo users and developers to take ownership of the project, and thus invite each and every one of you to join our TSC meetings. Please join the #technical-steering-committee channel in the TorchGeo Slack for more information on our monthly meeting schedule.

Other than this new open and independent governance, not much will change with the TorchGeo Project. TorchGeo will always remain open source under an MIT license and be free for all users and developers. We hope this change will open up opportunities for more collaboration, more awesome libraries built on top of TorchGeo, and more confidence in the long-term future of the project!

Change detection support

BRIGHT dataset

TorchGeo 0.8 introduces support for change detection datasets (B x 2 x C x H x W)! This includes a new ChangeDetectionTask LightningModule with support for binary, multiclass, and multilabel change detection. This LightningModule supports both early-fusion (all encoders from timm and decoders from SMP) and the following change detection-specific late-fusion architectures:

TorchGeo also includes the following binary and multiclass change detection datasets:

All datasets have a corresponding LightningDataModule that is compatible with and tested against ChangeDetectionTask.

P.S. For other change detection models, check out @Z-Zheng's excellent torchange library!

Backwards-incompatible changes

Warning

TorchGeo 0.8 is unusual in the number of backwards-incompatible changes it includes. In preparation for a more stable 1.0 release in the future, we have made several changes to better support time series data. Below we motivate each change and describe how to migrate any existing code.

GeoDataset/GeoSampler: BoundingBox → GeoSlice

Prior releases of TorchGeo used a custom BoundingBox object for GeoDataset indexing:

from torchgeo.datasets import BoundingBox

bbox = BoundingBox(xmin, xmax, ymin, ymax, tmin, tmax)
ds[bbox]

This custom BoundingBox object was quite different from other libraries and lacked a lot of the flexibility needed for time series support. All inputs were required, even if space or time were unimportant, and only integer tmin/tmax were supported.

TorchGeo 0.8 adopts a powerful slicing syntax similar to numpy, xarray, and torch:

ds[xmin:xmax:xres, ymin:ymax:yres]
ds[:, :, tmin:tmax:tres]
ds[xmin:xmax, ymin:ymax, tmin:tmax]

Spatial-only, temporal-only, and spatiotemporal slices are all supported. Each slice can optionally specify the resolution of the returned data. If any min, max, or res values are missing, the defaults for the full dataset are used. While x and y are in float, t is in datetime.datetime for more natural temporal slicing.

If you are using GeoDataset in combination with GeoSampler, no changes are required for forwards-compatibility, as GeoSampler and GeoDataset.bounds now return these slices. BoundingBox is now deprecated and will be removed in a future release.

Tip

If you need a single BoundingBox-like object, you can use a tuple of slices like so:

bbox = (slice(xmin, xmax), slice(ymin, ymax), slice(tmin, tmax))

If you need to be able to calculate the area, intersection, or union of a bounding box, we suggest using shapely.box.

GeoSampler/splitters: BoundingBox → Polygon, Interval

In previous releases of TorchGeo, if you wanted to select a smaller region of interest (ROI) for training or validation, you could either use the roi parameter of GeoSampler or use roi_split and time_series_split to directly split your GeoDataset. However, only BoundingBox objects were supported.

In TorchGeo 0.8, you can now use arbitrary shapely.Polygon and pd.Interval objects for ROI and TOI bounds. These polygons do not have to be boxes, they can be any shape, including a GeoJSON outline of a complex island archipelago.

Tip

To migrate simple boxes to this new syntax, replace:

roi = BoundingBox(xmin, xmax, ymin, ymax, tmin, tmax)

with:

roi = shapely.box(xmin, ymin, xmax, ymax)  # note change in order
toi = pd.Interval(tmin, tmax)

GeoDataset/GeoSampler: rtree → geopandas

TorchGeo previously used the R-tree library for spatiotemporal indexing of geospatial data. This allowed for fast computation of intersection, union, and indexing. However, R-tree lacks support for a lot of desirable geospatial and geotemporal features, including non-rectangular polygons, automatic reprojection, datetime objects, and spatial/temporal aggregation.

TorchGeo 0.8 switches TorchGeo's spatiotemporal indexing backend from R-tree to geopandas, which supports all of these features and more with similar performance. Geopandas can efficiently scale to large datasets using dask-geopandas and multithreading. Entire shapefiles can be directly stored in geopandas instead of only storing a single bounding box.

This change will be most notable for users who write custom GeoDataset subclasses. If you are using a built-in dataset, you may not even notice this change. In the future, we plan to continue improving support for non-rectangular polygons in both the dataset and sampler so that nodata pixels can be easily avoided.

VectorDataset: fiona → geopandas

Similarly, all VectorDataset classes now use geopandas instead of fiona for data loading. This results in one less dependency and allows for complicated expressions without for-loops, often resulting in faster data loading. The only backwards-incompatible change here is that the get_label method now takes a pd.Series row as input instead of a fiona.Feature.

Change detection datasets: C x H x W → 2 x C x H x W

Previously, our time series datasets were inconsistent, with some datasets returning a single T x C x H x W object, others combining the T and C dimensions into a (T C) x H x W object, and others returning multiple C x H x W objects labeled image1, image2, image_pre, image_post, etc.

All change detection datasets now return a single 2 x C x H x W object. The remaining time series datasets will be changed in the next release to T x C x H x W.

Custom transform deprecation removals

This release removes several custom or private transforms that have been deprecated for several releases or are not compatible with time series data:

Removed Suggested Replacement
AugmentationSequential kornia.augmentation.AugmentationSequential
_ExtractPatches kornia.augmentation.CenterCrop
_Clamp torchvision.transforms.v2.Lambda(lambda x: torch.clamp(x, 0, 1))

CenterCrop is not identical to _ExtractPatches, and you may need to change the patch_size to get full coverage during evaluation. We are planning to upstream a method directly to Kornia or torchvision to better support this.

Dependencies

New dependencies

Removed dependencies

Changes to existing dependencies

  • kornia: 0.8.2+ now required (#3094)
  • lightning: 2.5.6 not supported (#3080)
  • numpy: 1.24+ now required (#1490)
  • rasterio: 1.4.3+ now required (#1490)
  • shapely: 2+ now required (#2747)
  • timm: 1.0.3+ now required (#2828)
  • xarray: 0.17+ now required (#1490)

Datasets

image

New datasets

Changes to existing datasets

  • Dataset plots: portrait → landscape (#3093)
  • BRIGHT: image_pre, image_post → image (#2862)
  • BRIGHT: add vmin/vmax to plots (#3097)
  • CaBuAr: (T C) → T x C (#2863)
  • CDL: add 2024 data (#2939)
  • ChaBuD: (T C) → T x C (#2878)
  • ChaBuD: fix link to homepage (#3128)
  • EDDMapS: add plot method (#2709)
  • GBIF: add plot method (#2741)
  • LEVIR-CD: image1, image2 → image (#2879)
  • iNaturalist: add plot method (#2743)
  • OSCD: image1, image2 → image (#2422)
  • OSCD: fix documentation of image sizes (#3128)
  • MMEarth: add plot method (#2759)
  • Sentinel-2: support for .SAFE multiresolution products (#3043)
  • Western USA Live Fuel Moisture: add plot method (#2769)
  • xView2: multi-temporal semantic segmentation → change detection (#2906)

Changes to dataset base classes

  • GeoDataset: rtree → geopandas (#2747)
  • GeoDataset: add support for slicing (#2804, #2847)
  • XarrayDataset: new base class, still experimental (#1490)
  • VectorDataset: fiona → geopandas (#2962, #3114, #3118, #3119)
  • VectorDataset: add support for object and instance detection (#2819)
  • IntersectionDataset: support spatial-only intersection (#2837)

Utilities

  • BoundingBox: deprecated in favor of GeoSlice (#2847)
  • pad_across_batches: time series collation function (#2921)
  • splitters: rtree → geopandas (#2747)
  • roi_split: support arbitrary Polygon roi (#2835)

Data Modules

New data modules

Changes to existing data modules

  • CaBuAr: use video transforms (#2863)
  • ChaBuD: use video transforms (#2878)
  • LEVIR-CD: use video transforms (#2879)
  • OSCD: use video transforms (#2422)
  • OSCD: support for non-square images (#3103)
  • xView2: use video transforms (#2906)

Losses

  • QR: improve numerical stability (#2796)

Models

Aurora Foundation Model

New model architectures

New model weights

Changes to existing models

  • All weight transforms are now exportable (#2893)
  • MOSAIKS: new alias for RCF (#2915)
  • Panopticon: speed up position embedding (#2888)

Samplers

  • GeoSampler: r-tree → geopandas (#2747)
  • GeoSampler: add support for slicing (#2804, #2847)
  • GeoSampler: support arbitrary Polygon roi, add toi (#2812)
  • GridGeoSampler: default stride = patch size (#2722)

Scripts

  • CLI: add --version argument (#2912)

Trainers

New trainers

Changes to existing trainers

  • Classification: class_weights list support (#2707)
  • Semantic segmentation: class_weights list support (#2707)
  • Semantic segmentation: add support for DPT, Segformer, and UPerNet decoders (#2828)
  • Semantic segmentation: add support for satellite image time series (#2921)

Transforms

New transforms

Removed transforms

Documentation

  • API: restructure model docs (#2892)
  • README: add YouTube channel (#3107)
  • README: add new podcast episode (#2947)
  • README: add more Slack links (#2953)
  • Related Libraries: auto-update metrics (#3001, #3011, #3013, #3120, #3125)
  • Related Libraries: TorchGeo rtree → geopandas (#2747)
  • Related Libraries: fix TerraTorch weights, URL, conda-forge (#3012, #3083, #3104)
  • Related Libraries: add GDL (#3008)
  • Related Libraries: add torchange (#3072)

Tutorials

  • TorchGeo: introduce new slicing syntax (#2747, #2804)
  • Embeddings: rename section header (#3087)

Governance

  • Add formal governance (#2514)
  • Copyright: Microsoft Corporation → TorchGeo Contributors (#2935, #2968, #3010)
  • Rename references to previous GitHub organization (#2941)
  • pyproject.toml: add explicit license-files (#3126)

Tests

  • Bundle all trainer tests together (#3066)
  • Silence shapely warnings in test data (#3077)
  • Reduce batch size to silence warnings (#3063)
  • No unconditional skips (#3096)

Contributors

This release is made possible thanks to the following contributors:

by adamjstewart at November 23, 2025 09:17 PM

November 22, 2025

November 21, 2025

Ken drew my attention to the EUFA logo on the Europa League Cup. I think the purpose was that Arsenal haven’t won much in the last 20 years while this year’s cup was being held by the Spurs manager Ange Postecoglou who subsequently got sacked (twice within a few months!)

by Steven at November 21, 2025 10:00 AM

Dear all,

the CRO is pleased to announce the list of new OSGeo Carter Members:

* Carlos Eduardo Mota from Brasil
* Luís Calisto from Portugal
* Kateryna Konieva from Portugal
* Benjamin Webb from United States of America
* Joseph Emile Honour Percival from Samoa
* Weston Renoud from Netherlands
* Felix Delattre from Germany
* Julia Signell from United States of America
* Simon Nitz from New Zealand
* Pete Gadomski from United States of America
* Gabriel De Luca from Argentina
* Ulrike Assmann from Germany
* Mikhaïl Jean de Dieu Dotou Padonou from Benin
* Sunghoon Cha from South Korea
* Max Jones from United States of America
* Huidae Cho from United States of America
* Heather Hillers from Germany
* Juan Pablo Duque Ordoñez from Colombia
* Evelyn Uuemaa from Estonia
* Jani Kylmäaho from Finland
* Nicklas Larsson from Hungary
* Michael Barton from United States of America
* Jarrett Keifer from United States of America
* Céline Vilain from Belgium
* Niklas Alt from Germany
* Christian Strobl from Germany
* Andrés Gómez Casanova from Colombia
* Mirko Blinn from Germany
* Alastair Graham from United Kingdom
* James Milner from United Kingdom
* Jonny Huck from United Kingdom
* Michel Stuyts from Belgium
* Marc Ducobu from Belgium

You may visit the nominations page to learn more about the new members [0].

This year there were 33 valid nominations and all were accepted. 260 charter
members cast their vote, with each nominee attaining more than 100 votes. The
OSGeo Foundation now counts 468 active Charter Members.

The board approved the new members days ago[1].

Warm regards,

Luís de Sousa
(your 2025 CRO [2])

[0] New Member Nominations 2025 - OSGeo
[1] https://www.loomio.com/p/v5S38Red/motion-to-approve-osgeo-charter-member-2025-election-results
[2] Chief Returning Officer - OSGeo
_______________________________________________
Announce mailing list
Announce@lists.osgeo.org
Announce Info Page

1 post - 1 participant

Read full topic

by jsanz at November 21, 2025 09:57 AM

November 20, 2025

November 19, 2025

A hydraulic engineer by training, Nicolas Godet has been working at ISL Ingénierie for just over seven years and holds the position of hydraulic project manager (flood risk, hydraulic structure safety), deputy director of the Saint-Jean-de-Luz facility, and QGIS (and GIS in general) advisor.

He discusses the implementation of QDT and the associated methodology for deploying QGIS across ISL’s IT infrastructure.

What are the objectives of the collaboration?

Before I took charge of deploying QGIS at ISL, it was a bit of a mess: no one had the same version, the same plugins, or the same practices.
Following the switch to QGIS3, there was a desire to standardize the QGIS fleet at ISL to have the same version, the same plugin base, and preconfigured profiles.

An initial, semi-homemade solution was implemented in 2022, but it proved difficult to maintain.

At the end of 2024, with a budget allocated, we decided to seek assistance from Oslandia to professionalize our QGIS deployment so that every employee would be using the same version:

  • facilitate project sharing within ISL and with our clients,
  • have a common and up-to-date plugin base,
  • benefit from advanced pre-configuration of user profiles.

The ultimate goal was to be able to update QGIS without disrupting all the configurations.

What challenges does this project address?

The challenge was to be able to keep up with developments in QGIS while retaining profile configurations. Having attended a few presentations (QGIS Days), I had heard about QDT. After preliminary discussions with Oslandia (and in particular with Julien Moura), we agreed to go ahead with customized training. This customized training allowed us to adapt the content to our needs.

How did the collaboration with Oslandia go?

The Oslandia teams are attentive, adapt to our needs, which are not always simple, and were able to offer us tailor-made training.

We decided to have four half-days spread out over several weeks, allowing us to cover the theory and a few examples during the half-day, then work on our own and come back to the next session with questions and ask for more in-depth coverage of certain points rather than others.
There’s not much else to add except that it went very well!

Since this training, ISL has been able to invest in QDT.

by Caroline Chanlon at November 19, 2025 10:40 AM

November 18, 2025

November 17, 2025

Em ambientes onde o GeoServer é executado dentro de um contêiner Apache Tomcat, pode surgir a necessidade de alterar o caminho de contexto (contextPath) da aplicação, ou seja, o endereço pelo qual o serviço será acessado.

Essa modificação é comum em cenários de ambientes compartilhados, integrações com outros sistemas, migrações de infraestrutura ou simplesmente para padronizar URLs (por exemplo, mudar de /geoserver para /geoserver-admin ou /gis).

No entanto, antes de fazer essa alteração, é importante revisar as configurações do Tomcat, especialmente no arquivo server.xml, e entender a diferença entre deploy automático e manual, garantindo que o GeoServer seja publicado corretamente no novo contexto.

Gostaria de agradecer ao Carlos Eduardo Mota, que foi quem elaborou esse tutorial e enviou gentilmente para publicação neste Blog.

1) Verificando o server.xml

Local do arquivo:

$CATALINA_HOME/conf/server.xml

No arquivo, observe:

  • Na tag <Engine>:
    • Propriedade name (geralmente Catalina).
    • Propriedade defaultHost.
  • Na tag <Host>:
    • Propriedade appBase (pasta onde os apps são implantados, normalmente webapps).
    • Propriedade autoDeploy (deve estar true para deploy automático).

Exemplo:

<Engine name="Catalina" defaultHost="localhost">

    <!-- Configurações de cluster, log e segurança omitidas -->

    <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
    </Realm>

    <Host name="localhost" appBase="webapps"
          unpackWARs="true" autoDeploy="true">

        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b"/>
    </Host>
</Engine>

2) Deploy automático vs. manual

Por padrão, o GeoServer é implantado automaticamente quando o arquivo .war é colocado na pasta definida como appBase no <Host>, geralmente:

$CATALINA_HOME/webapps

Exemplo: colocar meu-app.war em webapps/ fará com que ele seja acessível via /meu-app.

Se você não deseja deploy automático (ou precisa de um contexto customizado), defina o contexto manualmente usando um arquivo de contexto.

3) Deploy manual com arquivo de contexto

  1. Posicione o .war (ou o diretório do app já expandido) fora da pasta appBase.
  2. Crie um arquivo de contexto .xml com o nome que deseja usar como contextPath do app.

Onde criar:

$CATALINA_HOME/conf/[EngineName]/[HostName]/

Exemplo de caminho real:

$CATALINA_HOME/conf/Catalina/localhost/geoserver-admin.xml

Conteúdo do arquivo de contexto:

<Context docBase="webapps.dist/geoserver" />

Neste exemplo, o contexto será:

http://localhost:8080/geoserver-admin

E o diretório do GeoServer está em:

$CATALINA_HOME/webapps.dist/geoserver

O diretório webapps.dist é fornecido nas imagens de container para colocar webapps para distribuição, e não para deploy automático. É provável que nas instalações clássicas do tomcat não deva existir esse diretório. Nesse caso, é necessário criar esse diretório dentro de $CATALINA_HOME.

Observação importante: o nome do arquivo (geoserver-admin.xml) define o nome do contexto (/geoserver-admin) e tem precedência sobre qualquer META-INF/context.xml incluído no .war ou na aplicação.

O arquivo context.xml pode ser expandido e ser utilizado para outras finalidades, como predefinir recursos de conexão de banco de dados (os famosos JNDI), mas isso é assunto para outro post.

Referências

by Fernando Quadro at November 17, 2025 12:00 PM

Este 13 de noviembre se celebró el acto de clausura de la VIII edición del Curso-Concurso de Geoalfabetización mediante Tecnologías de la Información Geográfica (TIG), una iniciativa internacional que impulsa el aprendizaje geográfico y territorial a través de herramientas digitales abiertas.

El primer premio fue para el equipo de los Liceos 2 y 3 de Salto, con el proyecto “Mapeando los riesgos: cartografía digital de la siniestralidad vial y la accesibilidad urbana de Salto”, destacado por su enfoque innovador, su análisis territorial y su aporte a una comprensión más sostenible del entorno urbano.

Una iniciativa educativa con impacto real

El curso-concurso es impulsado por la Dirección Nacional de Topografía del MTOP, la Inspección Nacional de Geografía y Geología de DGES/ANEP y Ceibal, con el apoyo de la Universidad Politécnica de Madrid, Universidad Central “Marta Abreu” de Las Villas, Asociación Nacional de Profesores de Geografía, Dirección General de Educación Técnico Profesional (UTU) y la Asociación gvSIG.

De los proyectos presentados, también resultaron finalistas:

  • Liceo 20 de Montevideo“Evidencia del picudo rojo en palmeras del barrio Punta Gorda”
  • Liceo 1 “Carlos Brignoni” y Liceo 2 de Trinidad (Flores)“Lo que fluye bajo la lupa: mapeando los riesgos”
  • Liceos 2 y 3 de Salto“Cartografía digital de la siniestralidad vial y la accesibilidad urbana de Salto”

Un compromiso continuo con la educación geográfica

En el evento participaron autoridades del MTOP, DGES, UTU, Ceibal, la IDE y la OPP.
El director nacional de Topografía, Ernesto Silveira, subrayó que es “un orgullo enorme seguir apoyando esta iniciativa”, destacando la creatividad y frescura de los trabajos presentados.
Por su parte, Sergio Acosta y Lara, jefe del Departamento de Geomática y coordinador del concurso, valoró el compromiso estudiantil y docente, y la importancia de defender una educación pública de calidad.

Desde 2011, la Dirección Nacional de Topografía impulsa estas experiencias junto a Ceibal y la Asociación gvSIG, fortaleciendo las competencias digitales y territoriales de estudiantes y docentes, y generando impactos reales en sus comunidades.

by Alvaro at November 17, 2025 08:46 AM