https://anitagraser.com
- 29 septembre 2026QGIS tabbed ribbon UI experiments
A long-standing feature request in the QGIS repo has been an option for a ribbon-style GUI to replace the plethora of toolbars that usually characterize the top rows of any QGIS window. A couple of months ago Eithan published an experimental “Ribbon Toolbar” plugin for QGIS 3 that implemented a first version of this idea. I recently picked up the threads, ported the plugin to QGIS 4 and continued refining the structure of the tabs and ribbons, cleaning up truncated labels, design logical groups, and making icons for the most commonly used functions (based on my subjective experience, not objectively measured) large / more prominent: The new updated version 0.5 is now available from the QGIS Plugin Repo for you to give it a spin. Please note, however, that the code is NOT intended to be production-ready. Consider this a click-dummy that should facilitate discussion. This version doesn’t implemented any way yet to customize the ribbons. Of course, this could be added at a later stage. In any case, the user can, of course, switch back to good old toolbars at any time. Overall, the design is heavily inspired by LibreOffice’s ribbon theme option and targets new users / teaching situatio … - 18 septembre 2026How to QGIS 4.2 on Linux Mint (Sept ’26)
For a while now, my preferred way of installing QGIS has been from conda-forge. However, while we’re waiting for QGIS 4 to become available on conda-forge, there are alternatives: Option 1: Flatpak In the Software Manager, you can find QGIS from Flathub in two different versions: stable and lts. And stable should give you 4.2 (even if the Software Manager preview shows an older one): Option 2: Meet the official QGIS Docker Images First off, you’ll need Docker. If you haven’t installed it yet, it’s directly available from the Linux Mint Software Manager: From there on, we just switch to the Terminal for the rest. If you get “permission denied while trying to connect to the docker API” when running any of the following commands, you may have to add your user account to the docker group: sudo usermod -aG docker $USERnewgrp docker # or just log out and back in Afterwards, it should be straightforward to get the image from Docker Hub, e.g.: docker pull qgis/qgis:4.2.2-questing And once it’s downloaded, we can launch QGIS: xhost +local:dockerdocker run –rm -it –name qgis \ -v /tmp/.X11-unix:/tmp/.X11-unix \ -e DISPLAY=$DISPLAY \ qgis/qgis:4.2.2-questing qgis Voilá, QGIS 4! To persist y … - 14 septembre 2026MovingPandas is moving to Codeberg
I’ve been testing Codeberg for over a year now, with Trajectools being the largest repo that has already moved its headquarters from Github to Codeberg. I have been very happy with the experience so far and – at the same time – I couldn’t help but notice the further decline of Github performance. Therefore, in the upcoming weeks, I am planning to move the remaining MovingPandas repos. For anyone who wants to contribute, this means that: All further development will move to Codeberg. Codeberg LLM usage policies apply GH repos will remain as read-only mirrors for now. Issue trackers and pull requests on GH will be deactivated. … - 9 août 2026MovingPandas 0.23 released!
The new MovingPandas release 0.23 has just landed in pypi and conda-forge and I want to share with you two highlights: New HTML representations The new HTML representations for Trajectory & TrajectoryCollection objects aim to make interactive data exploration in notebooks more convenient by providing commonly required descriptive data summaries and data previews in a structured way. Before 0.23 New in 0.23 Trajectory distance measures The second highlight of this release are three new trajectory distance measure functions, covering: Frechet distance, Dynamic Time Warping (DTW), and Longest Common Subsequence (LCSS) These are in addition to the already existing minimum distance and Hausdorff distance. You can see them in action in the updated Measuring distances tutorial. … - 26 juillet 2026New Open Basemaps for Austria
For many years now, we have been enjoying the basemap.at service with it’s various basemap options (color, gray, with/without labels, …) in WMTS and vector tiles. Basemap.at Standard WMTS in QGIS (instructions here) For a few weeks now, there is an additional service by BEV: Their cartographic models “Kartographischen Modelle (KM)” are now available as raster (KM-R) in COG-TIFF format. Adding the COG-TIFF URI The downloads come with proper instructions: KM_QGIS_Anleitung_202603 including tips to switch to bilinear resampling for better rendering: BEV KM-R in QGIS Some vector (KM-V) in GeoPackages with QGIS projects providing the layer style and label settings are already available for the Stichtag 30.01.2026 downloads. And they look awesome: BEV KM-V project defaults And without labels KM-V downloads are provided in tiles, so it’s not quite as simple as grabbing the COG URI: It’s worth noting though, that the KM-V GeoPackages are still a work in progress and not all tiles are available for download yet. I’ll keep an eye on the downloads to see when the rest of the tiles become available. Until then, I leave you with a couple of examples of the Großglockner (highest mountain in Aust … - 11 juillet 2026Belé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 The Austrian QGIS user group met online on 25 June to exchange experiences with different webmapping solutions, ranging from QGIS+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. What I found interesting while designing the Belém splash screen was 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 just a convention and not a law of cartography. Historic map of Belém used in the QGIS 4.2 splash screen. 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 … - 10 janvier 2026Notebooks in QGIS
Finally it’s here: Jupyter notebooks inside QGIS. I don’t know about you but I’ve been hoping for someone to get around to doing this for quite a while. Qiusheng Wu published the first version of the Notebook plugin on 26 Dec 2025. Late Christmas present?! For the setup, there’s a handy tutorial by Hans van der Kwast and, additionally, Qiusheng published an intro video: Development is going fast (version 0.3.0 at the time of writing) so there will be new features when you install / update the plugin compared to both the tutorial and the video. The user interface is pretty stripped down with just a few buttons to add new code or markdown cells and to run them. And there is a neat drop-down menu with all kinds of ready-made code snippets to get you started: For other functionalities, for example, to delete cells, you need to right-click on the cell to access the function through the context menu. And, as far as I can tell, there is currently no way to rearrange cells (moving them up or down). I also haven’t quite understood yet what kinds of outputs are displayed and which are not because – quite often – the cell output just stays empty, even though the same code generates output on … - 3 décembre 2025QGIS to (Geo)Pandas – part 3
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 improvemen … - 31 octobre 2025QGIS to (Geo)Pandas follow-up
The conversation around Looking for better ways to convert between QGIS VectorLayer and (Geo)DataFrame is continuing over at https://fosstodon.org/@underdarkGIS/115442614331293320 What I’ve learned so far: QgsVectorLayer.as_geopandas() has landed in QGIS master on 13 Oct 2025. There’s also QgsVectorLayer.field_to_numpy() which will be useful for many applications and has landed on 29 Oct 2025. QgsArrowIterator is in the works right now. Exciting times for spatial data science tooling … - 26 octobre 2025Looking for better ways to convert between QGIS VectorLayer and (Geo)DataFrame
Plugin developers who want to use (Geo)Pandas-based functionality in their plugins regularly face the challenge of converting QGIS vector layers to (Geo)DataFrames. There is currently no built-in convenience function. In Trajectools, so far, I have been performing the conversion manually, looping through all features and taking care of tricky column types, such as datetimes and geometries: def df_from_layer_trajectools(layer,time_field_name= »t »): # Original Trajectools 2.7 version names = [field.name() for field in layer.fields()] data = [] for feature in layer.getFeatures(): my_dict = {} for i, a in enumerate(feature.attributes()): if names[i] == time_field_name and isinstance(a, QDateTime): a = a.toPyDateTime() my_dict[names[i]] = a pt = feature.geometry().asPoint() my_dict[« geom_x »] = pt.x() my_dict[« geom_y »] = pt.y() data.append(my_dict) df = pd.DataFrame(data) return df It works (mostly), but it’s far from fast. For the 25 million Geolife points, it takes 4 minutes: In an attempt to speed-up (and make the conversion more robust, e.g. regarding datetime/timezone conversion and null values), I’ve spent some time at SDSL2025 with Joris Van den Bossche trying a workaround that wri …