Cartographic palettes and colour harmonies

This story begins one day when I was assembling a map of the city of Edmonton, Alberta from OpenStreetMap data. It was going to be a big map, a 42″ (106 cm) wide poster for a wall.

OpenStreetMap colour palette

The data was good, but the standard OSM colours were not. They would work fine for a street map but, for a piece of art being seen all day in someone’s living space, there was an unpleasant amount of grey. Plus, the accents of pinky red and ochre, and the cold green parks, gave it a lack of colour harmony.

If you analyze the colour profile of this map, counting the number of pixels of each colour and assuming there are 12 colours being used, you can see that white and the first two greys occupy about 70% of the map surface. You’d not be wrong if you said, “That’s a grey map.”

Moreover, this colour palette does have any of the classic “harmonies” that we expect when we look for how colours work together in an image. (E.g., see here.) There’s no dominant point on the colour wheel, no complementary colour, no triadic distribution or analogous set. It’s not OpenStreetMap’s fault: this is just the colour mix that you get when you look at this specific framing of this city.

If we want the map to look harmonious, we need to think about two things. What colours are used? And what proportions are they used in?

For example, look at the 1986 map, below, of Central Asia from the Royal Geographic Society. My sense here is that the cartographers thought about the colours, their relationships to one another, and the percentages of the map they would occupy. Most of the colours are clustered around the green-yellow-orange side of the colour wheel, but there are a few complementary blues. There is enough green in India to showcase the yellows, oranges and browns of Tibet. The adjacent blobs of orange Tibetan highland and grey-brown Tarim Basin work well together. There’s a nice balance of values from very dark to white. There’s no particularly bright colour that draws the attention from other areas. It says “reference map,” rather than “map with a point to make.” Overall, it’s quite pleasant to look at.

Image Color Summarizer

It turns out that there’s an interesting tool for doing an initial analysis of a colour palette and the proportions of an image the different colours occupy. It’s called Image Color Summarizer and it comes to us courtesy of Martin Krzywinski at the BC Genome Sciences Centre. You go to http://mkweb.bcgsc.ca/color-summarizer/?home and go to the Analyze tab. Upload your image and choose, say, 12 colour clusters and very high precision.

The software then reduces the number of colours in the image to (in this case) 12 , using an algorithm that shifts colours a minimum to fit them into 12 categories. It then gives you all sorts of great information. So here we have first an analysis of colours in the RGS map of Central Asia…

…and then my OSM map of Edmonton:

This is very useful for a quick look at colour proportions and interrelatedness between colours. You get each colour in hex, RGB, HSV and LCH, and the percentage of the image that it occupies.

You might have noticed, however, that Image Color Summarizer gave different results on my OSM map from the ones I showed at the beginning of this page. It ranked the two greys first, and then white, with the three totalling only 60% of the image. There are a number of reason for this, but one is that this software does have a shortcoming: even at the “very high” precision setting it reduces your image to 200 pixels wide before doing its analysis. This means that if you have tiny features, like small labels or trim lines running alongside roads, their contribution to the overall colour mix can be lost.

If you want to use Image Color Summarizer fairly often, I recommend you download the software (on the Download tab) and run it locally at the command line. It’s a PERL script. This both reduces the load on the BCGSC server that hosts it, and allows you to analyze images larger than 200 px wide. You can just use your own computing resources and just let it run all night! (Think about it, though: an image 1500 px wide will take 100 times longer to analyze than one which is 150 px wide.)

At this point you might think the problem is basically solved: we extracted a 12-colour palette and their proportions from a map whose colour harmony I like, and all we have to do is to apply those to my OSM map.

But it’s not so simple. First of all, the OSM map did not have a 12-colour palette. In fact, according to GIMP (Color>Info>Colorcube Analysis), it had 213,078 colours. And this shouldn’t be surprising: OSM Downloader generated scores of rules for styling its many lines and polygon types. And then when I exported the map out of QGIS, antialiasing produced even more colours.

Just a few of the polygon styling rules from OSM Downlaoder

Image Color Summarizer suggested a palette, but before it did that it had scaled the map image to a mere 200 pixels across, and then simplified it to 12 colours.

Working with the actual map (some 12600 pixels across) there are two possible ways we can go:

  1. We could take the finished map with its OSM colours, and a “model” image, simplify them both to a reasonable number of colours (say 12), and then do a 1-to-1 substitution based on the order of colours when they are ranked by percentage of image. Or…
  2. We could simplify the styling of the map within QGIS to, say, 12 colours, and then apply the colours we get from simplifying the model.

Let’s look at each of these in turn.

Replacing the colour palette of a finished map, using GIMP

This is certainly the easier way, but it may not give you the level of control you want.

GIMP has an excellent tool for simplifying an image to a set number of colours at Image > Mode > Indexed. It allows you to decide how many colours you want (we’ll use 12), and whether these can be dithered or not. Generally I do not use dithered, except sometimes I do.

Once you have reduced your map to 12 colours, you can see those colours by opening the Colormap dialogue (Windows > Dockable Dialogs > Colormap).

Unfortunately they are not ordered by how much of the image they represent. You have to determine this yourself, and it’s a bit clumsy. Have the Histogram dialogue open (Windows > Dockable Dialogs > Histogram) and right click each colormap colour in turn, taking “Select this colour.” The Histogram window will tell you how many pixels in the image are selected. I take notes into a spreadsheet and that gives me the table I showed above:

The top line, “Index” tells me the position of the colour in the original colormap, from 0 to 11. I then re-order the colourmap in descending order of “real estate” (that is, what percentage of the image is occupied by each colour), by right-clicking any colour and choosing “Rearrange colormap.” Now my colourmap looks like this:

At this point, white, the most common colour, is index 0; the two greys are indices 1 and 2; two greens are indices 3 and 4; and so on.

I do the same tedious process with my model image. I reduce it to 12 colours, I make notes on how much of the image each colour represents…

…and re-order its colormap correspondingly:

In order to substitute the new palette colours for the original colours I have to do one more preparatory step. I have to convert this GIMP colourmap into a GIMP palette. I do this by opening the Palette dialogue (Windows > Dockable Dialogs > Palettes), right-clicking it and taking “Import Palette.” I import the palette using the model image as source.

Finally, I can apply that palette to the original map by going to Colors > Map > Set Colormap, and choosing the palette I just imported.

And there it is.

RGS “Mountains of Central Asia” colour palette

Now, you can see right away that this is both successful and not exactly what we expected. The map has acquired the palette of the original image, and by a stroke of luck the North Saskatchewan River became a pale green, which actually works for a river. It looks pretty good! But, to be picky, it doesn’t exactly have the original colour proportions. As noted before, the RGS map has quite a bit of green in it (anchoring the lower left), but we didn’t get that much green.

The reason for this becomes apparent when we compare the original map image (left) with its indexed version (right)…

Yes, there were a lot of green pixels there, but the indexing process turned much of it into patches of yellow. This is a hazard of reducing the number of colours in an image.

Still, that was successful enough that I want to try extracting a colour palette and proportions from some non-map image, and seeing if I can apply those to my map. Let’s try—I don’t know—this Georgia O’Keefe painting of an iris:

Once reduced to 12 colours (I did use dithering here) the palette in descending order of pixels looks like this:

And the result looks like this:

Georgia O’Keefe “Light Iris” colour palette

Again, it’s basically right, although the overall colour signature isn’t quite as light as the original image. The palette is centred around many varieties of purple and white, with a bit of nearby blue, opposed by a small proportion of complementary yellows. Looking at the original Georgia O’Keefe painting, I’d expect a bit more of the bright yellow, but I see that this colour went into the pixels of small features like riverside bike paths, only visible when you get up close. I’d also expect a bit more black, but the black got shunted into the railways lines so is quite fragmented and not visible when you look at the map as a whole.

This points out another factor: the extracted colour palette and proportions only tell part of the story of how an image presents itself. Another important factor is whether a given colour is fragmented into many small pixel groups, or collected into one or two large swathes. Maps (at least urban maps) tend to have a lot of pixels dedicated to small labels or street lines, and the colours used here rarely declare themselves when you look at the whole map.

Designing the map to a specific palette from the start

Swapping in the colours from an image with good colour harmony, in order of prevalence, sort of works, but now let’s look at our other alternative. This is simplify the styling of the map within QGIS to, say, 12 colours, and then changing these colours before exporting the map.

One advantage of this was that I would be able to apply a new palette to my map carefully. I wanted, for instance, to be able to put dark colours where I needed dark colours (labels, high contrast borders), to pair related colours together (parks and their sports fields, or neighbourhoods and their buildings) and to deploy complementary colours to occupy features that would allow them to give just the right amount of zing to the overall impression.

I also wanted to avoid this sort of thing, where the label and its halo in the original OSM map were of contrasting values, but after GIMP swapped in a different colour palette they had similar values.

Text was indexed colour “8” in the original map (left), which was a dark, warm grey. Its halo was colour “5”, a light tan, and this resulted in good contrast. In the new palette (right), colour “8” was a dark blue, and colour “5” was an only slightly lighter teal; as a result, there was very little contrast.

QGIS has an excellent feature for building a map from a specific colour palette: Project Colors. This is under Project>Properties>Default Styles. Essentially, you define a colour palette, each colour having a text string to identify it.

These palettes can be saved (and imported) as .GPL text files. Then, when styling a feature, you don’t assign it just any old colour: you use a data-defined override to assign it one of the colours from the Project Colors list:

With this in place, when the Project Color with that name changes, all features tied to it change colour as well.

Unfortunately, QGIS does not automatically pick up the colours of a project and list them for you. I still went through the process of indexing the image in GIMP and entering those colours as project colours. I named them by the typical features that used them. Note that once you begin assigning project colours to features, you can’t change the names of the colours (e.g., “building, street casings”) because in the QGIS project file the colours used in feature styling are actually referred to by these names.

It took quite a while to go through all of the styling rules and style everything using only the 12 project colours. Pleasingly, it did not change the overall look of the map very much.

Then I made an alternate project palette from the 12 Georgia O’Keefe colours, not worrying too much this time about what percentage of the original image they occupied, but assigning them where I thought they would work best. It seemed like it might be time to let go of applying colours in the order of their prevalence, because it was not necessarily producing good effects.

And that produced this map:

Georgia O’Keefe “Light Iris” colour palette, version 2

It has to be said that this method gives much better control. Given the colours you want in your palette, you can move them around to different classes of features until they represent the right proportion of the image. You can alter them slightly. You can save palettes you like and then read them back in later. (Note: when you read in a .GPL colour file, QGIS appends them to the project colours. Then you have to select and then delete the previous project colours .)

Furthermore, once the initial work of styling the map to a certain number of colours is done (and I soon expanded to 18 project palette colours, since 12 is pretty tight!), the process of going from a new model image…

“Early winter”

…to its palette…

…to a new version of the map…

“Early Winter” colour palette

… is quite fast. What made this quick was that, after GIMP indexed the photograph to 18 colours, I took a screenshot of its colormap, rotated that 90°, and then used the QGIS Colour Picker tool to assign these colours to the project palette. (And then saved that palette.)

A final piece of colour palette inspiration was this map from the Second Military Survey of the Habsburg empire, Galicia and Bucovina (1861–1864), which I obtained by screenshot from arcanum.com.

I love its muted but warm bronze tones, the pale green for flatlands, and the thin blue stream running through it. (This is the area today around Verkhovyna/Верховина, Ukraine). It also has a bit of complementary colour: some barely noticeable red elevation notations.

GIMP simplified this map to these 18 colours, which do capture the overall palette, but miss the red and the blue:

It seemed reasonable to just add them in:

And that produced this:

“Second Military Survey of the Habsburg Empire” colour palette

In summary

I’m sold on the second method: designing a map around a specific palette, and then swapping in alternate palettes with good colour harmonies stolen from other images. This was the approach that gave more satisfying results. You do more work up front, but in the process you also come to understand the underlying colour structure of your map: which colours are adjacent to which, which need to be related, which are fragmented and which occur in large continuous fields.

An 18-colour palette was much more reasonable than 12-colour palette. For this kind of urban map I calculated that I needed:

  • one colour with four different values. In the original map these were the greys: residential zones, buildings, neighbourhood labels.
  • other light-dark pairs, maybe six of these. For example you need a light blue and dark blue (bike routes and water), a light red and a dark red (motorway fill, motorway casing), a light yellow and a dark yellow (secondary road fill, secondary road casing), etc.
  • black
  • white

The GIMP is an invaluable tool in assessing the colours of an image. If nothing else, it can help you quantify the “colour signature” of an image.

If the overall colour harmony of your map matters (and it should!), palette-cloning and palette-switching are powerful tools. You could tweak your map so its colours reflect the natural colours of the area depicted. You could harmonize a map’s colours with those of the larger display in which it is being placed. You could deliberately echo the colours of an earlier map.

Constructing Bourgoin’s Figure 171 – Part 2

Now that we know our way around the pattern (go back to Part 1), it should be fairly straightforward to construct with a compass and straightedge. But be aware: any pattern that requires you to construct a pentagon is an advanced challenge. They are trickier to make than squares or hexagons.

Here’s what we want to draw:

There are different scenarios for beginning. You might know where you want to site two rosette centres, and that will then determine the size of the master triangles and the rest of the layout. This is the scenario I’ll go through here. But, alternatively, you might want to scale the pattern so a certain number of rosettes will appear in the space you have; or you might have an exact size that you want the diameter of a rosette (or a pentagram) to be. Each of these is, in a sense, a different problem.

The first nine steps will take us from drawing one leg of a master triangle to having a compass set to the radius of a rosette circle.

Figure 1


1. Pick two points that will be adjacent rosette centres, and draw a line through them. We know that one of these will be at the apex of a master triangle, and the other will be one of the remaining corners (Figure 1). For the moment, we’ll call the triangle side that connects them the main axis.

Figure 2

2. Bisect the main axis between the rosette centres, and establish a midpoint (Figure 2). The midpoint will be useful later when we want to draw diagonals.

Figure 3

3. Create circles centred on the two rosette centres, each with a radius that takes it to the main axis midpoint. (Figure 3).

Note that you could actually draw these two circles with any radius. Our purpose in drawing them is simply to give us the ability to draw 20 divisions of a circle (i.e., at a spacing of 18°), and once we have those we won’t be using these circles any more. Drawing them to meet at the main axis midpoint has the advantage that these are large circles, which should make the 20-fold division more accurate.

Now we need to construct twenty evenly-spaced rays from each circle centre.

Figure 4

4. Construct a pentagon in one of the circles so that one vertex touches the axis midpoint (Figure 4). (You can find methods of constructing a pentagon within a circle at many places on the internet, including Wikipedia’s page on “Pentagon.”)

In the process of doing this, your compass will become set to the length of a pentagon side.

Figure 5

5. Without changing the span of the compass, use it to draw a pentagon in the other circle (Figure 5).

Figure 6

6. Continue using the same span to draw a second pentagon in each circle, with one vertex touching the place where the axis exits the circle. You now have a 10 pointed star, or 10/2 star, in each circle (Figure 6).

Figure 7

7. Divide each circle in 20 sections by drawing lines from the rosette centre through every point of the 10/2 star, and through each of its 10 dimples. You now have a line meeting the circle every 18°. Be sure to extend, outside the circles, the first rays adjacent to the main axis until they intersect (Figure 7).

Figure 8

8. Create a circle centred on this intersection, using a radius that will take it exactly to the main axis midpoint (Figure 8). This is the pentagram radius.

Figure 9

9. Note the point where the first 18° ray from one of your circles enters the pentagram circle (Figure 9). The radius of the rosette circle is the distance from the rosette centre to here. Draw a circle with this radius around each rosette centre.

You can even erase the initial circles you drew.

We’re now ready to extend the grid of master triangles, to locate other rosette centres and to put rosette circles around them. This occurs in the next three steps.

Figure 10

10. Using the appropriate rays from the two rosettes you’ve already sited, extend the grid of master triangles (Figure 10). Draw a rosette circle around each vertex, and construct the twenty evenly-spaced rays. Remember, you already know the rosette circle radius, and ray spacing can be copied from one of the other rosette circles. (E.g., place one leg of your compass on the point where one ray leaves the circle, and the other leg where the fourth next ray leaves the circle. Use this distance on a new circle to set up rays.)

Figure 11

11. Each pair of rosette centres allow you to construct a third. In my case, I have room for four, and all other possible centres are off my page (Figure 11).

Figure 12

12. You already know the distance from a rosette centre to the midpoints of the master triangle legs, so set your compass to that and add in leg midpoints. You can then add the diagonals that connect the midpoints (Figure 12). For triangles with missing vertices, you can still place a midpoint on a leg from the nearest rosette centre. Notice that even though you’ve never figured out where the midpoint of a master triangle base is, the intersecting diagonals will lead you to it.

Rosettes in place, it’s time to construct 10/4 stars in them, and extend the lines from these stars. This takes place in the next four steps.

Figure 13

13. Although you have twenty rays from each rosette centre, only ten of them are important from now on. These are shown above, by circling their intersections with the rosette circle (Figure 13).

14. Connect each to the vertex four along (Figure 14). This is the “10/4 star”.

Figure 15

15. You want to extend some of the 10/4 star lines outside the rosette circle. How far to extend each line is a bit weird. It’s okay if you extend a line too far, because you will wind up erasing a lot of construction lines anyway. But ideally, it looks like this (Figure 15, above).

Lines at 12:00 and 6 o’clock (a) go until they hit the next master triangle base. Lines going out parallel to master triangle legs (b: at 1:00, 5:00, 7:00 and 11:00) go out only as far as a midpoint bisector of that leg—at which point they meet identical lines coming from the next rosette. Lines that cross at 3:00 and 9:00 (c) go out just a short way: as far as the vertical line coming up or down from an adjacent rosette. But their opposite ends (d) go a long way: all the way to the midpoint of the next master triangle leg they encounter.

Figure 16

16. Having extended the 10/4 stars in each rosette you’ll have something like this (Figure 16).

Figure 17

17. As always, the final pattern is made by selecting some of the construction lines for inking, and the rest for erasure. We can get partial success with the construction lines we have so far (Figure 17).

In a virtual space, you can just go on creating master triangles and rosette centres as far as you like. But in the real world, you come to the edge of the page, or wall, and there are still areas in the corners where the adjacent rosette centres are off-page, and you do not have the lines coming out of them to guide you. This is where it gets doubly interesting, as the physical limitations of the space in which you are working create additional geometric problems.

The remainder of the process now is just working out how we can extend the pattern into these spaces.

This process will be different for every space. I’ll show how I completed this for the rectangular space I’m working in.

Figure 18

18. Drawing additional pentagram circles is quite handy. Their centres are a known distance outside the rosette rays, and their radius is known from way back in step 8. We can even locate those in the far corners because their centres lie on a line passing through other pentagram circle centres, and the spacing between centres can be measured with the compass elsewhere in the pattern (Figure 18).

Figure 19

19. Each of these circles can have a pentagram inscribed in it—we know the spacing between the vertices from other, existing pentagrams—and then we can extend the sides of that pentagram to form the guidelines that we need (Figure 19).

Figure 20

20. Some more inking and erasing, and we’re almost done. There are only four small areas near the corners (marked with question marks in Figure 20) yet to be finished. We know what should be there, but we don’t yet have the construction lines. At this point I’m inclined to use the compass to measure spaces and lengths out of completed parts of the pattern and sketch/copy them into the areas that need to be filled.

Whew, done!

Constructing Bourgoin’s Figure 171 – Part 1

Just veering off into geometry here….

In November I was watching Eric Broug, an Islamic geometric design guru, give a talk online at an Islamic art conference, and I noticed that behind him they were projecting an interesting pattern on the scrim. I froze the video and grabbed a screenshot…

What the heck is this? How do I look this pattern up? How do I find what pattern this is, and how to draw it?

I have a few books of geometric patterns, but this was not in Eric Broug’s book Islamic Geometric Patterns, nor in Daud Sutton’s Islamic Design. So I took the tack of searching Jules Bourgoin, the 19th century Frenchman who catalogued Islamic geometric patterns, and whose 1879 book, Les Eléménts de l’Art Arabe, is available for free on the internet. Bourgoin’s book provides that useful function, like Köchel numbers for the works of Mozart, of giving us a handy identifier, albeit a random number, for many patterns.

After some swimming back and forth in a sea of patterns, I finally recognized it as his Figure 171.

Bourgoin gave some enigmatic and tense (and French) instructions about how to construct this pattern, and I couldn’t make head or tails of them. So next, a web search on “Bourgoin Figure 171.”

This did not yield instructions about how to construct the pattern, but it opened a number of satisfying rabbit holes. One was a talk by Lars Erickson at the 2021 Bridges conference, who was constructing this pattern (among others) using an extended girih tile site. He gave several references about this pattern, including a page at http://tilingsearch.org dedicated to it. Here I could see that it is fairly common, turning up in the great mosque in Damascus, the Kalyan mosque in Bukhara, the tomb of the Mughal emperor Akbar in Agra, India, and even on the spine of one of my favourite cookbooks, Taste of Persia by Naomi Duguide.

A video posted by Samira Mian was also helpful, even though it was not about this exact pattern. It clarified that the pattern grows out of five-fold symmetry, and that subdividing the circle into 20 equal portions is key.

After long period of staring at the pattern, I think I can do an analysis. We’ll do construction in part 2.

Analysis

Figure A

Here is the pattern, both as a line drawing and as a tiled pattern (Figure A). Believe it or not, you can construct this with a compass and a straightedge. No measuring of lengths or angles required.

Figure B

The first thing to notice is that we have a regular, repeating pattern of rosette centres with 10-fold symmetry. Each rosette has a 10-pointed star in its centre (yellow, in Figure B) surrounded by ten points (orange).

Although it initially might appear that the rosette centres are placed at the vertices of equilateral triangles, they are in fact, as Bourgoin notes, at the vertices of isosceles triangles whose angles are 72°-54°-54°. (Bourgoin’s text about Figure 171 says, “Plan isocèle ou losange. Le triangle isocèle a son angle de base égal aux 3/5 d’un droit.” Isosceles or diamond plan. The isosceles triangle has a base angle equal to 3/5 of a right angle. I.e., 54°.)

These isosceles master triangles alternate, apex up, apex down. Be sure to recognize which sides are the legs of the isosceles triangles (equal in length, meeting at the apex), as opposed to the third side which is the base (joins the two 54° angles, and is slightly longer). Notice that the head-to-head kites (red) always occur on the base, whereas the legs run through two opposite-facing petals (green).

Figure C

In addition to the 54° and the 72° angles in the master triangles, the pattern is full of angles with measures like 18°, 36°, 108° and 144° (Figure C). These all reinforce the impression that the pattern will be constructed from pentagons and 5-fold symmetry. The full circle of 360°, divided by 5, 10 and 20, respectively, gives 72°, 36° and 18°. The angle 54° is, in turn, three 18’s, and 108° and 144° are doubles of 54° and 72°. So, all in a family. The “5” family.

Figure D

Each rosette centre features a 10/4 star, which gives us the rosette points (orange). I’m calling them “10/4 stars” after Magnus J. Weninnger, who used this kind of expression in his 1971 book Polyhedron Models. A “10/4” polygon is a star formed by connecting each decagon vertex to the fourth next vertex. A “5/2” polygon, by the same logic, is the star formed by connecting each vertex of a pentagon to the vertex two along: in other words, a pentagram.

As shown above in Figure D, the majority of construction lines for the pattern are extensions of the 10/4 stars. So once we draw these stars, we’re going to have most of the lines we will need to draw the pattern.

Figure E

These 10/4 stars themselves can be drawn if we can construct circles of the right radius around the rosette centres. It won’t do to use just any circle: the radius has to be just right so the extended lines from the 10/4 stars meet and form 5/2 stars, or pentagrams (purple, in Figure E above).

In fact, this is the key puzzle of drawing this pattern: the relationship between the length of a master triangle leg and the radius of the rosette circles.

Figure F

But, we don’t need to determine the radius of the rosette circles first! Instead we should first determine the radius of the circles enclosing the pentagrams, the pentagram circles.

If we construct 20 equally spaced rays coming from each rosette centre, the rays will be 18° apart (Figure F). These rays alternate in function: one coincides with a point of the 10/4 star (orange), and the next coincides with the centre of a “petal” (green) between two points. We can think of these as point rays and petal rays.

Notice that each pentagram occupies the space between two petal rays, and it does so simultaneously for two different rosettes. In other words, it occupies 36° of arc from the point of view of two different rosettes.

One petal ray lies along the master triangle leg connecting these two adjacent rosette centres (let’s call it the main axis). The next ray, a point ray, comes out at 18° from the main axis. Note where this ray intersects the corresponding ray from the other rosette. This location, halfway between two petal rays—and this is true looking from either rosette centre—is the centre of a pentagram circle.

The radius of the pentagram circle, and of all pentagram circles (r, in Figure F) must be the distance from that centre to the midpoint of the main axis.

Figure G

Once the pentagram circle is drawn, the radius for the inner circles (R, in Figure G) falls out. It is the distance from the rosette centre to where the first point ray meets the pentagram circle.

Now we see the the relationship between the length of a master triangle leg and the radius of the rosette circles. It’s governed by this 144°-18°-18° isosceles triangle, where the main axis is the base, and it involves subtracting the triangle’s height (r) from the length of one of its legs.

We can quantify this (it’s interesting, but not of practical value in constructing the pattern) and say that if the length of the main axis is 1, then

Figure H

If we look at the relationships between the pentagram circles and the inner circles, we can see they pack nicely. While most of our construction lines will be based off those 10/4 stars in the rosette circles, the pentagram circles may come in handy as we reach the edges of the space we’re working in, in places where we cannot draw a rosette circle because its centre is off the canvas, board, wall… or whatever medium we are working on.

Figure I

The kite pairs along the bases of the master triangles clue us in to a few construction lines which are not generated by the 10/4 stars at each rosette. These are diagonals which cut through the pattern. They form the edges of some pentagrams, and the “noses” of the kites.

These diagonals are actually a secondary grid, of the same spacing and direction as the master triangles. The symmetry of the features that lie along them tell us that they are based on connecting the midpoints of the legs of the master triangles.

Figure J

Finally, what wallpaper group does this pattern belong to? It has two axes of reflection (blue, in Figure J above), and three 180° rotational centres (red diamonds). So it’s cmm, also known as 2*22. The basic unit of repeat is shown above, a 36°-54° right triangle, or half of a master triangle.

It’s kind of unexpected to find that a pattern built on 5- and 10-fold symmetry has a repeat that is basically rectangular. Maybe I should have seen that coming, though, from the underlying pattern being isosceles triangles arranged in rows where they alternate apex-up, apex-down.

On to part 2, Construction.

53° 30′ N

So, there I am, driving along in Edmonton, Alberta. I come to a stop light on Fort Road, look to my right and I see this:

Is that a building with longitudes written on the roof?!?!

And what are these longitudes? 9° 49’ W—that’s nowhere near Edmonton! Nor is 123°30’ E. What’s … going on here?

A little sleuthing via Google Maps later revealed that this was the Kathleen Andrews Transit Garage. It’s owned by the Edmonton Transit Service, which operates all of the buses and light rail in the city. But the rooftop details were part of an art installation by Thorsten Goldberg called 53° 30′ N. Each of the five structures on the roof (architecturally called lanterns) displays a longitude that directs us to a place on the earth at the same latitude as Edmonton: 53° 30′ N.

And—added bonus for shaded relief fans—that piece of terrain is then represented in 3D on the end of its lantern. Look carefully at the photo. There they are! They look for all the world like pieces of DEM rendered as Triangulated Irregular Networks in Blender.

For someone who spends a lot of time looking at terrain, this is the best kind of public art ever!

Before I go on, here are the five longitudes, in case you want to figure out for yourself where they are…

  • 9° 49’ W
  • 123°30’ E
  • 159° 08’ E
  • 168° 10’ W
  • 119° 26’ W

9° 49’ W

Mweelrea, County Mayo, Ireland

Image from opentopomap.org

123°30’ E

An unnamed gooseneck of the Amur River, which forms the border between China and Russia.

Image from opentopomap.org

159° 08’ E

The 2958 m Kamchatka volcano volcano, Zhulanovsky (Жулановский), Russia.

Image from opentopomap.org

168° 10’ W

Okmok Crater, Umnak Island, Aleutian Islands, Alaska

Image from opentopomap.org

119° 26’ W

Mt Chown, Alberta

Image from opentopomap.org

Here are some more images of the building from a CBC article.

End-on views of the relief sculptures representing (left to right) the peaks in Galway, the bends of the Amur River, the volcanos in Kamchatka, and the crater on Umnak Island.
An artist’s conception before installation, showing the Mt. Chown site on the right end.

In an interview in the Edmonton Journal, Thorsten Goldberg gave exact coordinates for the sites:

“The collected mountain landscapes are Mount Chown at 119°25‘8.24“W in Alberta, named by the Methodist minister Samuel Dwight Chown; the crater with Mount Okmok, a volcano on Umnak Island, the Aleutian Islands in Alaska at 168° 6‘22.60“W; the Zhupanovsky Crater on the Kamchatka Peninsula at 159° 8‘25.04“E; an unnamed landscape near Dacaodianzi, Heilongjiang Sheng at 123°17‘54.95“E in China; and finally Mweelrea, the highest point in the province of Connacht at 9°49‘47.59“W in County Mayo on the west coast of Ireland.”

Kudos to the City of Edmonton and its Percent for Art policy, which stipulates that one percent of construction budgets goes to public art! This must be one of the most fun geography puzzles ever.

Mapping “Buffalo Days and Nights” by Peter Erasmus

The Maps for Books collection has a new page: Peter Erasmus’s Buffalo Days and Nights.

In 1920, Henry Thompson, an Alberta newspaperman, began interviewing 87-year-old Peter Erasmus, who lived near him in the area of Whitefish Lake, Alberta. Erasmus, who had been born in 1833 in the Red River settlement of what is now Manitoba, told him his life story, an account later published in book form by the Glenbow Institute as Buffalo Days and Nights, by Peter Erasmus as told to Henry Thompson.

(It’s not an easy book to find in print. You can obtain a copy from McNally Robinson, in Winnipeg.)

Erasmus’s life covered a period of radical change in the northern prairies of what is today Alberta. When he was born, this area was dominated by the bison-hunting cultures of the Cree and Blackfoot, with the isolated Hudson Bay Company post at Fort Edmonton (in what the HBC thought of as “Rupert’s Land”) holding an absolute monopoly over doing business with them. By the time of his death in 1931, it was fenced, plowed and gridded with roads, a province called Alberta in a country called Canada. The population was dominated by Euro-Canadian settlers and their descendants, while the indigenous people were corralled into a reserve system.

Erasmus was Métis (his father was a Dane and his mother was a Cree) and he had a genius for languages. He spoke Swampy and Plains Cree, Ojibway, English, Blackfoot and Stoney (Assiniboine), not to mention the Ancient Greek he had also studied as part of a half-hearted attempt to become a minister. At the age of  twenty-four he was hired as the interpreter for a missionary based in Pigeon Lake, southwest of Fort Edmonton. Travelling with voyageurs going up the North Saskatchewan river in boats, it took Erasmus weeks to get there in the summer of 1856.

He had excellent rapport with the Plains Cree, and worked for a series of prominent missionaries over the years: the Reverend Henry Bird Steinhauer, (another Métis, operating a mission at Whitefish Lake), and John and George McDougall. He also worked for the Palliser Expedition, sent from Britain to survey the southern Plains in 1858-1860. Erasmus’s accounts of the tactics used while hunting bison are compelling and extraordinary.

Several processes converged to end this era. The number of bison declined sharply due to over-hunting, a phenomenon for which the Americans were frequently blamed. In 1870 the new nation of Canada asserted control over Rupert’s Land, and the number of settlers moving west began to increase. The government of Canada anticipated that the indigenous nations of the plains would have to become farmers in order to survive, and signed a series of treaties with them to bring this about. In 1876 Erasmus was hired by two prominent Cree chiefs, Mista-wa-sis (Big Child) and Ah-tuk-a-kup (Star Blanket), to interpret during negotiations for what is today known as Treaty Six.

In his later years, Erasmus worked as an independent trader, a fur buyer, a government agent and as a farmer.

Many of the places mentioned in his account still have the same names today, such as Lac Ste. Anne, Whitefish Lake and the North Saskatchewan River. There’s no need for a special map for these. But other places, such as Jasper House, the Victoria Mission, and the location of Fort Edmonton within the modern city of Edmonton, are historic locations that do not show up on most maps. It’s also quite remarkable to contemplate that where the present-day town of Vegreville sits, Erasmus hunted buffalo in 1871.

For more on Peter Erasmus, see the Dictionary of Canadian Biography, at http://www.biographi.ca/en/bio/erasmus_peter_16E.html

Making shaded relief directly from DEMs projected in degrees?

In a presentation I gave at GeoIgnite 2021, I was explaining the process of using QGIS to make shaded relief from DEMs, more or less as detailed in this post. There wasn’t time to explain the process of re-projection, so I rather boldly asserted that you don’t need to re-project your DEMs before making shaded relief. Instead, I said, you can just use the magic scaling number 111120 to convert from degrees to metres.

Really? Is this true?

Well, yes, in many cases it works pretty well. In QGIS you pull in an unreprojected DEM (its native CRS using degrees as units) but set the Project CRS to some reasonable metric projection, such as UTM. Then, opening the GDAL hillshade tool from the Toolbox, you use the DEM as your Input layer, set scale to 111120, and enter the parameters of your choice for Z factor, Azimuth of the light and Altitude of the light.

And, look: shaded relief:

This seems so much simpler than having to first re-project your DEM to square cells measured in metres. But there are some caveats. This technique fools with the terrain a bit, and could potentially distort how it looks. If you understand how it distorts it, you’ll be able to evaluate if you want to use it in your map.

The magic number

The magic number 111120 comes from the GDAL documentation, specifically the documentation for the gdaldem tool:

The gdaldem generally assumes that x, y and z units are identical. If x (east-west) and y (north-south) units are identical, but z (elevation) units are different, the scale (-s) option can be used to set the ratio of vertical units to horizontal. For LatLong projections near the equator, where units of latitude and units of longitude are similar, elevation (z) units can be converted to be compatible by using scale=370400 (if elevation is in feet) or scale=111120 (if elevation is in meters). For locations not near the equator, it would be best to reproject your grid using gdalwarp before using gdaldem.

https://gdal.org/programs/gdaldem.html

Gdaldem is the tool that I recommend using for creating hillshades in QGIS, and there in the docs they say it: unless your locale is near the equator, it’s best to re-project your grid before using gdaldem.

The obvious problem with entering a scale factor of 111,120 metres per degree is that as you move away from the equator, lines of longitude become closer to one another. For example, in Canada at 54° north, one degree of latitude is close to 111,0000 metres, but a degree of longitude is only about 65,000 metres. In other words, a DEM cell is not square on the ground. So when you enter 111,120 as the scaling factor to convert degrees to metres, you will get a hillshade calculated on the basis of a square cell that has been created by stretching a rectangular cell in an east–west direction.

For example, with a 1″ DEM, each cell is 0.0002777777° (that’s 1 ÷ 3600) on a side. If we scale both axes at 111,120, the hillshading algorithm thinks it has a square cell 30 metres on a side. However the reality at 54° north is that on the ground the cell is about 30 m north–south and 18 metres east–west.

How bad is it?

You’d expect that because the landscape is stretched east–west, the slope would be under-calculated for cells that slope east–west. Basically, these cells would appear to be on a slope less steep than it really is.

And slope is important in the hillshading algorithm: it plays a role in determining how bright a hillshade pixel is. Pixels whose aspect and slope indicate that they are orthogonal to the sun direction are the brightest white, while those facing away from the sun direction are darkest black.

So if, for example, you had a 45° slope facing west, and the sun in the west at an elevation of 45 °, you’d expect pixels on the slope to have the highest possible hillshade value, 255. But if you calculated the hillshade from a degree-DEM using a scale of 111,120, that slope would be under-estimated; maybe it would appear to be 35°. As a result it would not get assigned a 255, but something less, maybe 240. There might be a nearby area, also facing west, whose true slope was 55°, but it now gets assigned the brightest value because it appears to be 45°.

In general then, for east or west-facing surfaces, we’d expect the hillshade built from the un-re-projected degree-DEM to distribute its brightest and darkest patches differently, particularly when the sun is due east or west.

That’s just what you see.

However, when the sun is not due east or west it’s hard to see this difference in slope calculation.

You can also experiment with other, lower scale factors, such as 90,000, 80,000 or 70,000. These, in effect, cause slopes to be less under-estimated on east–west aspects, but over-estimated on north–south aspects. In other words you are distributing the error around.

This suggests that in many cases, making a hillshade directly from a DEM projected in degrees is fine.

Other questions

A second distortion arising from creating a hillshade using a degree-DEM and a scale factor of 111,120 concerns the sun’s azimuth. If you are mapping in a local UTM projection, you know that UTM grid north is usually different from true north. This was visible in the figure above with the contour lines: the cell that was “square” in degrees turns out to be rectangular in a UTM projection, and also a bit tilted to the side.

With UTM projections, this difference is not more than 3°. At worst, then, you might ask for a sun azimuth of 315° and instead get one of 312°. I doubt whether you can notice this difference.

The last problem we might wonder about is whether shadows calculated by the hillshading algorithm are distorted. Are they foreshortened in an east–west direction when the hillshade is re-projected into a metric projection? The answer to this may be surprising: the GDAL hillshading algorithm does not calculate shadows. It calculates shadowed surfaces, but this is purely on the basis of the slope and aspect of the cell it is looking at (and its eight neighbours).

In other words, a piece of terrain at the bottom of a deep gorge will be rendered purely on the basis of its slope and aspect, as if the sun could shine on it right through the surrounding mountains.

Hence, no, we do not need to worry that shadows will be shortened.

So…

All of these things considered, I come to the surprising (for me) conclusion that yes, you actually can often just hillshade a DEM that’s still projected in degrees, using the scale factor 111,120. It seems heretical, but when I can’t tell the difference in the results, I have to admit that for practical purposes it’s a good solution.

Mapping Gottfried Merzbacher

I’m wrapping up my work on Gottfried Merzbacher—a sort of back-burner project that’s been active and then dormant, on and off, for about seven years. It’s been a pleasure to learn about places like the Bayumkol valley, the relationship between the Saryzhaz and Kum-erik Rivers, and the placement of peaks around the head of the amazingly long Enylchek Glacier. This geography, while not unknown to residents of the Kyrgyz Republic or the Chinese province of Xinjiang, is downright obscure for North Americans—except perhaps among mountaineers and specialist geographers—so it’s been exotic and, during the COVID-19 epidemic, a pleasant way to spend my additional time.

I first discovered Mr. Merzbacher when I encountered a satellite photo of Lake Merzbacher. It might have been one of those puzzles where someone shows you a bit of a satellite image and you have to figure out where it is. This is a lake on a glacier in Kyrgyzstan that comes and goes according to how the ice impedes the flow of meltwater. Some years it’s there, and some years it’s not.

Lake Merzbacher, North Enylchek Glacier, Kyrgyzstan (Google Satellite)

The lake is named for the German geologist, Gottfired Merzbacher, who first described it in the European press when he returned in 1904 from a two-year expedition in the Tian-Shan mountains. He had been there, trekking through alpine valleys, over passes, and up and down glaciers, to answer a deceptively simple geographic question: “Where the hell is the base of Khan Tengri?”

Khan Tengri is a major world peak. Its name means “Lord of the Sky” in Kyrgyz, and at 7010 metres, it rises above the centre of the Tian Shan range, towering over nearby summits, and is distinctively visible from great distances. Yet only a hundred years ago the location of its base was a mystery, because Khan Tengri had the frustratingly elusive property of disappearing from view as one entered the range.

Did Khan-Tengri rise at the spot, where in the forty-verst map and in all other maps, it is represented, its pyramid must inevitably have been seen from our standpoint. All we learned by our excursion was therefore only the confirmation of the opinion, previously suggested, namely, that in this cardinal point the maps were all of them at fault. The task therefore devolved on us to determine the actual situation of Khan-Tengri. [Merzbacher, pp. 17-18]

In the summer of the second year, in a complex maze of steep walled valleys, he finally stood at the foot of Khan Tengri.

We had now been traversing the icefield for nearly five hours at high speed ; the enclosing escarpments began to fall away; the lateral glacial valleys grew shorter, broader, mostly rounded off at their heads, and still the dark bluff mysteriously concealed the riddle of Khan- Tengri from our prying eyes. Then, suddenly, something white began to assume prominence behind the black edge of the promontory — nothing yet very conspicuous, but with every step forward the white object grew bigger and bigger. A fine snowy summit, glittering in the sun, appeared aloft, colossal white marble buttresses projecting from it ; a few steps farther, and a huge pyramid stood out freely, its base also soon coming into view. The giant mountain, the monarch of the Tian-Shan, revealed himself to my enraptured gaze in all his naked majesty, from his feet, rooted in the glacier ice, up to his crown, wrapt in sunlit shifting mists. Nothing whatever intervened to conceal any part of the so long mysteriously masked base of the mountain. I found myself standing close to its southern foot, and contemplated in wonder, with amazed and searching glance, the sublime spectacle. The strain of the last few weeks, which had at last grown almost unbearable, was relieved in an instant ; the goal had been reached, which I had eagerly struggled for with all the strength of mind and will. My feelings at that moment baffled all description. [pp. 207-8]

Merzbacher told of these adventures in his 1904 book, Forschungsreise in den zentralen Tian-Sehan, which was translated into English and published in London the following year as The Central Tian-Shan Mountains, 1902-3. Although it sounds dry and technical, it is a delightful read, especially if you happen to enjoy a bit of geologic observation thrown in with your travelogue.

The downward route from Narynkol through the Tekes valley leads through one of the best-defined basins of the old frontal lakes which formerly lay at the base of the mountain range. On the southern border the outlines of the old terraced beaches have been excellently preserved. At the wide entrance to the Musart valley beds of fluvioglacial deposit form five ancient terraces, and for several miles, follow the course of the valley as longitudinal banks, nearly up to the foot of the mountain mass. (p. 82)

Yes, it’s a bit like travelling with Professor Calculus from Tin-Tin. Merzbacher also has an endearing and obtuse fussiness about logistics that probably made him a bit difficult to live with.

This mound of detritus necessarily makes the exploration of the lower section of the glacier extremely toilsome and fatiguing. In a day’s march one can cover only a few miles. Being unmindful of this circumstance, and also unprepared for the vast dimensions of the glacier from the hitherto published reports of its magnitude, and moreover unaware that at this season the valley is not even visited by the nomad Kirghiz, I had not brought sufficient supplies to meet the wants of the party for eight or ten days, the minimum of the time, required for profitable work on the glacier. The number of porters was also insufficient for such undertakings, while these fellows themselves struck work at critical moments, and broke out into open revolt against me. Under such circumstances I was fain to confine myself to a short excursion in the region of ice. [p. 73]

However imperial all this sounds, Merzbacher distinguishes himself from other contemporary explorers in that not a single person or animal dies on his Central Asian expedition. (Sven Hedin, in contrast, loses all his men and camels just a decade later).

To follow Merzbacher’s journey, though, is a little bit tricky. He is intimately familiar with this part of Central Asia, and assumes his readers are as well. He sets off from Przhevalsk (the book begins with the sentence, “A serious drawback to the progress of our expedition was the delay for nearly a week of the arrival of our luggage at Przhevalsk…”), and we immediately reach for the atlas to find out where that is. And we have trouble, because Przhevalsk, the main town at the east end of Lake Issyk-Kul in Kyrgyzstan, has been renamed to Karakol.

This map came with the English edition of Merzbacher’s book, and can be downloaded from the Pahar.in page for Central Asian maps after 1900. The map from the original German edition can be downloaded from the Gunnar Jarring Collection.

The map Merzbacher includes in his book is not very detailed, and of course uses these older names. (It also, understandably, contains a few errors that today we can easily see with the help of satellite images.) So we need a better map. Being a superb observer and detail-oriented, Merzbacher gives us the names of many small valleys, passes and plateaux. It’s not easy to find maps that show where these features are today. His transcriptions of Kyrgyz and Turki names (Kyrgyz being spoken on the north side of the Tian Shan range, and Turki, or Uyghur, being spoken on the south side) are often different from those used today. So a little detective work is needed, a little linguistic knowledge, and a pile of maps from the last century.

As well, Merzbacher is not your casual travel writer who mentions the names of some landmarks and towns. Merzbacher is there to map, and he describes everything: every ridge, river, plateau, mountain, lake, glacier and pass. This makes it easier to follow where he went, but the number of named places in the end is much larger.

Although he was 60 years old, Merzbacher covered a ridiculous amount of ground in two years. Keeping up with his team, which included Austrian mountain guides, would have been a challenge. Not only does he explore all of the glaciers that seem to lead up to Khan Tengri, but he then crosses over into China and surveys the mountain ranges and basins on the north side of the Tarim Basin. His goal is nothing short of a complete understanding of the geology of the central Tian-Shan.

My mapping of where he went, and a gazetteer of the places he describes (with both his names and current names) can be found at the Maps for Books website.

QGIS 3 and Vector map tiles

If you’ve ever tried printing a map from the Open Street Map tile service (available in QGIS through QuickMapServices plugin) you’ve experienced the annoyance of having all your labels come out tiny. In other words, you see this on the screen…

But then you get this out of your 300 dpi print layout….

The reason those labels and icons come out so small with raster tiles is that your screen display is something like 96 pixels/inch, but the print layout has to pack them down to 300 pixels/inch. The print layout also winds up asking for tiles at a higher zoom level. Text labels and icons, like everything else, are “baked” into the raster tiles at a reasonable size for display at 96 dpi. At 300 dpi, everything is much smaller.

In 2018 I described, at the end of a post, a way to work around this, but now there’s a better option. If you work instead with vector tiles, the text labels are not baked into the tile: they are rendered by QGIS. This means that if the label is supposed to be 2.5 mm high, it’ll be 2.5 mm high no matter what dpi you export at out of the print layout.

QGIS 3.14 and above can handle vector tile servers as data sources. This means the server sends tiles of vector data, which are then styled at the user’s end by QGIS.

How they work

Vector map tiles (VMTs) were not developed for GIS use. Their main use is for people viewing maps through browsers. You commonly have a map that’s been embedded in a web page that includes the javascript libraries for mapbox rendering, such as here.

But vector tiles offer the cartographer a lot. As raster tiles, OpenStreetMap data was ideal for areas where you just could not get decent data—if, say, you were mapping the streets of a city in Turkmenistan. But now, as vector tiles, this data allows you to control colours, line weight, font, and, of course the visibility of elements. Imagine your own version of OpenStreetMap, with pink highways, no railroads and emphasized parks, and you begin to get the idea.

There are multiple formats for tiles, but here we’ll just look at the Mapbox vector tiles format, since that is what QGIS can support.

Because vector map tiles are designed to be viewed over the internet, the most basic principle of VMTs is that you typically to have a tile server, which is firing off vector tiles of data, and a GL style file that understands what data layers are delivered in this server’s tiles, and tells the browser how to render that data. Often these are at different URLs.

The URLs of vector tile servers look like this:

The z, y and x in curly brackets get replaced by the zoom level, row and column, and the data comes as a PBF (Protobuf) file or a MVT (Mapbox vector tile) file.

The GL style file, on the other hand, is a text file in JavaScript Object Notation (JSON). It might begin like this, with information on the sources for tiles, sprites and glyphs (VMT lingo for markers and fonts):

{
  "version": 8,
  "name": "Positron",
  "metadata": {...  },
  "sources": {
    "openmaptiles": {
      "type": "vector",
      "url": "https://api.maptiler.com/tiles/v3/tiles.json?key={key}"
    }
  },
  "sprite": "https://openmaptiles.github.io/positron-gl-style/sprite",
  "glyphs": "https://api.maptiler.com/fonts/{fontstack}/{range}.pbf?key={key}",

and then it will continue with a list of the layers in the tiles, and how they should be styled.

  "layers": [
    {
      "id": "background",
      "type": "background",
      "paint": {"background-color": "rgb(242,243,240)"}
    },
    {
      "id": "park",
      "type": "fill",
      "source": "openmaptiles",
      "source-layer": "park",
      "filter": ["==", "$type", "Polygon"],
      "layout": {"visibility": "visible"},
      "paint": {"fill-color": "rgb(230, 233, 229)"}
    },
    {
      "id": "water",
      "type": "fill",
      "source": "openmaptiles",
      "source-layer": "water",
      "filter": [
        "all",
        ["==", "$type", "Polygon"],
        ["!=", "brunnel", "tunnel"]
      ],
      "layout": {"visibility": "visible"},
      "paint": {"fill-antialias": true, "fill-color": "rgb(194, 200, 202)"}
    },     ...

The styling information here is written in something called Mapbox GL style, and here are some GL Style file URLs:

Vector tiles are relatively new, and almost no one gives them away for free, but we do have a few heroic companies offering this. Most require API-keys or access-tokens, but these are frequently free.

The first question you might have is what you get if you ask for vector tiles from the tile server, but don’t combine them with a GL Style file. VMTs without a style file aren’t useless—but what you get is data where all points share a single style, as do all lines and polygons.

Data from the Nextgen vector tile server without styling

A simple VMT service brought in using QGIS3’s native abilities

Our best candidate at the moment for free OpenStreetMap (OSM) data delivered through vector tiles is the ESRI OSM vector tile layer. (Thank you ESRI!). The tile server is here:

https://basemaps.arcgis.com/arcgis/rest/services/OpenStreetMap_v2/VectorTileServer/tile/z/y/x.pbf

and the style file is here:

https://www.arcgis.com/sharing/rest/content/items/3e1a00aeae81496587988075fe529f71/resources/styles/root.json?f=pjson

We can add this tile server to QGIS by

  1. opening the Browser panel
  2. Right-clicking the new Vector Tiles category and choosing New ARCGIS vector tile service connection
  3. Filling it out like this:

Notice that the Service URL ends with “VectorTileServer.” There’s no “tile/{z}/{y}/{x}.pbf.” QGIS will append that automatically before making a tile request.

When we add this layer to our map canvas, and zoom to Baku, Azerbaijan at 1:8,028 scale, we get this pleasing map that looks remarkably like OpenStreetMap:

However, we also get a pile of errors, under the banner “Vector tiles: Style could not be completely converted.” If you click on “Details,” some will be like this:

Referenced font Arial Unicode MS Regular is not available on system

You can repair these font errors by installing the missing font – or simply accepting the local font that has been substituted.

But there are also a pile of errors along the lines of

amenity area/bowling alley: Could not retrieve sprite 'amenity area/bowling alley'

I will explore how to solve these sprite problems below. First let’s talk about what you’ve got so far.

Styling the vector tile layers

If I open the styling panel on the right of the map I get something truly new.

Wow, that’s the longest list of rule-based styling I’ve ever seen!

Can I literally uncheck or change the style for every type of layer? Are these layers within a layer?

Yes and yes. Vector map tiles contain many layers. (The set of layers is called the schema of a tile service.) Out of each layer (e.g., “landcover”), features are selected using a filter, which is quite similar to a rule in rule-based styling. For example, in the image above there is a specific fill style for features in the landcover layer for which _symbol = 48,and the zoom is 9 or higher. It’s called landcover/park.

I can uncheck landcover/park and get a map without parks…

Or I can double-click on the sample fill swatch and change the parks to a pink/white gradient fill.

In fact I can apply any QGIS style to these polygons: shapeburst fill, line fill, marker fill… I don’t have full control—I can’t change the min and max zooms that define this style, or the filter rule—but within the predefined filters, the possibilities are mind-boggling.

Once I like the way in which I have tweaked the styling, I can save the style for this layer to a .qml file. (Open the layer’s Properties, find the Style button, and choose Save Style…) This will allow me to apply this custom styling to the same vector tile layer, but in another QGIS project.

My powers over the styling of the VMTs are clumsy—a GL Style file typically defines scores of styles, and if I want to change, say, all my water styles from blue to grey, I will have to do that to each one individually. But it’s still very powerful.

There are a few other things to point out. Note at the bottom of the styling panel you have a checkbox for Visible rules only. Visible rules only cuts out styles that are not displayed at the current zoom. (It does not remove styling for features not visible in the current map canvas.)

The current zoom is also displayed there. This is always shown as an integer, but with vector map tiles you are not restricted to integer zoom levels. There’s no “Zoom to Native Resolution (100%)” like there is when you right-click a raster tile layer. The zoom level shows as 14, but the map canvas is at 1:10,000, which is somewhere between 1:17,061 (the break point for vector tiles changing from zoom 13 to 14) and 1:8,530 (the break point for vector tiles changing from zoom 14 to 15). If you do the math, you can conclude we’re at something like zoom level 14.17. This might make you queasy! And, welcome to the world of vector tiles.

[Note that zoom levels for vector tiles are one more than the zoom levels for typical raster map tiles (e.g., Google Maps, OSM ). This is a consequence of MapBox vector tiles being 512 pixels on a side. As well, I have a suspicion that, in QGIS, the detail shown on ESRI OSM vector tiles at zoom level 14 is the same as shown on OSM raster tiles at zoom level 13. But I’m not quite sure why this is.]

Styles are implemented in order, from the top of the list down, and you can drag them to reorder.

Finally, it’s important to understand that the styling rules you see here in QGIS are not the GL Style document itself. They are a translation of that document. You cannot (at, least, as far as I know) translate back from QGIS styling to a GL Style file.

Labels

If you move to the labelling tab in the style panel, you see this:

So, you also have extensive control over the labelling. Double click on a label’s style swatch, and change the font, size, colour… all of the usual label parameters are available.

For example, if I would like street names to be blue (bold-italic) and subway stations to be labelled in red, I can just do it by altering three styles.

Finally, note that while you can’t open an attribute table on your vector map tiles layer, you can use the Information tool. You will get results for every single layer under the mouse click.

I can now print at 300 dpi from this, and I get just what I see on the screen!

Sprites

All that might have been enough for you, and now you’re off to try customizing OpenStreetMap yourself. However, if you’re interested in fixing those sprite errors we encountered above, continue reading.

When you add a vector tile service to QGIS you frequently get this:

When you check out the Details, many of the errors refer to “could not retrieve sprite.”

At the same time, in the QGIS’s Network Log window, you’ll see something like this:

2020-12-31T20:27:24     WARNING    Error transferring https://cdn.arcgis.com/sharing/rest/content/items/684018c92e9b424ca8e900da8dad8b23/resources/styles/../sprites/sprite@2x.json - server replied: Not Found
2020-12-31T20:27:24     WARNING    Error transferring https://cdn.arcgis.com/sharing/rest/content/items/684018c92e9b424ca8e900da8dad8b23/resources/styles/../sprites/sprite.json - server replied: Not Found

So what’s going on?

If I paste the URL for the GL Style file into my browser (I’m using Firefox), the result is that whole code for the styling gets delivered to me in an unformatted blob.

It’s a bit dense reading. But near the top I can pick out this piece:

"sprite": "https://cdn.arcgis.com/sharing/rest/content/items/3e1a00aeae81496587988075fe529f71/resources/styles/../sprites/sprite"

Sprites, in vector map tile parlance, are markers. QGIS needs to use this URL look up the sprite image (a PNG file with all the sprites packed into it) and its partner sprite JSON file (which explains which piece of the image a given sprite is). But, for QGIS, the “styles/..” part of this particular URL is confusing. We might understand it as meaning descend into the styles sub-directory and then pop back up out of it, but QGIS doesn’t know this.

I can make a better address for the sprites by saving the GL Style file locally, editing it so the URL of the sprites is simpler, and then telling QGIS to now use my local version of the GL Style file.

I save the GL Style file locally by selecting all the text out of my browser, and copying and pasting into my text editor. Then I change the sprite URL by removing the “styles/..” part, so it now reads

"sprite": "https://cdn.arcgis.com/sharing/rest/content/items/3e1a00aeae81496587988075fe529f71/resources/sprites/sprite"

Once I’ve saved the file as ESRI_OSM_Style.json, I return to QGIS, where I edit the Vector Tiles connection I made for this server, and specify this new file as the “Style URL.” I could post it on a server somewhere and give a http:// URL to it, but, with Ubuntu, I can also just use the file:// protocol:

Sprites make quite a difference at high zoom levels.

No sprites, zoom level 17
With sprites, zoom level 17

A few final points

There are three different types of support for vector tiles in QGIS. The original one was the Vector Tiles Reader plugin, which received the vector tiles, converted them to geoJSON data, and made a different layer for each kind of features in the tiles. There is the new native support, which I have used here: it receives the tiles and applies filters, or rules, to style the many different kinds of features in them. Finally, there is the MapTiler plugin, which has a great deal of potential but requires a free account with MapTiler/OpenMapTiles, and this has an unfortunate data cap of 100,000 tile requests/month. (It seems like a lot, but while learning to use and style vector map tiles, I went through my 100,000 tiles in eleven days.)

The QGIS implementation of vector tiles permits you to add “New generic connection” if you have URLs for the server and the GL Style file. Yet outside of MapTiler and ESRI I have found precious few servers that also provide GL Style files. Here’s a quick survey:

  • The city of Wien (Vienna)—the data is limited to Austria. [Server URL] [GL Style URL]
  • Ordnance Survey UK—the data is limited to the U. K. and requires a free API key. [Server URL to which you have to append your free API key] [GL Style URL to which you have to append your free API key] Because of the API-key, QGIS does not yet seem to be able to make the request for the sprites correctly.
  • MapTiler/OpenMapTiles (OSM data)—beware the 100,000 tile limit. (Literally every time you zoom, pan or resize the screen you can trigger a tile request.) [Server URL to which you have to append your free access key] [GL Style URL for the “Basic” style]
  • Nextzen (OSM data)—lovely data, but I haven’t found a GL Style file. [Server URL to which you append your API key.]
  • ESRI generously offers another vector tile server based on more data sources than just OpenStreetMap. [Server URL] It comes with many different styles which you can find here. To obtain the GL Style file for one of these, you typically Open the style in Map Viewer and then in the upper right is a button called View style. Copy the link out if it and use it, as we did above, in the Style URL field. (Generally speaking, you’ll have to also do the same hack with the sprites as I showed above.)
  • Mapbox, if you can decode their mysterious URLs (mapbox://mapbox.mapbox-streets-v11), serves up vector tiles, and the public access key is free (without data limits), but I have not been able to find a GL Style file for its schema that QGIS can fully translate. [Server URL for Mapbox-streets-v8] [GL Style URL for MapBox-streets-v11]
  • Thunderforest has nice vector tile servers, such as their Transport layer, and their Outdoors layer, that you can have access to with a free API key—but I have not been able to find GL Style files for the schemas of these servers. [Server URL to which you have to append your free API key]

I understand that converting data to vector tiles, and keeping it up to date, costs money, so I don’t begrudge these companies charging fees or imposing limits. On the other hand, I really appreciate those which don’t!

As time passes there will no doubt be more vector map tile servers, and the way schemas and styling work will change. Nonetheless working with vector map tiles is addictive, and it will be exciting to watch this evolve.

Mapping Francis Younghusband in the Gobi Desert, 1887, Part 4: from the Ya-hu oasis to Hami.

[Back to Part 3: from the Hun-kua-ling sandhills to the Ya-hu oasis]

From Ya-Hu to Hami, we can see that Younghusband now has to turn south, as his own map shows.

The journey takes from June 23rd to July 4th, or twelve days. His mapmaker places Ula Khutun almost halfway from Ya-hu to Hami, but I think this is likely wrong, as Younghusband tells us he arrives in Ula Khutun only two days after reaching Ya-hu.

On June 25 we reached Ula-khutun, where the road to Hami leaves the road to Guchen. It is merely a camping-ground, situated in a stony plain, surrounded by low mounds or heaps of gravel, at the southern base of a branch from the main range of the Altai Mountains, from which it is separated by a gravelly plain about twenty miles in width—the extension westward of the same plain in which Ya-hu is situated. The height of this southern ridge must be considerable, for a heavy snowstorm was falling on it even so late in the year as this (June 25), and the snow seemed to remain there.

(p. 111)

After Ula Khutun, Younghusband reports one more day of travel through “low hills” before they begin the arduous crossing of the “desert of Zungaria” on the 27th. For these reasons (plus the fact that Younghusband says Ula Khutun is in a westward extension of the same plain as Ya-hu is in) I think it makes sense to provisionally place Ula Khutun as shown below. The only additional evidence for this (there is nothing on any map I have found that contains anything remotely like the word “Khutun”) is that what I have shown as the route to Guchen is also the present day road.

Younghusband gives no indication of what route he took from Ya-hu to Ula Khutun, so that must be regarded as hypothetical as well.

On the days of June 27–29, Younghusband gives us an uncharacteristically long paragraph describing crossing the desert of Zungaria. I have added emphasis to certain phrases within the quote to highlight the important landmarks.

Our next march, however, was the most trying of all, for we had to cross the branch of the Gobi which is called the desert of Zungaria, one of the most absolutely sterile parts of the whole Gobi. We started at eleven in the morning, passing at first through the low hills, which were perfectly barren, but the hollows had a few tufts of bushes, and one hollow was filled with white roses. After seven and a half miles we left the hills, and entered a gravel plain covered with coarse bushes, but no grass. There was no path, and we headed straight for the end of the Tian-shan range. After passing over the plain for fifteen miles, we struck a path and followed it along till 1.3o p.m., when we halted to cook some food and rest the camels. It was of no use pitching camp, for there was neither water, fuel, nor grass ; not a bush, nor a plant, nor a blade of grass—absolutely nothing but gravel. I lay down on the ground and slept till Liu-san brought me some soup and tinned beef. We started again [June 28th] at 4 a.m., and marched till 3.15 p.m. through the most desolate country I have ever seen. Nothing we have passed hitherto can compare with it —a succession of gravel ranges without any sign of life, animal or vegetable, and not a drop of water. We were gradually descending to a very low level, the sun was getting higher and higher, and the wind hotter and hotter, until I shrank from it as from the blast of a furnace. Only the hot winds of the Punjab can be likened to it. Fortunately we still had some water in the casks, brought from our last camping-ground, and we had some bread, so we were not on our last legs; but it was a trying enough march for the men, and much more so for the camels, for they had nothing to eat or drink, and the heat both days was extreme. We at last reached a well among some trees. The guide called the distance two hundred and thirty li, and I reckon it at about seventy miles. We were twenty-seven hours and three-quarters from camp, including the halt of four and a half hours. We had descended nearly four thousand feet, and the heat down here was very much greater than we had yet experienced. We were encamped on the dry bed of a river, on the skirts of what looked like a regular park—the country being covered with trees, and the ground with long coarse grass. It was most striking, as on the other bank of the river there was not a vestige of vegetation.

(pp. 113-114)

Although the region of Dzungaria (Younghusband’s “Zungaria”) is 350 miles to the northwest, Soviet topographic maps agree in calling the arid basin between the Altai mountains and the extreme east end of the Tian Shan the the “Dzungarian Gobi” (Джунгарская гоби).

“Gobi,” is discussed by Owen Lattimore in a 1973 article as the Mongolian term for “a land of thin herbage, more suitable for camels than for cows, but capable also, if herds are kept small and moved frequently, of sustaining horses, sheep, and goats.” However Younghusband’s repeated emphasis on the barrenness of the area (“absolutely sterile,” “the most desolate country I have ever seen,” “neither water, fuel, nor grass; not a bush, nor a plant, nor a blade of grass—absolutely nothing but gravel”) indicates what a formidable crossing this is. The DEM shows it as essentially a big hole, with the very eastern end of the Tian Shan on the south side.

Incidentally, one doesn’t usually find the mountains adjacent to Hami labelled as being part of the Tian Shan. The Tian Shan (sometimes written Tien Shan) are a major range of central Asia, but the name is usually found running just from Kyrgyzstan (on the west end) to the Turfan Depression (on the east end).

However, occasionally you do find a map extending the Tian Shan all the way to Hami, which is clearly how Younghusband sees it.

Now, we don’t know exactly where the party entered the Dzungarian Gobi, but we do know that after fifteen miles of heading “straight for the end of the Tian-shan range” they struck a path, which then presumably led them in a less straight line to the next landmark: a well, among trees, 4000 feet lower (1200 metres) than where they started. It is now the afternoon of June 28th.

It’s a fair bet that the elevation of the place they left the hills on the 27th was close to 1500 metres elevation, as shown by the map below. The lowest area in the Dzungarian Gobi is at about 400 metres, so this roughly agrees with Younghusband’s “We had descended nearly four thousand feet.”

Today there is a settlement in the bottom of this arid depression named Naomaohu. In satellite imagery it really jumps out in this desert because of its green fields, which presumably rely on extensive irrigation from pumped groundwater. Yet outside of town, here in the bottom of the basin there are not only scattered trees occurring naturally, but also, Google tells us, the “Yiwu Naomaohu Populus Forest Ecological Garden Scenic Area (伊吾淖毛湖胡杨林生态园景区).” Populus is the genus of cottonwoods and aspen, and the special designation as a scenic area suggests that trees are, well, special in this area.

But, to be fair, the extent of trees in this bottomland goes on for some distance, so we can’t know exactly where the party spent the night of the 28th.

From here, on June 29th, they begin to ascend and pass by a remarkable house.

…we had to start at 1:30 in the afternoon, and march till three the next morning.

For nearly two miles we passed through a country well covered with trees, and patches of coarse grass and bushes. The soil was partly clay and partly sand. This ended as suddenly as it had begun, and we passed over the gravel desert again, where there was no vestige of grass or scrub. The hot wind blowing off this seemed absolutely to scorch one up; but yesterday’s order of things were now reversed—we were ascending while the sun was descending, and it gradually became cooler. About ten at night we suddenly found ourselves going over turf, with bushes and trees on either side, and a shrill clear voice hailed us from the distance. We halted, and the guide answered, and the stranger came up and turned out to be a Turki woman, who led us through the bushes over some cultivated ground to a house, the first I had seen for nearly a thousand miles… Flowing by the house was a little stream of the most delicious water. It was scarcely a yard broad, but it was not a mere trickle like the others we had passed in the Gobi, but was flowing rapidly, with a delightful gurgling noise, and was deep enough for me to scoop up water between my two hands.

(p. 116)

This water occurs only here, however, and it is two more hours across gravel to a distinctive gorge.

…hardly fifty yards from the stream the vegetation disappeared, and we were again on gravel desert, and we had still to travel for five hours, gradually ascending as before—at twelve passing through a gorge two and a half miles long, in a range of little hills running parallel to the slope. We halted as the day was dawning, on a part of the slope where there was enough scrub for fuel and for the animals to eat. No water.

(pp. 116-117)

At dawn on June 30th they are about three hours beyond the gorge.

There’s only one “gorge two and a half miles long, in a range of little hills running parallel to the slope.” Today the the road from Naomaohu to Hami goes through it.

The house with the trickling stream that they encountered two hours before the gorge should be, given their typical rate of travel, about four miles before it. There are several candidates of small, isolated areas with intense vegetation growth in the middle of the gravel plain that leads up towards the gorge. These can be seen on images taken by the Sentinel-2 satellite, using its “NDVI” band combination, which causes vegetation to jump out as green.

The leftmost site appears to be irrigated by a ditch coming from the gorge, so it perhaps did not exist in 1887. The centre and rightmost sites both have many trees and are equally good candidates. The dotted red line indicates possible travel from the present-day site of Naomaohu, but Younghusband’s party could easily have crossed the bottom of the depression further east, putting these sites on a line with the mouth of the gorge.

On June 30th they continue to somewhere called Morgai.

Next day we continued to ascend the long lower slopes of the Tian-shan, gradually rounding the eastern extremity of these mountains. We passed a cart-track leading from Barkul to Hami, which makes this detour round the Tian-shan to avoid crossing them. The going was bad on account of the stones, and because the whole slope was cut up by dry watercourses. These were seldom more than a foot deep, but the slope was covered with them. They were formed by the natural drainage from the mountains, which, instead of running in deep valleys, spreads over the slope. The whole country was still barren, being covered with scrub only; but in the depression at the foot of the slope was a small Turki village, surrounded with trees and cultivation.

That night we encamped near a Turki house called Morgai, surrounded with fields of wheat and rice, watered from a small stream which appeared above the surface just here, and which, lower down, spread out and was swallowed in the pebbly slopes of the mountain.

(p. 117)

The pass that they will cross the next day to Ching-cheng is fairly obvious (again, a road runs through it today), so we can feel pretty confident that on this day they work their way southeast and across the slope to the northern end of the pass. They would not gain much elevation as they traverse to the top of the debris fan issuing from the mountains.

Google Hybrid shows a small settlement bearing the Chinese name of Shangmaya at this site, but the Soviet 1:500,000 scale map from 1985 (K-46-2) shows “разв. Могой [razv. Mogoi], meaning “the развалины [razvaliny]” i.e., ruins “of Mogoi.” This, I think we can feel fairly confident, is Morgai.

The next day, July 1st, they cross the east end of the Tian-shan.

Starting early, we ascended the stream, but it soon disappeared again, and we saw nothing more of it. The hillsides were at first rather bare, but the higher we got the greener they became; and after five or six miles were covered with rich green turf, most delightful to look upon after the bare hills of the Gobi; while here and there through an opening in the hills we could catch a glimpse of the snowy peaks above. There are, however, no trees nor even bushes, either on the hills or in the valleys…
We crossed the range at a height of eight thousand feet [2400 m]. Except the last half-mile the ascent was not steep, but led gradually up a narrow valley. The last mile or two was over soft green turf, and near the summit there was a perfect mass of flowers, chiefly forget-me-nots; and I am sure I shall not forget for a very long time the pleasure it was, seeing all this rich profusion of flowers and grass, in place of those dreary gravel slopes of the Gobi Desert.

…a curious characteristic of these hills is that there is absolutely no water. For twelve miles from Morgai to the summit of the pass we had not seen a drop of water… Five miles on the southern side a small stream appeared, and the valley bottom was partitioned off into fields, round which irrigation ducts had been led ; but these were all now deserted, and the water was wasted in flowing over uncultivated fields. Trees now began to appear near the stream, and at 11:10 p.m. we pitched camp on a little grassy plot near a stream of cold clear water, and under a small grove of trees.

(pp. 119-120)

The pass (summit elevation 2580 metres, or 8450 feet) is just twelve miles of ascent from Morgai. Five miles down on the south side, water indeed appears, in the form of irrigated fields today.

The next day is July 2nd, and the presence of “July 22” in the text is surely a misprint.

On July 22 we passed a small square-walled town called Ching-cheng, surrounded by fields of wheat and some good grass land, but when these ended the desert began again directly.

(p. 121)

Ching-cheng is easy to locate even on Google Terrain, where it shows up as Qinchengxiang. (Xiang is a Chinese word for township.)

A long way off over the desert we could see a couple of poplar trees rising out of the plain. These poplars are very common all over Chinese Turkestan, and they make excellent landmarks. We reached these at twelve at night, and found a few soldiers stationed there, who said that Hami was still a long way off. Now, as my constant inquiry for the last month had been, ” How far are we from Hami?” and as the guide for the last few days had each time said we were only sixty miles off, I was rather exasperated to find that, instead of having ten or twenty miles more to get over, there was still a good fifty.

(p. 121)

Consequently in the map above I have placed them, at the end of July 2nd at a line of poplars, fifty miles out of Hami.

Two days later it is not entirely with good grace that Younghusband reaches the end of the first leg of his journey.

So on striking camp at two the following afternoon [July 3rd], I told my men that my tent would not be pitched again till Hami was reached, so they had better prepare themselves for a good march. We travelled on all through the afternoon—a particularly hot one; then the sun set before us, and still we went on and on through the night till it rose again behind us.

We halted for a couple of hours by the roadside to ease the camels, and then set out again. At eight o’clock [July 4th] the desert ended, and we began to pass through cultivated land, and at last we saw Hami in the distance, and after traversing a tract of country covered with more ruined than inhabited houses, we reached an inn at 11 a.m., and it was with unspeakable relief that I dismounted from my camel for the last time.

(pp. 121-122)

To wrap up, let’s look now at the full route from Peking to Hami.

A solid line on this map indicates the portions of the route I’m confident about, and a dotted line indicates the parts that seem right but we can’t really be sure.

This would be a very interesting route to re-create today, although the way it crosses from China into Mongolia and back at remote places might make it politically challenging to do so.

If you’ve enjoyed this piece of research, you may want to download a KML file of various points along Younghusband’s route that I have mentioned in these posts. It contains a tour that you can play in Google Earth to “fly” along the route.

There is also a KML of the route itself. I recommend viewing these with vertical exaggeration set to “3” on the 3D View tab of Google Earth’s Options.

Mapping Francis Younghusband in the Gobi Desert, 1887, Part 3: Hun-kua-ling sandhills to Ya-hu oasis

[Go back to Part 2: From the Galpin Gobi to the Hun-kua-ling sandhills.]

From here to the Ya-hu oasis (which Younghusband reaches on June 23rd) the route is obscure, and we find old maps less useful. We have to rely more upon comparing his route description with images of the landscape. Let’s work backwards from Ya-hu, which he describes quite precisely.

The name of this oasis is Ya-hu. It is about five miles in extent from west to east, and rather more from north to south. Some twelve miles to the west is a remarkable hill, called by the guide Ho-ya-shan. It rises very abruptly out of the plain to a height of about two thousand feet, and is a perfectly solid mass of rock of a light colour.

(p. 111)

Satellite imagery reveals an area of outcropping surface water of about the right dimensions some 300 miles to the northwest of the Hun-kua-ling sandhills. Geonames.org identifies a populated place there called Dzahuy, for which Ya-hu is a reasonable misunderstanding, and Google Terrain has a community about 10 km away called Zakhui, more or less where the Soviet map L-47-3 places a settlement labelled Бригада Дзахуйн [Brigada Dzakhuyn]. There is a distinctive peak to the west, which geonames calls Hatan Hayrhan, the Soviets labelled as Хатин-Хайрхан [Khatin-Khayrkhan] and Google Terrain calls Eej Khairkhan.

You can see Ho-ya-shan, rising “abruptly out of the plain,” quite well in Google Earth.

We can feel confident about the location of the Ya-hu oasis, but how does Younghusband get here over the next fifteen days? Looking at the DEM, the route appears straightforward.

However, there are a few indications that he might not have taken this shortest, lowest route. One is that, about a third of the way along, Younghusband describes himself as going “west-by-south,” which the shortest, lowest route route doesn’t really do. Another is that the Soviet topographic maps don’t show tracks or trails (which they are usually quite thorough about) along the route of travel in the eastern half this corridor. Finally, Younghusband’s own map, in this section, shows him continuing northwest after the Hun-kua-ling, and passing north of a range of mountains as he visits “Man-chin-tol” and “Liang-ko-ba,” before returning to the big valley that leads to Ya-hu.

I would propose the following route, suggested by Younghusband’s map, but also supported by landscape features he describes along the way.

Let’s start on the day he leaves the end of the Hun-kua-ling, probably on June 8th.

After passing the end of the sand-range, we entered a country different from any we had yet gone through. In origin it was probably a plain of sand, but the wind’s action has broken it up into sandhills and depressions, making up a scene which, for its extreme wildness and desolation, surpasses anything I have ever seen.

(p. 98)

There is just such terrain off the west end of the sand dunes, as shown in a Google Earth view looking back southeast at the Hun-kua-ling.

On the travel day of June 9th…

an hour later reached the dry bed of a river flowing south, one hundred feet below the camp, and the lowest point I have yet reached in the Gobi (probably two thousand eight hundred feet).

(p. 102)

No place in the local area is actually this low (853 metres) but there is a distinctive dry riverbed running south at an elevation of 1045 metres with low hills before and after it. (see below in Google Earth looking northwest.)

Two days later they come to a large encampment…

on the 11th we reached a large Mongol encampment named Man-chin-tol, in a plain at the foot of the first spurs of the Altai Mountains… Water was plentiful, being found in small pools all over the plain. It had, however, a brackish taste, and there was soda efflorescence on the margin of the pools.

(p. 103)

It is hard to say which hills Younghusband would have meant by the “first spurs” of the Altai, and there is nothing like “Man-chin-tol” on any map I have found. However, the oasis of Hatansuudal (called Khatansuudal / Хатансуудал on Google Terrain) is in roughly the right place, provides surface water and is in a plain abutting some spurs of the Altai. The same can be said of the wet area about ten miles southeast of it. Here are both sites, looking west in Google Earth.

Incidentally, Google Translate tells us that tal (тал) is the Mongolian word for valley.

On June 13th (two more days later) Younghusband gives some specific observations on distances to landmarks, as well as his direction of travel…

To the north, at a distance of twenty-five miles, are the Altai Mountains, rising to about nine thousand feet above the sea. …We started at 3.45, and passed over a gravel plain in a west-by-south direction. This plain is bounded on the south by a range at a distance of about eight miles. The range runs in a general easterly by westerly direction, and is about six hundred feet high on the average.

(pp. 105-6)

These distances (25 miles north, 8 miles south) are generally true along the entire trek going west-southwest from Hatansuudal, if we assume that by “the Altai Mountains” he here means the mass of Tergun Bogd, which at 3900 metres (almost 13,000 feet) is the highest peak in the Altai Mountains; and by the range that “runs in a general easterly by westerly direction” he means the distinctive, dark-coloured ridge which rises to 2086 metres (= 6800 feet) south of his presumed route.

At the end of the day on the 14th …

We camped at 11.35 at Liang-ko-ba, a collection of four Mongol yurts on the plain, round a patch of green.

(p. 107)

I cannot find a specific place called Liang-ko-ba, so we must assume he is continuing west, paralleling the main chain of the Altai

On the 15th…

We started at 4:40, and still passed over gravelly plain, keeping along the edge of a low range of hills parallel to the road on the right.

(p. 107)

A low range of hills does occur roughly where we would expect Younghusband to be at this point, although to be fair there are many such low ranges of hills in the area.

Finally, on the morning of the 16th Younghusband climbs a hill and gives us measurements of features he sees, with specific bearings to them.

In the morning I climbed a hill and had a fine view of the country round for about eighty miles in every direction. The main range of the Altai Mountains is not at all of a uniform height, but, on the contrary, consists of distinct high ridges connected by lower hills. To the eastward I could see the snow-capped ridge which forms the butt end of the Altai Mountains. It is about twenty-five miles in length, and north-west of it is a second ridge, which also had some slight snow on it. In the space between the two ridges—fifty or sixty miles—is a succession of lower hills, rising about one thousand feet above the plain. The two ridges rise abrupt and clear from the surrounding hills. Between my route and the Altai Mountains is a succession of low, narrow ridges with intervening plains running in a southeasterly direction. … To the south the same succession of ridges and plains extends. The ridges are from three hundred to five hundred feet in height, and five or six miles apart.

(pp. 107-8)

We should be able to figure out where Younghusband was standing, and there are two locations that fit the description.

The “butt end of the Altai Mountains,” with the “second ridge” to its northwest, can only be Tergun Bogd (which is indeed 25 miles long) and Bayan Tsagan Nuru. The two are indeed separated by fifty miles, and connected by a “succession of lower hills.” If we take Younghusband’s bearing of “to the eastward” literally, then he needs to be at the point above labelled “Best viewpoint suggested by bearings,” a place where Tergun Bodg is truly east of him. To have come this far north, however, he would have travelled much closer to Tergun Bogd than the 25 miles he reported on the 13th. The other point, (“Best viewpoint suggested by route so far”) seems like a reasonable alternative.

His other observation, that between him and the Altai Mountains are a “succession of low, narrow ridges with intervening plains running in a southeasterly direction” suggests this second location as well.

During travel that day…

… we followed down the gravelly bed of a stream which appeared occasionally in a small trickle above the surface, and the margin of which was covered thickly with the soda efflorescence which seems invariably to mark the presence of water in the Gobi.

(p. 108)

And then…

On the 17th we emerged from the hills again, on to another great plain running between two parallel ranges of bare hills.

(p. 108)

There are many possible candidates for the “gravelly bed of a stream,” but there is one major one that could bring the party out into the large plain to the south.

From here the travel to Ya-hu is straight northwest along this plain.

They lose a day of travel due to mud, and on June 20th Younghusband notes the heights of the ranges on either side.

We started the next morning, and for a few days continued along the plain between the two parallel ranges, that to the north rising some one thousand five hundred feet [450 metres], and the one to the south about eight hundred feet [250 metres] above the plain.

(p. 109)

The area where I place Younghusband agrees with this observation in that the southern range is lower than the northern, but it does not agree with his estimates of height, the northern range actually being closer to 800 metres above the plain and the southern 400 metres.

Comparing this with Younghusband’s estimate of the elevation of Tergun Bogd a few days earlier, it seems fair to observe that he is consistently underestimating the height of features. This is hardly surprising for a 24-year-old in an unfamiliar environment; and indeed approaching the Hurku Hills, he wrote, “We can realize how deceptive the distances are here. Some days ago we first saw this range, and I thought that we should reach it at the end of that march, but we have taken four days to do so.”

On the 23rd they arrive at the Ya-hu oasis, as quoted at the top of this page.

Go on to Part 4: from the Ya-hu oasis to Hami.