openFTTH
FeaturesHow it worksDocsChangelogGitHub

Docs/Design

Importing data

Design from the GIS files you already have: formats, roles, import profiles and the quality report.

2 min read

openFTTH designs from the data a designer already has, not only from an OpenStreetMap extract. An import profile says which file and layer plays which part in the design, which columns carry what, and in which CRS a file is when the file does not say. The profile is saved with the project (import.yaml), so the same inputs always rebuild the same twin.

Formats and projections

Anything GDAL reads through pyogrio: GeoPackage, Shapefile, GeoJSON, KML, FlatGeobuf, GML, MapInfo, DXF, and CSV with x/y (or lon/lat, easting/northing) or a WKT column. Every layer is reprojected to WGS 84.

Roles

RoleGeometryEffect on the design
areapolygonthe design area; required
osm.osm / .pbfstreets and buildings, used where no other layer gives them
streetslinesthe street graph trenches follow
buildingspolygonsoutlines; homes are estimated from them when there is no address register
addressespointsthe address register: one home per address with its units; it wins over estimates from buildings
existing_ductslinescheap routing edges; ducts within 20 m of a street are linked to it
polespointsexisting poles kept as in-service elements
manholespointsexisting manholes, as above
no_dig_zonespolygonsno new trench inside; existing ducts through the zone stay usable

Each role's columns are proposed from common names in English, Dutch, French and German. Value maps (values) translate codes, for example a street class HW → primary.

In the app

  1. File → Import data…
  2. Add files, then check the role and columns of each layer.
  3. Give a CRS where the file has none.
  4. Check data shows the quality report.
  5. Create project opens the project. Existing ducts, poles and manholes appear on the map under the layer Existing network.

The crew can do the same: the Surveyor calls list_layers, propose_import, import_data and check_inputs. From the command line, openftth-engine inspect FILES... --json proposes a profile and openftth-engine profile-check PROFILE --json reads it and prints the quality report.

The quality report

check_inputs runs before anything is designed and reports, each with a count: homes far from any street, duplicate address locations, addresses without units, residential buildings without an address, and a street network in pieces. Every finding carries a fix, shown under it in the import wizard, and very large areas are flagged with advice to split them. An error blocks the design; warnings are for the engineer to read.

Streets are kept 200 m beyond the area, so homes on its edge reach the street they face. When the streets inside that margin fall apart into pieces (an area split by a motorway, a railway or water), the margin doubles, up to 1,600 m, until no more than 5% of the network is cut off, and the import records how far it went.

A profile file

yaml
format: openftth.import
version: 1
name: lambert
bindings:
  - {path: gebied.geojson, role: area}
  - path: adressen.csv
    role: addresses
    crs: EPSG:31370
    x: x
    y: y
    columns: {id: adres_id, units: wooneenheden, street: straatnaam, housenumber: huisnummer}
  - {path: wegen.shp, role: streets, columns: {id: osm_id, class: wegtype}}
  - {path: bestaand.gpkg, layer: kokers, role: existing_ducts, columns: {id: duct_id}}

Relative paths resolve against the profile file, so a profile and its data can be moved or shared together. Full reference: docs/IMPORT.md.