Weeknotes: 28th September 2026

Last two weeks

Copenhagen

I missed my weeknotes last week due to being away in Copenhagen for a few days. Other than adding to the prevailing narrative that Copenhagen is a nice place, a few specific notes for here.

Firstly, I wrote last year about learning that the Baltic Sea is effectively brackish water, and so I was pleased to spot this salinity map in the local aquarium, Den Blå Planet:

This is a topic that is once again close to mind as I realise that from space you can't really tell water salinity, making the results I'm getting with coastal waters and lakes in my habitat map work somewhat challenging.


Next up I saw this wonderful landscape in the Fire & Ice exhibition of works by Kalaallit artists at the Copenhagen Contemporary art centre:

It is a rendition of the town of Maniitsoq in Kalaallit Nunaa/Greenland, by Emilia Sølvsten rendered in sugar cones on a sugar base, linking the colonial past of the country with the product that is also heavily tied to colonial history. As someone who builds maps, I found the landscape itself a wonderful artefact, something that the Copenhagen Contemporary does well with it's series of very large halls allowing for art to be built at a scale. At the same time linking the cartography to europe's past colonialism is an interesting inversion of maps being used by those trying to take control rather than those who have been on the other side of things. As someone who builds maps I try to be aware of the way we've traditionally drawn and rendered the world in 2D has been driven by those who wish to assert a global, western view, rather than one that will speak at a local scale, which goes beyond projection, but to even concepts like how we colour water on maps. And whilst today most people making maps aren't trying to make such assertions of power, it's just built into the defaults in all the tools we use, and what feels like no-choice is still reinforcing that legacy. There's more on the topic in this article by Emily Jacobi, including some nice physical maps made in Kalaallit Nunaa.


Finally, on the topic of maps, I was very taken with not just the local public transport infrastructure (which worked amazingly well), but also the map:

Superficially it is just another riff on a common theme for public transport maps, but I like the rainbow swoop through the city centre, and in particular I love the typeface they use:

It seems a nicely humanised version of the original Macintosh system font Chicago to my eyes. As luck would have it, there was an exhibit at the Danish Design Museum about the work of Kontrapunkt, the design agency who made the custom typeface used.

Such a lovely font!

LIFE catchup

As I mentioned last time that I was having to do an update to the LIFE pipeline, and that dragged on. I managed to avoid restructuring the pipeline to avoid some of the slowness of using snakemake to do the dependancy tracking on a per species level. When I started the pipeline it was on a home-grown custom pipeline tool, where this was faster, but snakemake does struggle with the fact that in the LIFE pipeline we use 34K species to generate around 250K AOHs and then another 250K per-species extinction risk maps before reducing them again to the final output. I did a little work towards making the AOH calculator support building AOHs from a single GPKG/GeoJSON of many species rather just one species per input, but my pending trip to Copenhagen and my pending deadline to get some LIFE data to colleagues made me chicken out of a re-write of all that code just now.

In the end I managed to get some performance wins by discoverring that by default gdalwarp is very memory conservative, and if you tell it to use more memory using the -wm flag then it gets significantly faster. Our big servers have over a terabyte of memory (bought in the pre-AI bubble days - so expensive, an order of magnitude less expensive than today), and so telling the gdalwarp stages in the pipeline to use 20% of available RAM got my reprojection times from from near 20 minutes to a couple of minutes. Given this happens quite often in the early stages of the pipeline, that's a significant saving. I suspect I'll need to update Yirgacheffe to do this too, as if you re-project your map data at any point it is just calling gdal.Warp.

Habitat maps

On the habitat map I had some predictably disappointing results as I moved my method from the data-rich UK (lots of species occurrences on GBIF and lots of land types/usage in OpenStreetMap) to areas that are more interesting from a biodiversity point of view like Madagascar where data coverage is very poor. I knew that the results would be bad, but it's always still a bit sad when you're proven correct on that. However, it was never the original plan to build per-country maps like I have been doing, I've just been doing that because of limited data access. Thankfully whilst I was away on holiday Tessera v1.1 global coverage is now available. Tessera v1.0 has been available globally for a while, but that had poor coastal masks, which is not suitable for what I do as a lot of biodiversity is found along the coast lines, even for terrestrial vertebrates. In theory Tessera embeddings are globally comparable, so in theory I should be able to find other regions that have data that have similar habitats to Madagascar and that'll help improve the quality of those data-deficient regions.

Oh, and if you're interested in the details of my habitat map work, then I gave a group talk on it last week, which you can see here:

This week

LIFE

Ali pointed out an error in one of the scripts in the LIFE pipeline at the end, so having just completed a LIFE run I need to fix that small error and re-run the tail section of the pipeline.

Habitat maps

I had a good meeting with Sadiq Jaffer and Anil Madhavapeddy planning out some Tessera/Habitat map bits. I need to do an initial global run next, and then I'm going to seek assistance from Sadiq in some of the Tessera touch points, as I'm a bit of a Tessera newbie and I'm going to need help making this run efficiently/effectively as I go from country scale to global scale.

Tags: weeknotes, copenhagen, cartography, life, yirgacheffe