If you build tools for telecom, power or pipeline teams, sooner or later someone asks: "What will the ground penetrating radar (GPR) survey cost for this route?" The answer is usually a simple per-metre calculation with a few rules on top: different rates per survey type, a minimum billable length, and GST.
Here is a small, dependency-free Python estimator you can drop into a planning script or notebook.
The rate card
The numbers below come from our published GPR survey price list:
- Standard GPR route survey: Rs 24 per metre
- L-section (depth profile) survey: Rs 32 per metre
- 4 km minimum per job, GST extra
Volume discounts and extras like mobilisation and drawings are not modelled here; check the rate card for those.
The code
from dataclasses import dataclass
RATES_PER_M = {"standard": 24.0, "l_section": 32.0} # INR per metre
MIN_LENGTH_M = 4_000 # 4 km minimum per job
@dataclass
class Segment:
name: str
length_m: float
survey: str = "standard" # or "l_section"
def estimate(segments, gst_rate=0.18):
lines, subtotal = [], 0.0
total_len = sum(s.length_m for s in segments)
# Minimum billing applies to the whole job; bill any shortfall at the standard rate
shortfall = max(0.0, MIN_LENGTH_M - total_len)
for s in segments:
cost = s.length_m * RATES_PER_M[s.survey]
lines.append((s.name, s.survey, s.length_m, cost))
subtotal += cost
if shortfall:
cost = shortfall * RATES_PER_M["standard"]
lines.append(("minimum-length top-up", "standard", shortfall, cost))
subtotal += cost
gst = subtotal * gst_rate
return lines, subtotal, gst, subtotal + gst
route = [
Segment("Main road stretch", 2_600),
Segment("NH crossing (HDD)", 180, "l_section"),
Segment("Service lane", 750),
]
lines, sub, gst, total = estimate(route)
for name, kind, m, c in lines:
print(f"{name:<24}{kind:<11}{m:>8,.0f} m Rs {c:>10,.0f}")
print(f"{'Subtotal':<43}Rs {sub:>10,.0f}")
print(f"{'GST @18%':<43}Rs {gst:>10,.0f}")
print(f"{'Total':<43}Rs {total:>10,.0f}")
Output
Main road stretch standard 2,600 m Rs 62,400
NH crossing (HDD) l_section 180 m Rs 5,760
Service lane standard 750 m Rs 18,000
minimum-length top-up standard 470 m Rs 11,280
Subtotal Rs 97,440
GST @18% Rs 17,539
Total Rs 114,979
Notes
- Mixing survey types: crossings that will be drilled usually need an L-section GPR survey for depth, while the rest of the route can be a standard survey. Modelling segments separately keeps that visible in the estimate.
- Minimum length: short jobs get topped up to the minimum, which is why small routes often cost more per metre than you expect.
- GST: keep the rate a parameter, since it can change.
From here it is easy to read segments from a CSV or a GIS export and produce a quick budget table for a tender.
Top comments (0)