The TL;DR;
This is a perennially challenging problem, so many different ways of tackling it have been attempted…
A little more context for these was provided in our earlier talk.
Two new kinds of thematic map for handling complex multivariate data associated with polygons.
We’ve developed python code that helps you make tiled and woven maps.
Mosaic world map by Chris Chamberlain; see this article and this video for more.
“… a countable family of closed sets \(\mathcal{T}=\{T_1,T_2,\ldots\}\) which covers the plane without gaps or overlaps. More explicitly, the union of the sets \(T_1,T_2,\ldots\) (which are known as the tiles of \(\mathcal{T}\)) is to be the whole plane, and the interiors of the sets \(T_i\) are to be pairwise disjoint” (Grünbaum and Shephard 1987, page 16)
… a GIS coverage!
It’s a lot.
Systematic enumeration up to a certain complexity yields a ‘galaxy’ of 2.4 billion tilings (Zeller et al. 2021). You can explore the galaxy here: Tegula.
Grünbaum and Shephard repeatedly narrow focus to tilings with specific properties so they can say anything at all.
The symmetries of a tiling map tiles on to other tiles.
Sets of tiles mapped onto one another like this are transitivity groups, of which an isohedral tiling has only one.
Cartographically it probably doesn’t work like that…
Directionality or orientation is irrelevant to mathematicians.
However, it is important for mapping: we need a concept of cartographic transitivity groups where different tile orientations ‘count’.
¯\_(ツ)_/¯
We are not entirely sure… but we’ll keep looking!
The building blocks of our approach.
These (and more) are made the same way:
We can also make various adjustments:
Insetting relative to the repeating tile unit helps distinguish elements.
For a lot more on woven maps, see our earlier talk.
Weaving theory leads to useful matrix-based approaches.
Primarily for biaxial weaves.
We have extended the matrix approach to triaxial weaves (see our notes).
We make these the same way we make tile units.
The strands
parameter specifies which strands in each axis (separated by the |
) are distinct, and also allows us to ‘skip’ strands on -
characters .
Vermeer’s The Geographer (∽1675) from commons.wikimedia.org.
TileUnit
s and WeaveUnit
s are both Tileable
objects that can be used to make a Tiling
.
To make a Tiling
we also need a polygon dataset to be tiled
Next, get a TiledMap
from the the Tiling
.
This overlays the Tiling
with the geospatial data polygons, pulling their data, and dissolves based on tile element IDs.
We emphasize tile boundaries or zone boundaries in the data depending on the prioritise_tiles
setting.
At this point, you can export to a dataset.
We have to specify the mapping from tileable element identifiers ("a"
, "b"
, "c"
…) to data variables.
We also specify a mapping from variable names to colour palettes.
Now we can render a map…
There are a range of options here particularly in relation to the tricky business of generating a legend.
Because we can…
Image from publicdomainpictures.net by Andrea Stöckel
This work is an exploration of the combined effect of pattern, orientation, texture, and colour as visual ‘multi-variables’. Along the way we’ve seen some things that appear promising:
There is plenty to think about:
The code used to make this talk is available at github.com/DOSull/weaving-space.
We are keen to get feedback, contributions, and ideas, especially:
If you have a project where this approach might work, please reach out!
github.com/DOSull/weaving-space
Palmerston North, 11 Nov 2022 - Tiled & woven maps - O’Sullivan & Bergmann