GEOM-340 · Lesson 6 of 12 · 26 min

Transverse Mercator and UTM

Many of the coordinates that pass through Coulee Geomatics' office are transverse Mercator coordinates: UTM from GNSS receivers, federal imagery and many national data sets, the transverse Mercator zones of the neighboring states of Idaho and Wyoming, and the GIS work the firm does for clients across state lines. This lesson develops the projection that underlies all of them. The transverse Mercator (TM) is the conformal cylinder of lesson 3, turned so that it touches the ellipsoid along a meridian. Distortion depends almost entirely on distance east or west of that central meridian, which makes it ideal for regions long in the north-south direction, and its formulas, once a matter of laborious series, are now accurate to fractions of a millimeter anywhere they are used.

From Lambert and Gauss to Krüger

Lambert described the transverse Mercator for the sphere in 1772. Gauss developed the ellipsoidal version in the 1820s for the survey of Hanover, and Louis Krüger published practical series for it in 1912, which is why it is called the Gauss-Krüger projection in much of Europe. For most of the twentieth century surveyors computed TM coordinates with power series in the longitude difference, of which the best known in the English-speaking world are Thomas's and Redfearn's of the 1940s and 1950s. Those series are accurate to a millimeter within about 3° to 4° of the central meridian and degrade quickly beyond it, which was one reason for limiting zones to a few degrees.

Krüger's other series, written in powers of the third flattening \(n = f/(2 - f)\) instead of the longitude difference, was rediscovered and extended to higher order in the early 2000s, notably by Charles Karney, who showed in 2011 that a sixth-order version is accurate to about 5 nanometers within 3,900 km of the central meridian. Modern software, including the PROJ library behind most GIS programs, uses this form. It works through the conformal latitude and two intermediate coordinates \(\xi'\) and \(\eta'\) of a transverse spherical Mercator, followed by trigonometric series that convert them to the ellipsoid:

\[\xi = \xi' + \sum_{j=1}^{6}\alpha_j\sin 2j\xi'\cosh 2j\eta', \qquad \eta = \eta' + \sum_{j=1}^{6}\alpha_j\cos 2j\xi'\sinh 2j\eta'\]
\[N = N_0 + k_0 A\,\xi, \qquad E = E_0 + k_0 A\,\eta, \qquad A = \frac{a}{1 + n}\Big(1 + \frac{n^2}{4} + \frac{n^4}{64} + \dots\Big)\]

\(A\) is the rectifying radius, which turns the meridian arc into a length, and the coefficients \(\alpha_j\) are polynomials in \(n\). The inverse uses a second set of coefficients \(\beta_j\) and a short iteration for latitude. The code in this lesson implements both directions, together with the point scale factor and the grid convergence, in about sixty lines of plain Python. It was checked against an independent Redfearn-series computation and agrees to better than a millimeter at the district.

Scale and convergence on a TM zone

Near the central meridian the scale factor of a TM projection with central scale \(k_0\) is approximately

\[k \approx k_0\Big(1 + \frac{E'^2}{2R_m^2}\Big)\]

where \(E'\) is the distance east or west of the central meridian and \(R_m\) the mean radius of curvature. Scale grows with the square of the distance from the central meridian and is almost independent of latitude, so lines of equal scale run roughly parallel to it. With \(k_0 = 1\) the projection is tangent and all scales are greater than one. Reducing \(k_0\) below one makes it secant: two lines of exact scale appear on either side of the central meridian, scales between them are less than one and scales outside are greater than one.

The grid convergence \(\gamma\), the angle between grid north and the meridian at a point, is approximately

\[\gamma \approx \Delta\lambda\sin\varphi\]

where \(\Delta\lambda\) is the longitude difference from the central meridian. West of the central meridian \(\gamma\) is negative in the convention used here: true north points east of grid north, by about 1.4° at CR1. A geodetic azimuth \(\alpha\) measured from true north becomes a grid azimuth \(\alpha - \gamma\), plus the small arc-to-chord correction of lesson 2 for long lines. Confusing the sign of the convergence is one of the commonest errors in survey computations, and the safest check is a sketch showing the meridian and the grid line at the point.

The Universal Transverse Mercator system

UTM, adopted by the United States Army in the late 1940s and later by most of the world's mapping agencies, divides the Earth between 80° S and 84° N into 60 zones, each 6° of longitude wide, numbered eastward from zone 1 at 180° to 174° W. Each zone is a transverse Mercator with these parameters:

UTM zone parameters.
ParameterValue
Central meridian\(\lambda_0 = -183^\circ + 6^\circ \times \text{zone}\)
Scale on the central meridian0.9996
False easting500,000 m
False northing0 m in the northern hemisphere, 10,000,000 m in the southern
Latitude of originThe equator
Latitude bands (for grid references)Letters C to X, each 8° (X is 12°), omitting I and O
Zones at the districtZone 12, central meridian 111° W (108° to 114° W)

The scale factor of 0.9996 on the central meridian was chosen so that the scale is exactly one along two lines about 180 km east and west of it, and reaches about 1.0010 at the zone boundary on the equator, 333 km from the central meridian. Farther north the boundaries are closer to the central meridian, so the edge scale is smaller: at 50° N the boundary is 215 km out and its scale about 1.0002. Over the whole of a zone the scale stays within about −400 to +1,000 ppm, roughly 1 part in 2,500 at worst, adequate for topographic mapping at 1:50,000 and for GIS, not for construction. There are exceptions to the standard zone pattern in south-western Norway and around Svalbard, a reminder that zone numbers should never be computed blindly from longitude where such exceptions apply.

A UTM zone drawn as a vertical strip 6 degrees wide with the central meridian in the middle. Two dashed lines of true scale lie about 180 km either side; shading shows scale below one between them and above one outside. A side graph plots scale factor against distance from the central meridian.
A UTM zone. Scale is 0.9996 on the central meridian, exactly one on two lines about 180 km either side, and above one near the zone edges.
Krüger-series transverse Mercator forward and inverse on GRS80, used for CR1 in UTM zone 12, the scale across the zone and the same point carried into zone 13.
import math
A_GRS80 = 6378137.0
F_GRS80 = 1 / 298.257222101

def tm_setup(a=A_GRS80, f=F_GRS80):
    n = f / (2 - f)
    A = a / (1 + n) * (1 + n**2 / 4 + n**4 / 64 + n**6 / 256)
    al = [n/2 - 2*n**2/3 + 5*n**3/16 + 41*n**4/180 - 127*n**5/288 + 7891*n**6/37800,
          13*n**2/48 - 3*n**3/5 + 557*n**4/1440 + 281*n**5/630 - 1983433*n**6/1935360,
          61*n**3/240 - 103*n**4/140 + 15061*n**5/26880 + 167603*n**6/181440,
          49561*n**4/161280 - 179*n**5/168 + 6601661*n**6/7257600,
          34729*n**5/80640 - 3418889*n**6/1995840,
          212378941*n**6/319334400]
    be = [n/2 - 2*n**2/3 + 37*n**3/96 - n**4/360 - 81*n**5/512 + 96199*n**6/604800,
          n**2/48 + n**3/15 - 437*n**4/1440 + 46*n**5/105 - 1118711*n**6/3870720,
          17*n**3/480 - 37*n**4/840 - 209*n**5/4480 + 5569*n**6/90720,
          4397*n**4/161280 - 11*n**5/504 - 830251*n**6/7257600,
          4583*n**5/161280 - 108847*n**6/3991680,
          20648693*n**6/638668800]
    e = math.sqrt(f * (2 - f))
    return n, A, al, be, e

def tm_forward(lat, lon, lon0, k0, fe=0.0, fn=0.0, a=A_GRS80, f=F_GRS80):
    """Geodetic latitude and longitude (degrees) to TM easting, northing,
    point scale factor k and grid convergence gamma (degrees)."""
    n, A, al, be, e = tm_setup(a, f)
    phi = math.radians(lat); dl = math.radians(lon - lon0)
    t = math.sinh(math.atanh(math.sin(phi)) - e * math.atanh(e * math.sin(phi)))
    xi1 = math.atan2(t, math.cos(dl)); eta1 = math.atanh(math.sin(dl) / math.sqrt(1 + t * t))
    xi, eta = xi1, eta1; p, q = 1.0, 0.0
    for j in range(1, 7):
        xi += al[j-1] * math.sin(2*j*xi1) * math.cosh(2*j*eta1)
        eta += al[j-1] * math.cos(2*j*xi1) * math.sinh(2*j*eta1)
        p += 2*j*al[j-1] * math.cos(2*j*xi1) * math.cosh(2*j*eta1)
        q += 2*j*al[j-1] * math.sin(2*j*xi1) * math.sinh(2*j*eta1)
    E = fe + k0 * A * eta; N = fn + k0 * A * xi
    k = k0 * A / a * math.sqrt(1 + ((1 - n) / (1 + n) * math.tan(phi))**2) * math.sqrt(p*p + q*q) / math.sqrt(t*t + math.cos(dl)**2)
    g1 = math.atan2(t * math.tan(dl), math.sqrt(1 + t*t))
    g2 = math.atan2(q, p)
    return E, N, k, math.degrees(g1 + g2)

def tm_inverse(E, N, lon0, k0, fe=0.0, fn=0.0, a=A_GRS80, f=F_GRS80):
    """TM easting and northing back to latitude and longitude (degrees)."""
    n, A, al, be, e = tm_setup(a, f)
    xi = (N - fn) / (k0 * A); eta = (E - fe) / (k0 * A)
    xi1, eta1 = xi, eta
    for j in range(1, 7):
        xi1 -= be[j-1] * math.sin(2*j*xi) * math.cosh(2*j*eta)
        eta1 -= be[j-1] * math.cos(2*j*xi) * math.sinh(2*j*eta)
    chi = math.asin(math.sin(xi1) / math.cosh(eta1))
    lam = math.atan2(math.sinh(eta1), math.cos(xi1))
    t0 = math.tan(chi); t = t0
    for _ in range(10):
        sig = math.sinh(e * math.atanh(e * t / math.sqrt(1 + t*t)))
        tp = t * math.sqrt(1 + sig*sig) - sig * math.sqrt(1 + t*t)
        dt = (t0 - tp) / math.sqrt(1 + tp*tp) * (1 + (1 - e*e) * t*t) / ((1 - e*e) * math.sqrt(1 + t*t))
        t += dt
        if abs(dt) < 1e-14: break
    return math.degrees(math.atan(t)), lon0 + math.degrees(lam)

def dms(x):
    s = '-' if x < 0 else ''; x = abs(x); d = int(x); m = int((x - d) * 60); sec = ((x - d) * 60 - m) * 60
    if sec >= 59.99995: sec -= 60; m += 1
    if m == 60: m = 0; d += 1
    return f"{s}{d}°{m:02d}'{sec:07.4f}\""

def utm_zone(lon): return int((lon + 180) // 6) + 1
def utm(lat, lon, zone=None):
    z = zone or utm_zone(lon); lon0 = -183 + 6 * z
    E, N, k, g = tm_forward(lat, lon, lon0, 0.9996, 500000.0, 0.0 if lat >= 0 else 10000000.0)
    return z, E, N, k, g

lat, lon = 47.50600422, -111.29779092          # pillar CR1
z, E, N, k, g = utm(lat, lon)
print(f"CR1  {dms(lat)} N  {dms(-lon)} W")
print(f"UTM zone {z}N (central meridian {-183 + 6*z} deg)")
print(f"  E = {E:12.3f} m   N = {N:12.3f} m")
print(f"  point scale factor k = {k:.8f}   grid convergence = {g:+.6f} deg = {dms(g)}")
la, lo = tm_inverse(E, N, -111, 0.9996, 500000.0)
print(f"  inverse: {dms(la)} N  {dms(-lo)} W   (error {abs(la-lat)*111.2e6:.3f} mm, {abs(lo-lon)*72e6:.3f} mm)")

print("\nScale factor across UTM zone 12 at the latitude of CR1")
for dlon in (0, 1, 2, 3, 4):
    _, E1, _, k1, _ = utm(lat, -111 - dlon, 12)
    print(f"  {dlon} deg from the central meridian: E = {E1:10.1f}  k = {k1:.6f}  ({(k1-1)*1e6:+7.1f} ppm)")

# The same point forced into zone 13 (a project that straddles the zone boundary)
z2, E2, N2, k2, g2 = utm(lat, lon, 13)
print(f"\nCR1 in zone 13 (central meridian -105): E = {E2:.3f}  N = {N2:.3f}  k = {k2:.6f}")
Output
CR1  47°30'21.6152" N  111°17'52.0473" W
UTM zone 12N (central meridian -111 deg)
  E =   477574.910 m   N =  5261439.989 m
  point scale factor k = 0.99960618   grid convergence = -0.219576 deg = -0°13'10.4754"
  inverse: 47°30'21.6152" N  111°17'52.0473" W   (error 0.000 mm, 0.000 mm)

Scale factor across UTM zone 12 at the latitude of CR1
  0 deg from the central meridian: E =   500000.0  k = 0.999600  ( -400.0 ppm)
  1 deg from the central meridian: E =   424695.5  k = 0.999670  ( -330.3 ppm)
  2 deg from the central meridian: E =   349392.9  k = 0.999879  ( -121.2 ppm)
  3 deg from the central meridian: E =   274094.4  k = 1.000227  ( +227.2 ppm)
  4 deg from the central meridian: E =   198801.9  k = 1.000715  ( +715.0 ppm)

CR1 in zone 13 (central meridian -105): E = 25829.764  N = 5280649.373  k = 1.002364

CR1 lies in zone 12 at E 477,574.910 m, N 5,261,439.989 m. It is only 0.30° of longitude west of the central meridian, so its easting is 22.4 km less than the false easting. Its point scale factor is 0.99960618, very close to the central value, which means a short line at CR1 is about 394 ppm shorter on the grid than on the ellipsoid, and its grid convergence is −0.2196°, or −0°13'10.5\". The inverse returns the original latitude and longitude to well under a millimeter. Across the zone, at the latitude of CR1, scale runs from −400 ppm on the central meridian to −121 ppm 2° away and +227 ppm 3° away, at the zone edge. Carried into zone 13 instead, CR1 has an easting of only 25,830 m and a scale factor of 1.002364, 6° from that zone's central meridian, which shows why a point should be expressed in its own zone except where a project that straddles a boundary needs one consistent grid.

Zone boundaries, overlaps and grid references

A feature that crosses a zone boundary has coordinates in two zones that cannot be combined directly: the same point has completely different eastings in the two. Mapping agencies handle this by printing an overlap strip, by extending zones a little past their boundaries for projects that straddle them, or by choosing a single zone for a whole project even if part of it lies outside. Extending a TM zone by a degree or so costs a few hundred ppm of extra scale error, which may be acceptable for mapping but should be checked for engineering. Software that converts between zones must use the full projection formulas, inverse then forward; adding a constant shift to the coordinates is wrong.

For grid references, the Military Grid Reference System (MGRS) and the US National Grid (USNG) divide each UTM zone into latitude bands and 100 km squares labeled by two letters, so that a point can be given as, for example, '12T' followed by the square letters and a short easting and northing within the square. CR1 lies in grid zone 12T. US Geological Survey topographic maps show the UTM grid as ticks or lines, and USNG is used by emergency services for search and rescue and incident management. Precision is set by the number of digits: four digits in each of the easting and northing within the square give a position to 10 m, five digits to 1 m.

Choosing k₀ and the width of a TM zone

UTM is one point in a family of choices. Narrowing the zone and raising \(k_0\) toward one reduces distortion. A 3° zone with \(k_0 = 0.9999\) has scale within about −100 to +100 ppm at middle latitudes, the choice made by Alberta's 3TM and by Canada's modified transverse Mercator (MTM) zones of lesson 7. Widening the zone and lowering \(k_0\) covers more ground with one system at the cost of larger errors: Alberta's 10TM, with \(k_0 = 0.9992\), covers the whole province in one zone. State plane TM zones in the United States are mostly about 2° to 3° wide with \(k_0\) between 0.9999 and 0.99996. And a low-distortion projection for a single project may use a TM with \(k_0\) slightly greater than one, chosen to match the height of the ground, which lesson 8 develops.

Worked problem

Scale factor from distance to the central meridian

Estimate the UTM scale factor at CR1, 22.4 km west of the central meridian, using \(R_m = 6{,}381\) km, and compare it with the code's 0.99960618.

Show solution
  1. \[k \approx 0.9996\Big(1 + \frac{22.4^2}{2 \times 6381^2}\Big) = 0.9996\,(1 + 0.0000062)\]
  2. \[k \approx 0.9996 \times 1.0000062 = 0.9996062\]

Answer: The estimate agrees with the full formula to about a part in ten million, ample for planning. Computations of record use the full formula.

Worked problem

Converting a geodetic azimuth to a grid azimuth

A GNSS-derived geodetic azimuth from CR1 to a mark on the canal is 87°14'20\". The grid convergence at CR1 in UTM zone 12 is −0°13'10\". What is the grid azimuth, ignoring the arc-to-chord correction?

Show solution
  1. \[\alpha_{grid} = \alpha - \gamma = 87^\circ 14'20'' - (-0^\circ 13'10'')\]
  2. \[\alpha_{grid} = 87^\circ 27'30''\]

Answer: West of the central meridian true north points east of grid north, so a line's grid azimuth is larger than its geodetic azimuth. A sketch of the two norths at the point confirms the sign.

Common mistakes

  • MistakeUsing Redfearn-type series far from the central meridian.

    InsteadUse the Krüger n-series, accurate to nanometers within thousands of kilometers.

  • MistakeAdding a constant to convert coordinates from one UTM zone to the next.

    InsteadConvert by inverse and forward projection.

  • MistakeApplying grid convergence with the wrong sign.

    InsteadDraw true north and grid north at the point; grid azimuth = geodetic azimuth − γ.

  • MistakeComputing the UTM zone from longitude in regions with zone exceptions.

    InsteadCheck the published zone for the area, and the project's chosen zone.

  • MistakeTreating UTM distances as ground distances for staking.

    InsteadApply the scale factor and height factor (lesson 8), or use a low-distortion projection.

Summary and key terms

  • The transverse Mercator is the conformal cylinder touching the ellipsoid along a central meridian; distortion grows with the square of distance from it.
  • Modern software uses Krüger's n-series, accurate to nanometers within thousands of kilometers.
  • Scale is k0 on the central meridian; with k0 below one the projection is secant with two lines of true scale.
  • Grid convergence is about Δλ sin φ; grid azimuth equals geodetic azimuth minus γ, plus arc-to-chord.
  • UTM uses 60 zones of 6° with k0 = 0.9996 and a false easting of 500,000 m.
  • Narrower zones with k0 near one, such as 3° zones, have far less distortion than UTM.
Transverse Mercator
The conformal cylindrical projection in transverse aspect, true scale along or near a central meridian.
Central meridian
The meridian along which a TM projection has scale k0.
UTM
Universal Transverse Mercator: 60 zones of 6°, k0 = 0.9996, false easting 500,000 m.
Krüger series
Trigonometric series in the third flattening used to compute TM coordinates accurately.
Third flattening
n = f/(2 − f), the small parameter of the Krüger series.
Rectifying radius
The radius A that converts the meridian arc into a length.
MGRS
Military Grid Reference System, alphanumeric grid references based on UTM.

Practice problems

Work each problem on paper first, then reveal the answer to check.

  1. What is the central meridian of UTM zone 11?

    Show answer

    −183° + 66° = −117°, that is 117° W.

  2. About how far from the central meridian is the scale factor exactly one on UTM?

    Show answer

    About 180 km.

  3. A point lies 2° east of the central meridian at latitude 50°. Estimate the grid convergence.

    Show answer

    About 2° × sin 50° = 1.53°, positive.

  4. Why does a 3° zone with k0 = 0.9999 distort less than UTM?

    Show answer

    Its points are closer to the central meridian and the central scale is closer to one.

  5. Two parcels lie on opposite sides of a UTM zone boundary. How should a single project coordinate system be chosen?

    Show answer

    Use one zone (or a project projection) for the whole project, converting all data by full projection formulas.

Lesson quiz · 5 questions

Score 60% or more to complete this lesson.

Take the quiz