Cave Surveying Notes

These documents discuss some of the details of error distribution around loops in survyes. There are two published articles by Patrick Warren & Andy Waddington, and some notes by Olly Betts.

There is also a link to the related subject of dealing with larger non-random errors in the loop closure algorithm, by Larry Fish.


Subject: Patrick Warren article from 1988 Cambridge Underground

Treatment of Errors in Surveying

The errors that occur in surveying are no different to those that occur when making measurements in science or technology. They can be divided into two types: systematic errors which occur because of faulty calibration of instruments, or bad technique using them and random errors which occur because all instruments are limited in precision and no two readings can be exactly repeated. A further type of error often considered is the gross error, when the surveyor makes a silly mistake. These can be avoided by taking care at all stages of producing a survey, but usually can be recognised when plotting the survey by, for example, unusually large misclosures, reversed legs, the centre line drifts above ground, etc.

I won't cover surveying methods and reduction of survey data here; the best overall guide is "Surveying Caves" [BCRA, ed. B. Ellis, 1976] which also includes a chapter on errors in surveying, but doesn't cover random errors.

1) Systematic Errors

These can and should be taken care of by calibrating instruments and knowing how to use them properly. We consider only the classical surveying instruments - compass, clino and tape.

Compass Correction - this can be found by taking two known points on a map and sighting the compass between them on the ground. Comparison between the compass reading and the bearing found from the map gives the amount to be added to or taken from a compass reading to get a correct bearing. The process should be repeated more than once in different directions to obtain a mean value. It is possible to go directly from a compass reading to a bearing with respect to True North by including the magnetic deviation in the correction.

The effect on a survey of a systematic compass error is to rotate the whole survey by the error. No misclosure errors will be introduced into networks by missing out the compass correction, which is really only needed when marking North on the survey. If more than one compass is used however, the effect is not so simple and corrections for both should be found before plotting the survey.

Clino Correction - this can be found more simply than the compass correction by simply picking two points on the ground and measuring the vertical angle from one to the other and vice versa. These two readings should be of equal magnitude and opposite sign. The clino correction is simply the amount that has to be added to or taken from the two readings to make them satisfy this requirement. Again the calibration should be repeated more than once with different elevations to find a mean value.

For the same reason that clino calibration is easier than compass calibration, its effect on a survey is more drastic. A systematic clino error causes the vertical elevation to become completely unpredictable - it depends on which legs were surveyed forwards and which backwards. In network caves such an error can lead to large vertical misclosures which a computer program will almost certainly not distribute correctly. For this reason it is much more important to have a good idea of the clino correction than the compass correction.

Tape correction - just make sure lengths are measured from the end of the tape! Some tapes (non metal ones) can sustain damaged ends and it may be easier to cut the end off and measure from further along. On old tapes, check that nobody has done this already!

By their nature these can only be treated statistically, and estimates of their size will only be needed for surveys including closed loops. If none of your surveys are like that, don't bother confusing yourself over this part!

For surveys with loops, or networks, some estimate of the relative size of the random errors which cause misclosures is needed. Once these have been found the misclosure can be distributed back through the network. The only sensible way to do this is by least squares - see the author's detailed article in the previous Journal [CUCC Underground 1986-7] (also a forthcoming paper in cave science).

The analysis shows what we need to know are the standard deviations (std devs) for the Easting, Northing and Height changes (from now on I call these x,y,z respectively). Misclosure errors are distributed weighted with the square of this standard deviation, so a leg with twice the std dev as another gets four times the error. The network can be treated independently in the x, y and z directions (under some simplifying assumptions).

A typical leg has Length (L), Clino (C) and Bearing (T) readings. When these have been corrected for systematic errors, we can work out the Easting, Northing and Height changes (x,y,z):

   x = L cos(C) sin(T)     y = L cos(C) cos(T)     z = L sin(C)

The sources of random error in these are in the measurement of L, T and C. We take the approximate magnitudes of these errors to be dL, dT and dC respectively. These can be viewed as being the precision with which the measurement is made. A further source of error is in the station position. This we take as about dP in any direction, distributed equally over each of the three directions x,y,z.

We can work out approximate standard deviations for the Easting, Northing and Height changes. Calling them sx, sy and sz respectively we get:

   sx^2 = dP^2/3 + [x dL / L]^2 + [z sin(T) dC]^2 + [y dT]^2

   sy^2 = dP^2/3 + [y dL / L]^2 + [z cos(T) dC]^2 + [x dT]^2

   sz^2 = dP^2/3 + [z dL / L]^2 + [L cos(C) dC]^2

Note that dC and dT must be in radians eq:- dT(radians) = dT(degrees)/57.30

The formulae are ambiguous for vertical legs, where there is no compass bearing. We should have instead:

   sx^2 = sy^2 = dP^2 + 1/2 [L dC]^2

         sz^2 = dP^2 + dL^2

The effect can be achieved by using the previous formulae with a value of 45 for the bearing. This doesn't of course have any affect on x,y,z.

What are the values of dP, dL, dC, dT? The BCRA survey centre line gradings [Surveying Caves] suggest for Grades 3 and 5 we use the values in table 1.

In table 2 there are some examples of standard deviations worked out for a range of leg lengths, for both approximately horizontal, and vertical legs. As can be seen there is some variation within one Grade, but Grade 3 errors are about five times greater than Grade 5. This leads us to conclude that one should either take all legs within a grade to have about the same error, or work each error out exactly - there aren't really any half-way options. It seems sensible only to include exact errors in a computer program, which can work them out easily enough. Such a program could also distribute the errors back according to least squares.

The factor of five between Grades 3 and 5 should be acknowledged however when distributing misclosures back - legs surveyed to Grade 3 should receive twenty-five times the error appropriated to legs surveyed to Grade 5.

Further Considerations

Legs surveyed to standards other than Grade 3 or 5 can have their errors taken into account in the same way. Since errors arising from measurement of L, T, C and station position should be roughly of the same magnitude, a guide is that the standard deviation is about the same as any one of these errors.

The above calculations shed light on the practice of distributing errors back directly proportional to L, the slope length. This isn't right because it ignores station position error, and doesn't take into account the variations with compass bearing (T) and clino reading (C), which are significant. The size of these variations spoils any proportionality to slop length. Comparing standard deviations with slope lengths in table 2 illustrates this.

Be careful of using these formulae to freely - a computer which distributed a vertical misclosure along a canal passage would give a slope to the water's surface! The answer here is to set to zero (or make very small) the vertical standard deviations for legs surveyed along the canal.

Other methods must be applied to other techniques of surveying such as levelling or using a theodolite. Radio location is typical of these - not much has been done to estimate the errors which can occur. Generally depth measurement is less accurate than location of the null point; in good conditions the errors are quoted as being 2m-3m for location, and 5m-10m for depth, for a total depth of about 100m [Surveying Caves].

It is quite important to know the errors since most radio locations are part of loops, surveyed back on the surface to the cave entrance, and we need to know how much mislosure can be attributed to the radio location. Too little would distort the survey and too much would remove the point of doing a radio location in the first place.

Source of Random Error     Symbol      Grade 3          Grade 5
Station position error       dP         0.50m            0.10m
Length error                 dL         0.50m            0.10m
Compass error                dT     2.5 (0.044rad)   1.0 (0.018rad)
Clino error                  dC     2.5 (0.044rad)   1.0 (0.018rad)

Table 1 - Suggested values for random errors.

     Length    Clino   Bearing        Easting   Northing   Height
      (L)       (C)      (T)            (x)       (y)       (z)
A    2.18m      +5       010           0.38m     2.14m     0.19m
B    6.09       +3       297          -5.42      2.76      0.32
C   10.83       -7       135           7.60     -7.60     -1.32
D    3.47      -90      (045)          0.00      0.00     -3.47
E    6.70      -90      (045)          0.00      0.00     -6.70
F   11.35      -90      (045)          0.00      0.00    -11.35

     sx      sy      sz            sx      sy      sz
A   0.32m   0.57m   0.31m         0.07m   0.11m   0.07m
B   0.54    0.44    0.39          0.12    0.11    0.12
C   0.56    0.56    0.55          0.16    0.16    0.20
D   0.31    0.31    0.58          0.07    0.07    0.12
E   0.36    0.36    0.58          0.10    0.10    0.12
F   0.45    0.45    0.58          0.15    0.15    0.12
          Grade  3                      Grade  5

Table 2 - Examples of legs, and their random error estimates.

Subject: Article about error formulae by Andy Waddington - Published in Cambridge Underground 1990

Error Formulae

[Note: I think dD in eqn (10) should read dZ (I've done some calcns) - Olly]

With the coming of cheap computing power, the days of working out the coordinates of a cave survey by hand and adjusting loops by eye are fast fading. Unfortunately, surveys are still as subject to error as ever they were and it is useful to use that computing power to detect gross errors and distribute the random error corrections around loops. Long standing readers of this august journal will have noticed that the topic of cave survey error distribution is as popular now as the subject of battery chargers was a few years ago.

The method of least squares can be used to calculate the error corrections to be applied to a survey traverse. The algorithm of Warren (1988) has now been implemented in at least two survey reduction programs, and is proving very successful. Once a correction has been calculated for a traverse, however, the question of how to distribute this correction among the survey legs arises. As Warren (1988) pointed out, there is little justification for splitting the correction up proportionately by length of survey leg, as at least part of the error is attributable to station position error. The solution both for the survey leg weighting in the initial least squares analysis and for the eventual distribution of the error along the traverse is to form an estimate of the standard deviation of the errors associated with each leg. Warren gave formulae for these variances as follows :

sx^2 = dP^2 /3 + [x dL/L]^2 + [z sin(T) dC]^2 + [y dT]^2    ... (1)
sy^2 = dP^2 /3 + [y dL/L]^2 + [z cos(T) dC]^2 + [x dT]^2    ... (2)
sz^2 = dP^2 /3 + [z dL/L]^2 + [L cos(C) dC]^2               ... (3)
     for inclined legs and 

sx^2 = sy^2 = dP^2 /3 + 1/2 [L dC]^2                        ... (4)
sz^2        = dP^2 /3 + dL^2                                ... (5)
     for vertical legs

where dP, dL, dC and dT are the standard errors associated with the measurements of station position, leg length, clinometer and compass respectively. It is clear that equation (3) reduces to (5) for vertical survey legs. However, equations (1) and (2) don't reduce to equation (4). While the second and fourth terms disappear, the third term becomes meaningless as T becomes irrelevant. Making the horizontal error on a vertical leg proportional to its length is sound, and the second term of equation (4) represents a circular distribution of error around the calculated point, which is what we would expect.

A problem arises, however, with equations (1) and (2) for legs which are very nearly vertical, but not quite. To take a concrete example, the slightly off-vertical leg with a compass bearing due east will have a much smaller error estimate in the north-south direction than the vertical leg, using equations (2) and (4). This is clearly anomalous and arises because the error in the compass direction is not independant of the inclination of the leg. At half a degree off the vertical, the difference between a leg going due east and one going due north is still less than a degree of arc.

Revised equations which take this problem into account are now presented :

sx^2 = dP^2 /3 + [x dL/L]^2 + [y dT]^2 +
         [ 1/2 + sin^2(T)cos^2(C) ].[ z dC ]^2              ... (6)
sy^2 = dP^2 /3 + [y dL/L]^2 + [x dT]^2 +
         [ 1/2 + cos^2(T)cos^2(C) ].[ z dC ]^2              ... (7)
sz^2 = dP^2 /3 + [z dL/L]^2 + [L cos(C) dC]^2               ... (8)

An alternative method of surveying is used by the cave diving community, who use their depth gauges instead of clinometers. In this case, the uncertainties arising from station position, length and compass are very much the same as for conventional survey methods. However, depth gauge tolerances have a somewhat different effect, giving the equation :

sz^2 = 2 dZ^2                                               ... (9)

for the vertical error, where dZ is the error in each depth gauge reading.

Horizontally, the situation is a little more complex. At first sight

sx^2 = dP^2 /3 + [x dL/L]^2 + [y dT]^2 + [ dD z sin(T) / D ]^2  ... (10)

where D is the plan length: D = sqr( L^2 - z^2 ), would appear to be the error, but inspection will show that this predicts an infinite horizontal error if the length equals the depth change, and an imaginary error if the measured depth change exceeds the length of the leg (which is quite possible, on a vertical leg, given the measurement tolerances we are trying to deal with !). The simplest way out is to check if the calculated plan length is less than the errors in leg length and depth change added in quadrature, and if so, assume that the errors in both x and y directions are equal to this tolerance. ie.:

if ( D^2 <= ( 2 dZ^2 + dL^2 )) then

   sx^2 = sy^2 = ( 2 dZ^2 + dL^2 )                               ... (11)

else use equation (10) above

While this is less than wholly satisfactory, it does resolve the problem in a way suitable for implementation of a closure algorithm, and warns us that near-vertical legs are not a good idea in underwater cave surveys. Unfortunately, given the layout of a cave underwater, the diver may not have a great deal of choice.

References :

Warren, 1988 : Treatment of errors in surveying in Cambridge Underground Vol 3 no. 7 (1988), pp 16-18

From: O.J.W. Betts <>
Subject: Survex error formulae

Survex Error Formulae

Normal (Spherical Polar) Data

dP = position standard error
dL = length standard error
dT = compass standard error
dC = clino standard error

x = L.sin(T).cos(C)
y = L.cos(T).cos(C)
z = L.sin(C)

sx^2 = dP^2 /3 + [x dL/L]^2 + [y dT]^2 +
         [ 1/2 + sin^2(T)cos^2(C) ].[ z dC ]^2
sy^2 = dP^2 /3 + [y dL/L]^2 + [x dT]^2 +
         [ 1/2 + cos^2(T)cos^2(C) ].[ z dC ]^2
sz^2 = dP^2 /3 + [z dL/L]^2 + [L cos(C) dC]^2

(Waddington, from CUCC Journal 1989 or 1990)

Diving Data

dP = position standard error
dL = length standard error
dT = compass standard error
dZ = depth gauge standard error
D  = sqr( L^2 - z^2 )  [plan length]

if D^2 < 0 then
  x = D.sin(T)
  y = D.cos(T)
z = z

if ( D^2 <= ( 2 dZ^2 + dL^2 )) then

   sx^2 = sy^2 = ( 2 dZ^2 + dL^2 )


   sx^2 = dP^2 /3 + [x dL/L]^2 + [y dT]^2 + [ dZ z sin(T) / D ]^2
   sy^2 = dP^2 /3 + [y dL/L]^2 + [x dT]^2 + [ dZ z cos(T) / D ]^2

sz^2 = 2 dZ^2

(Waddington, from CUCC Journal 1989 or 1990)


dP = position standard error
dx = Easting standard error
dy = Northing standard error
dz = Height change standard error

x = x
y = y
z = z

sx^2 = dP^2 /3 + dx^2
sy^2 = dP^2 /3 + dy^2
sz^2 = dP^2 /3 + dz^2

(Olly - what mathematical skill, heh?)


dP = position standard error
dl = counter standard error
dT = compass standard error
dC = clino standard error
L  = <ToCount> - <FromCount>

x = L.sin(T).cos(C)
y = L.cos(T).cos(C)
z = L.sin(C)

sx^2 = dP^2 /3 + 2[x dl/L]^2 + [y dT]^2 +
         [ 1/2 + sin^2(T)cos^2(C) ].[ z dC ]^2
sy^2 = dP^2 /3 + 2[y dl/L]^2 + [x dT]^2 +
         [ 1/2 + cos^2(T)cos^2(C) ].[ z dC ]^2
sz^2 = dP^2 /3 + 2[z dl/L]^2 + [L cos(C) dC]^2

(Olly, after Waddington)

Cylindrical Polar

dP = position standard error
dh = horizontal length standard error
dT = compass standard error
dZ = vertical standard error

x = h sin T
y = h cos T
z = z

sx^2 = dP^2 /3 + (x dh/h)^2 + [y dT]^2
sy^2 = dP^2 /3 + (y dh/h)^2 + [x dT]^2
sz^2 = dP^2 /3 + dZ^2


From: O.J.W. Betts <>
Subject: Network reduction pseudocode

Network reduction:
for each node in turn:
 if it's an unfixed one node
  follow traverse back to a non unfixed-2-node
  store the traverse on stack
  remove traverse from network

for each node in turn:
 if it's not an unfixed-2-node
  follow each link to another non unfixed-2-node
  store the traverse on stack
  replace traverse with equivalent single leg

where appropriate:

where appropriate:

where appropriate:

/*  X Y            X Y
   -o=o- becomes: -o-o-

/*  X             X
   -o-\ becomes: -o
stack removed legs

do a delta_star

if not fixed, stack it and trim it; two_node(X);

if not fixed, stack it, replace it and try remove parallel and remove lollipop;
/* dx'=(vx1.dx2+vx2.dx1)/(vx1+vx2); vx'=vx1.vx2/(vx1+vx2); */

From: O.J.W. Betts <>
Subject: Loop closure etc.

Survex Docs oddments

(Last amended 1993.03.07)

Loop Closure

If your survey data contains loops, then errors in the instrument readings will cause there to be misclosure around the loop ie The two "ends" don't meet. Survex will adjust the position of stations in loops, using the technique of least squares (a common statistical method of dealing with errors which "makes sense" in this context. Briefly, the station positions are chosen to minimise the sum of the squared errors in each leg in every loop.) All station positions are calculated together by this technique, so in no sense can one talk about the order in which loops are closed in a survey with multiple loops.

However, there is another possible source of error in the survey data that Survex processes: Gross errors, ie those which come from misreading the instruments, or from mistakes in transcription (eg the compass reading is 017 degrees, but the note-taker mis-hears and writes down 070. The occurrence of this sort of error can be reduced by careful thought. One good solution is for the note-taker to read back the numbers in a different way. So is the instrument man read 'Seventeen', the note-taker would reply 'Oh Seven Oh' and the error spotted. Another possibility is mis-typing data into the computer. Simply getting someone to read the data from the screen as you compare with the survey notes works well here. Several people are keen on having an entry screen which is layed out like the survey book page. Such a front end could easily be added to Survex.

However, gross errors can slip through even the most careful schemes, so Survex will give the percentage error along each traverse that it has distributed an error along. Hopefully, future versions will allow you easily to experiment on the effect of breaking survey legs, to aid detection of gross errors.

I have heard that a few people argue against closing loops, claiming that major errors must be due to gross errors, which should be eliminated by resurveying if they cannot be resolved in any other way. I do not agree with this view. Firstly, Kaninchenhoehle, for example, has several loops over a kilometre long. An error of 1% would give a misclosure of over 10m, which leaves a visible gap in the centre-line plot. More importantly, it may not be possible to resurvey (eg, survey data from an overseas expedition). If you get high errors in any traverses, you should certainly investigate why, but ultimately, you have a survey to produce and short of drawing your surveys with gaps in, what else can you do?

If you really don't want your loops closed, simply break them by calling one of the points by a different name in each leg. Eg, a loop: 1-2-3-4-5-1 can be split to:1-2-3-4-5-1a. Survex says how many loops it found in the data, so you can easily spot if any loops are being closed. I may add an option to break any loops found, but this has a low relative priority.

Last update 24 March, 1993.

Back to Cave Surveying

These pages may not have been updated for some time. For (possibly) up-to-date info about CSG, go to the BCRA SIG Home Page

British Cave Research Association (UK registered charity 267828). Registered Office: The Old Methodist Chapel, Great Hucklow, BUXTON, SK17 8RG
BCRA Home Page | SIG Home Page | CSG Home Page

This page, was last modified on Wed, 28 May 1997 11:56:00 +0100