mapconnectors

When passages overlap, you may want to be able to show an exploded plan; a plan where the layers are separated away from each other, displayed side by side, instead of overlapping. This can be done in a couple of ways, but this page concentrates on the approach where maps are displaced when including them in another map with an offset. Whenever a scrap gets offset from its natural position, map connection points automatically add a displacement arrow, showing the offset from the natural position.

Imagine a situation with a main passage. Above the passage is an aven series, running over the top of the main passage. There is also a higher level oxbow starting part way along that aven seies, which has its own pitch back into the main passage. When displaying these, the three levels get stacked above each other, and it can be difficult to see which part belongs to which other part. In simple cases, “color map-fg altitude” in the “layout” is enough. But assume you might like to separate them out. Draw each level in its own scrap (this is needed to allow colouring by altitude anyway).

map overallMP
  topSP
  break
  middleSP
  break
  bottomSP
endmap

Put the upper levels into their own map. Put the lower level into its own map. Create another map that includes both the lower map, and the upper map, and specify the offset:

map overallMP
  highlevelMP [0 20 m] above
  break #not needed unless they will still overlap
  lowlevelMP
endmap
map highlevelMP
  topSP
  break
  middleSP
endmap
map lowlevelMP
  bottomSP
endmap

In this case, the upper levels are going to be offset from their natural position, so add a map connection point in a scrap that is going to move (you don't need them in any other scraps). Some people like to put a displacement arrow at either end of the offset section. However, to aid navigation, I like to only put map connection points wherever there is a physical connection between the offset and not-offset sections. So in this case, I would add a map connection at the top of the pitches which drop to the lower level, one at the left end of the middle level scrap, and one at the right end of the top level scrap. This is how Therion will render the “overall” map:

There is still an overlap, and it would be nicer to offset the upper section too. So the upper and lower sections need to be put in their own maps, and the top level can then be offset a second time - this time without needing to leave an outline. Since another pitch will get split, it needs an additional map connection point in the top scrap, at the pitch between the top and middle levels.

map overallMP
  highlevelMP [0 20 m] above
  break #not needed unless they will still overlap
  lowlevelMP
endmap
map highlevelMP
  toplevelMP [0 15 m] none
  break #not needed unless they will still overlap
  middlelevelMP
endmap
map toplevelMP
  topSP
endmap
map middlelevelMP
  middleSP
endmap
map lowlevelMP
  bottomSP
endmap

You can see from the output that the offsets get processed from the outermost map first, to the innermost map last, and the outlines get rendered in that order as well. The map connection arrows, however, are drawn only on the last offset that happens to their scrap. This leaves us with a 20 metre arrow correctly linking the lower and middle level, and a 15 metre arrow correctly linking the middle and top level. However, the arrow that is supposed to link the top and lower levels is also just 15 metres long, since that is the last offset that happened to the scrap. This is undesirable; the intention was to have a 35 metre arrow for that last pitch.

The solution is to break the top level into two separate scraps. The first one includes the pitch to the middle level, and takes part in both of the existing offsets. The second scrap includes the pitch down to the lower level. It gets its own map, which is not offset with the rest of the top level. Instead, the new map gets included directly into the overall map, ofsetting it directly to its final position. It also needs its outline to be left behind during this offset, since it will not have been left behind in any other steps.

map overallMP
  toplevelrightMP [0 35 m] above
  break #not needed unless they will still overlap
  highlevelMP [0 20 m] above
  break #not needed unless they will still overlap
  lowlevelMP
endmap
map highlevelMP
  toplevelleftMP [0 15 m] none
  break #not needed unless they will still overlap
  middlelevelMP
endmap
map toplevelrightMP
  toprightSP
endmap
map toplevelleftMP
  topleftSP
endmap
map middlelevelMP
  middleSP
endmap
map lowlevelMP
  bottomSP
endmap

This is the final result:

Note that to keep things simple, none of the pitches in these demonstrations are styled in the conventional manner. To see how to style them in the conventional manner, see the article about colouring pitches in simple and offset maps.

You might need to offset one set of scraps 15 metres in one direction, and another set of scraps from a different survey or map 15 metres in the other direction, each with a 15 metre displacement arrow at one point, while needing a map connector displacement arrow between the two sections (a 30 metre arrow, with only a 15 metre offset). To achieve this, have a map containing the scrap that needs a 30 metre arrow. Include that map inside another map, which in turn is then included by the overall map. The overall map offsets it 15 metres in the wrong direction first (in the same direction as the passage it needs to connect to, so depending on your data set, it might be possible to just include it within the map for that other passage). The inner map then offsets it 30 metres in the right direction, so that it lines up with the rest of its section. It will now be 15 metres from its original position, but with a 30 metre displacement arrow.

map overallMP
  upleftMP [0 15 m] above
  uprightoffsetMP [0 -15 m] above
  centreMP
  downMP [0 -15 m] above
endmap
map uprightoffsetMP
  uprightMP [0 30 m] none
endmap
map upleftMP
  upleftSP
endmap
map uprightMP
  uprightSP
endmap
map centreMP
  centreSP
endmap
map downMP
  downSP
endmap

  • mapconnectors.txt
  • Last modified: 5 years ago
  • by tarquinwj