Mass make-ready analysis for communications rebuilds. Feed it a CSV of poles exported from CAD, get back the same poles with a proposed attachment height and a make-ready verdict on each one.
Built in 2015 to kill a manual step. Engineering a rebuild meant reading every pole by hand, working out where the new attachment could go, and deciding whether the pole needed make-ready. On a few hundred poles that is a week of desk time and a lot of chances to get it wrong. This does it in one pass and tells you why it called each one.
For every pole in the CSV:
- Finds all existing communication attachments and picks the highest one.
- Sets the proposed height of attachment (PHOA) at 12 inches above that. If the pole has no comm on it, PHOA defaults to 22 feet 2 inches.
- Measures PHOA against the lowest power, the lowest circuit, the bottom of any street light, and the bottom of any transformer.
- Flags the pole for make-ready if any of those clearances fail, and writes a plain sentence saying which one and by how much.
Output is a CSV with two columns added: MR and PHOA.
The tool does not just return true or false. Every flagged pole carries text like:
PHOA within 8 inches from lowest power.
PHOA is 3 inches above bottom of a street light.
A make-ready call has to survive review by the pole owner. A verdict you cannot explain is a verdict you will end up defending on a call, so the analyzer writes down its reasoning as it goes.
Four thresholds, all configurable on the settings page, in inches:
| Clearance | Default | Covers |
|---|---|---|
| Lowest power to PHOA | 40 | Primaries, secondaries, transformer drip loops |
| Lowest circuit to PHOA | 12 | Street light drip loops, traffic circuits |
| Street light bottom to PHOA | 4 | |
| Transformer bottom to PHOA | 30 |
They are settings rather than constants because the numbers move. Different owners and different jurisdictions enforce different minimums, and you do not want to edit source code to run the same route under a second standard.
Telephone poles (TYPE of TELCOPL) skip the power check and get measured against the top of the pole instead.
A CSV exported from the CAD file. One row per pole:
HANDLE,REF,PLTG,OWNR,MP,ADRES,LOC,BLNK,LWSTPWR,TRFCCRCT,STLT,PWRFBR,
UKNCM,UNKCM1,UNKCM2,CATV,CATV1,UNKCM3,UKNCM4,TELCO,TELCO1,TELCO2,
TELCO3,UKN,UKN1,COMNTS,TYPE
Attachment cells are free text, written the way a fielder writes them:
sec dL 29 1
arm l bolt 14 5 / arm h bolt 16 5
tdl 27 5
Heights are feet then inches. The analyzer parses the height out and works out what the attachment is from the words around it.
This is the part that took the longest. Nobody writes attachment labels the same way twice, so the analyzer matches against abbreviation families rather than exact strings:
- Street light:
strl,stl,stlt - Transformer:
transformer,trans,trns,tdl,trans dl - Traffic circuit:
trfccrt,tcir,traffic,trcir,trccir,trf - Pole tag:
pltg,tg,pl,tag - Pole height:
plht,pl ht,pole height,pole ht - Bottom:
btm,bottom - Drip loop:
dl,drip
There are test CSVs in tested-pole-csvs/ for the abbreviation families, plus real routes that were run through it and checked against hand analysis.
WordPress plugin. Drop wp-content/plugins/attachment_analyzer/ into a WordPress install and activate it. Upload a CSV on the settings page, set your clearances, run it. Output lands in assets/generated_csv_files/.
It takes over the admin UI (it strips the default WordPress menus), so put it on its own install rather than a site you use for anything else.
Written in 2015 and not maintained since. It works on the data it was built for and the analyzed CSVs in this repo are real output, but read it as a record of how the problem was solved, not as a library to drop into production.
Known rough edges, in the interest of not wasting your time:
class-poleAnalyzer.phpis 1,227 lines across 14 methods. Some of those methods are far too long.- Abbreviation lists are comma separated strings rather than arrays.
- A configured clearance of
0falls through to the default, because the settings check is truthy rather than an isset. - Some magic numbers still sit alongside the configurable ones.
Deterministic rules doing the measuring and classifying, with the output explaining itself. The same split shows up later in OneShotPro.ai, where a vision model detects pole hardware and scripted code handles the measurement and the make-ready call. This repo is where that pattern started.
Related: FeatureRouteMaps.net, field mapping to CAD and GIS export for outside plant.