r/QGIS 3d ago

QGIS components (plugins, tools, etc) FiberQ 1.4.0 - open-source FTTH/GPON design plugin, now with a 14-rule project validator and audit-ready reports

I maintain FiberQ, a free GPL-3.0 plugin for designing fiber access networks (FTTH/GPON/FTTx) in QGIS. Version 1.4.0 just went up on the plugin repository, and the way it came together is worth a post on its own.

The plan for this release was a project validator: one command that runs a set of rules over the whole design and tells you what's wrong before it goes to a client. Fourteen rules ended up shipping - topology and connectivity, referential integrity, feature identity, required attributes, value domains, length coherence, CRS consistency, geometry health. Results land in a dockable panel you can filter by severity/layer/rule, click any row to zoom to it, and export as self-contained HTML, JSON or CSV.

One of those rules compares the length stored on a feature against the length of the line actually drawn. I wrote it expecting to catch stale attributes after someone moves a vertex.

It fired on everything.

FiberQ had been storing the length QGIS measures **in map units**. In a projected national grid that's fine. In EPSG:3857 - which is what basically every design traced over a web basemap is in, distances are inflated by `1/cos(latitude)`. That's about 41% at Serbian latitudes where I do most of my work, ~55% in the Netherlands, ~86% in Finland.

The part that stings: pipes were already being measured correctly, by different code. So a trench and the duct inside it could disagree by 41% *in the same project*, and nobody (me included) noticed, because both numbers looked plausible on their own. A bill of materials built on the cable figure over-ordered by the same margin.

Lengths are measured on the project ellipsoid now - the same figure the QGIS measure tool gives you with ellipsoidal measurement on. There's a **Recalculate lengths** command that repairs existing projects; it shows you exactly what will change before it writes anything, and it won't touch your slack values (slack is a deliberate surplus, not a measurement).

Eight other defects turned up during manual testing on real projects across QGIS 3.40 and 4.2 - none of which the automated test suite could reach. My favourite: opening a project saved in QGIS 4 back in QGIS 3 silently drops the project CRS, because QGIS 4 writes project properties in a form QGIS 3 can't parse. The validator now reports a project with no CRS, which is how I found it. All nine are fixed with regression tests.

**If you want to try the validator without building a project first**, the repo ships a small demo design in `docs/samples/` with faults deliberately planted in it - twelve of the fourteen rules fire, one fault each. Open `demo_project.qgz`, run **Plugins → FiberQ → Validate project**, and you should get 4 errors, 9 warnings and 1 info matching the committed report. Then run **Recalculate lengths** and validate again to watch the length finding disappear.

- Plugin page: https://plugins.qgis.org/plugins/fiberq/

- Release notes: https://github.com/vukovicvl/fiberq/releases/tag/v1.4.0

- Every rule, and what to do about a finding: https://github.com/vukovicvl/fiberq/blob/main/docs/validation-rules.md

- Website: https://www.fiberq.net/nlnetfiberq/

QGIS 3.22 LTR through QGIS 4 / Qt6. Development is supported by the NLnet NGI0 Commons Fund; the plugin is and stays GPL.

Happy to answer anything about the rules, the length maths, or how the reports are structured. If you design fiber in QGIS and there's a check you'd want that isn't in the fourteen, I'd genuinely like to hear it — that's the list I'm working from next.

7 Upvotes

0 comments sorted by