How to Fix IFC Coordinate Systems and Georeferencing Issues
Models exported from BIM authoring or civil design tools often sit thousands of metres from the origin. Here is how to centre them and fix georeferencing for coordination and export.
Open an IFC file in a viewer and find that the building is nowhere to be seen? Export to glTF and the mesh lands on the moon? You are almost certainly dealing with a coordinate system problem.
Why IFC coordinate issues happen
Every BIM authoring tool has its own idea of where "the origin" is. Some use a project base point and a survey point. Civil design tools use real-world northings and eastings, often at state-plane coordinates that can be in the millions of metres. Others have a project origin and a survey point. When these tools export to IFC, they write the geometry using those internal coordinates.
The result: a building that was modelled correctly in its authoring tool ends up with its geometry sitting 500,000 metres east of the IFC origin. Viewers render the scene, cameras look at the origin by default, and nothing is visible. Game engines can fail outright because single-precision floating point cannot handle numbers that large.
The three coordinates in an IFC file
- Local geometry coordinates. The numbers stored on each element's shape.
- Placement transform. The position/rotation applied to every element (IfcLocalPlacement).
- Site placement / georeferencing. The site's position in the real world (IfcSite placement, plus the optional IfcProjectedCRS and IfcMapConversion entries in IFC4).
A file can place geometry far from the origin using any of those three. "Fixing coordinates" means computing the actual bounding box of the geometry, and rebalancing the placements so the model sits near (0, 0, 0) without changing how it looks.
Step-by-step: fix coordinates
- Upload the IFC file.
- Run IFC Viewer first. The report shows the model's bounding box. If the minimum corner is anything like (500000, 4500000, 0), you have a coordinate problem.
- Open the Fix IFC Coordinates tool.
- Choose a strategy:
- Centre on bounding box — shifts the model so its centroid sits at the origin. Best for game-engine and glTF export.
- Centre on lowest corner — shifts the minimum corner of the bounding box to the origin. Best for keeping Z=0 at ground level.
- Preserve georeferencing — writes the original offset into IfcSite placement / IfcMapConversion so surveyors can recover the real-world position later.
- Click Run. BIMCamel rewrites the placements without touching the geometry, and produces a new IFC file.
- Verify with IFC Viewer on the output — the bounding box should now straddle the origin.
When you need "Preserve georeferencing"
On infrastructure projects (roads, rail, site work) the real-world coordinates are the data. Stripping them would break the model. The preserve option keeps the original transform in the site placement so any tool that reads IFC4 georeferencing can recover the exact world position, while still letting everyday viewers see the geometry normally.
Coordinate mismatch when merging models
A common coordination headache: the architect exports with "Project North" and the engineer exports with "True North", or one model uses shared coordinates and another uses internal. When you try to merge, the buildings land hundreds of metres apart.
Fix this before running Merge Files:
- Run Fix IFC Coordinates on each input file with the same strategy (usually "Preserve georeferencing").
- Run Merge Files on the fixed outputs.
- Use IFC Viewer on the merged result to confirm all elements share the same coordinate frame.
Units vs coordinates
A separate but related issue: one file in millimetres, another in metres. The geometry looks tiny or huge. BIMCamel converts units automatically during Merge Files, but if you are working with a single file whose units were set incorrectly by the authoring tool, fixing that requires re-export rather than a coordinate tweak.
If your building is invisible, the origin is almost always the cause. Ninety seconds in Fix IFC Coordinates and the problem is gone.