DEV Community

MezuxTouch
MezuxTouch

Posted on

Checking HDD Bore Clearance Against Mapped Utilities with NumPy

Horizontal directional drilling (HDD) lets you lay pipes and fibre ducts without opening the road, but the bore has to pass existing utilities with enough vertical clearance. If you already have a planned bore profile and a list of utility crossings with depths, a few lines of NumPy will flag the conflicts before anyone starts drilling.

Inputs

  • A planned bore profile: depth below ground at each chainage (distance along the route).
  • Utility crossings, typically from an HDD route survey or a GPR depth profile: name, chainage, depth to centre, and diameter.
  • The final reamed hole diameter and the clearance your project requires.

The code

import numpy as np

# Planned HDD bore: entry at chainage 0 m, exit at 120 m, max depth 3.0 m mid-span
ch = np.arange(0, 121, 1.0)                       # chainage every 1 m
bore_depth = 3.0 * np.sin(np.pi * ch / 120)       # simple arc profile (m below ground)

# Utilities crossing the route, from a GPR L-section: (name, chainage m, depth m, diameter m)
utilities = [
    ("LT cable",        14.0, 0.8, 0.05),
    ("Water main",      38.5, 1.6, 0.30),
    ("Telecom duct",    61.0, 1.2, 0.11),
    ("Sewer",           88.0, 2.2, 0.45),
    ("HT cable",       109.0, 1.1, 0.10),
]
REAMER_DIA = 0.25   # final reamed hole diameter (m)
MIN_CLEAR  = 0.50   # project's required vertical clearance (m)

print(f"{'utility':<14}{'ch(m)':>7}{'bore':>7}{'util':>7}{'clear':>7}  status")
for name, c, d, dia in utilities:
    b = np.interp(c, ch, bore_depth)
    # edge-to-edge vertical gap between reamed hole and utility
    clear = abs(b - d) - REAMER_DIA / 2 - dia / 2
    side = "below" if b > d else "above"
    status = "OK" if clear >= MIN_CLEAR else "CONFLICT"
    print(f"{name:<14}{c:>7.1f}{b:>7.2f}{d:>7.2f}{clear:>7.2f}  {status} (bore {side})")
Enter fullscreen mode Exit fullscreen mode

Output

utility         ch(m)   bore   util  clear  status
LT cable         14.0   1.08   0.80   0.13  CONFLICT (bore below)
Water main       38.5   2.54   1.60   0.66  OK (bore below)
Telecom duct     61.0   3.00   1.20   1.62  OK (bore below)
Sewer            88.0   2.23   2.20  -0.32  CONFLICT (bore below)
HT cable        109.0   0.85   1.10   0.07  CONFLICT (bore above)
Enter fullscreen mode Exit fullscreen mode

Reading the result

  • The check uses edge-to-edge distance, so both the reamed hole and the utility diameter count. A negative value, like the sewer row, means the reamed hole would actually cut into the pipe.
  • A bore can conflict while passing above a utility too, as the HT cable row shows near the exit point, where the bore is still shallow.
  • Fixes are usually a steeper entry or exit angle, a deeper mid-span, or shifting the entry pit.

The quality of this check depends entirely on the utility depths you feed it. That data normally comes from a GPR survey with depth profiles, such as an L-section GPR survey; typical rates are on this GPR survey price list.

Top comments (0)