Tag: mobility data science

Belém, Salzburg, and onwards

It’s been a couple of busy weeks, with the QGIS 4.2 release and meetings and conferences all over the place before a few, hopefully quieter, weeks of summer break.

QGIS

First, the Austrian QGIS user group met online on 25 June. The topic was webmapping, with multiple users presenting their webmapping solutions, ranging from Lizmap to QGIS Cloud.

A few days later, QGIS 4.2 was released on 3 July 2026. This release is named Belém do Pará, after the Brazilian city that hosted both FOSS4G and a QGIS user meeting back in 2024. MundoGEO has the details on the naming, if you’re curious about the backstory. Worth noting: 4.2 “Belém do Pará” will be the next LTR, so if you’re using the long-term release, this is the one to watch for.

On a side note, while designing the Belém splash screen, it was interesting to see that historic maps of Belém don’t have north at the top. Instead, they’re rotated with north pointing either left or right. A nice little reminder that “north-up” is a convention, not a law of cartography.

Historic map of Belém. Source: https://commons.wikimedia.org/w/index.php?title=File:Planta_da_Cidade_de_Belem_do_Gram_Par%C3%A1_(ca._1773).jpg

AGIT 2026

This week, I made my way to Salzburg for AGIT, my favorite Austrian GIS conference.

On the first day, I took part in the AGEO Podium discussion, together with Andreas Hocevar (the father of OpenLayers), on the OGC API standards, since many users aren’t even aware of these new standards yet.

Photo by Michael Szell. Source: https://datasci.social/@mszll/116889779516757509

Thursday was talk day for me: I presented MobiML, a new Python library designed to streamline the development of machine learning workflows for trajectory data. I hope this library can help make Mobility Data Science more approachable and results more reproducible.

Right after my talk, Michael Szell presented “Assessing the Danish Bicycle Node Network”, building the data and algorithm foundation for active mobility planning and research. If you want to dig into the tools behind it, check out bikenetwork.dk and bikenetkit.org.

Michael is giving a full talk on this on Tuesday at the Complexity Science Hub in Vienna, if you want to hear more.

FOSS4G Europe, from the sidelines

Unfortunately, I missed FOSS4G Europe in Timișoara the week before, so I followed along via the #foss4ge2026 hashtag instead. Iván Sánchez’s talk on the BOSCO ruling, arguing that all government software must be explainable, is just one example of the talks I would have loved to see in person. There was also the already traditional QGIS Feature Frenzy by Kurt Menke and a QGIS hydrological analysis workshop by Hans who also has a full FOSS4G Europe 2026 summary worth reading.

Also relevant: the Birds of a Feather session on AI in OSGeo projects has spilled over onto the OSGeo discuss mailing list. Definitely a thread worth following or getting involved in if you maintain or contribute to open source geospatial projects.

What’s next

Besides MobiML, work also continues on the MovingPandas front. There are a few open pull requests I want to work through ahead of the next release.

After the summer break, the conference season picks back up quickly: FOSS4G 2026 in Hiroshima (30 August–5 September), Spatial Data Science across Languages (SDSL) 2026 in Jena (16–17/18 September), and the QGIS conference 2026 in Switzerland (5–6 October), where I’ll be speaking about AI in the QGIS ecosystem.

For a more complete picture of what is going on in geospatial worldwide, check out (and don’t forget to bookmark) Jakub‘s comprehensive list of geospatial conferences at github.com/Nowosad/geospatial-conferences.

Learn More

QGIS User Conf 2025 videos have landed!

The QGISUC2025 team has done an awesome job recording and editing the conference presentations. All “presentation” type talks where the presenter has accepted to be published are now available in a dedicated list on the QGIS Youtube channel.

I also had the pleasure of presenting our Trajectools plugin and you can see this talk here:

Thank you to all the organizers, speakers, and participants for the great time!

Learn More

Speed up your analytics with the new MovingPandas 0.22 and Trajectools 2.6

The latest releases of MovingPandas and Trajectools come with many “under the hood” changes that aim to make your movement analytics faster:

  1. Instead of immediately creating a GeoPandas GeoDataFrame and populating the geometry column with Point objects, MovingPandas now has “lazy geometry column creation” that holds off on this operation until / if the geometries are actually needed. This way, for many operations, no geometry objects have to be generated at all.
  2. MovingPandas TrajectorySplitters now support parallel processing and Trajectools uses parallel processing whenever available (e.g. for adding speed & direction metrics, detecting stops, splitting trajectories).
  3. When a minimum length is specified for trajectories, MovingPandas now avoids computing the total trajectory length and, instead, immediately stops once the threshold value has been reached (“early skip”).
  4. Trajectools now offers the option to skip computation of movement metrics (speed & direction). This way, we can skip unnecessary computations and leverage the lazy geometry column creation, wherever applicable.

Let’s have a look at some example performance measurements!

Example 1: MovingPandas ValueChangeSplitter

The ValueChangeSplitter splits trajectories when it detects a value change in the specified column. This is useful, for example, to split up public trajectories that contain a “next_stop” column.

The following graph shows ValueChangeSplitter runtimes for different minimum trajectory length settings (from 0 to 1km, 100km, and 10,000km):

We see that the new, lazy geometry column initialization outperforms the old original code in all cases (e.g. 57% runtime reduction for 1km), except for the worst-case scenario, when the original implementation discards all trajectories as too short right from the start. (For most use cases, min_length will be set to rather small values to avoid creation of undesired short trajectory fragments, similar to sliver polygons in classic geometry operations.)

Additionally, we can engage multiprocessing by setting the n_processes parameter, e.g. to the number of CPUs to achieve further speedup:

Example 2: Trajectools

By applying all above-mentioned speedup techniques, Trajectools is now considerably faster. For example, the following runtime reductions can be achieved by deactivating the “Add movement metrics (speed, direction)” option in the algorithm dialog:

  • Create trajectories: 62%
  • Spatiotemporal generalization (TDTR): 78%
  • Temporal generalization: 81%
  • Split trajectories at stops: 53%

I have also updated the default trajectory points output style. It now uses a graduated renderer to visualize the speed values (if they have been calculated) instead of the previously used data-defined override. This makes the style faster to customize and provides a user-friendly legend:

For more infos, have a look at:

Enjoy the latest performance increases!

Learn More