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})")
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)
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)