BIM models
The BIM model layer places a building or asset model on the map, such as a whole building, a plant room or a lift, and binds its parts to the rows of a data source. Each row colors, fades or hides the parts it names. Pointing at a part shows its row, and clicking a part selects that row and cross-filters your charts, so a construction schedule, an asset register or a maintenance log and the model on the map work together.
The geometry always comes from the model file. Your rows carry the names of the parts and the values you want to show, not geometry.
How it works
- Upload the model to a Lakehouse: an IFC file (
.ifcor.ifczip) exported from your BIM tool, or a.glb.gzfile from the BIM to Icon Map Converter. - Import it. Add a BIM model layer and pick the file. An IFC file is baked once, in your browser, into a web-ready part tree: one part per element, kept inside the assemblies, storeys and building that contain it. The parts table is written beside it.
- Place it. A georeferenced IFC, or a model placed in the converter, is already in the right place. Otherwise type its location or drag it on the map.
- Bind your rows. Choose a data source and the columns that name the parts. Each row now colors its parts and everything inside them.
Import a model
- In the Layers tab, select Add a layer, then BIM model.
- Under Model, select Import model and choose the Lakehouse that holds the file. The picker lists the
.ifc,.ifczip,.glband.glb.gzfiles in the Lakehouse's Files. - Wait while the editor reads the file, builds the part tree and writes the parts table. When it is done, the Model section shows the number of parts, levels and triangles in the part tree.
The model is written to OneLake beside the source file, in a <name>.bim folder: the model (model.glb.gz), the parts table (parts.parquet and parts.csv) and the placement saved with it. Each new bake writes a new version. Re-import reads the source file again, for example after the model has been updated.
The import runs in your browser: the model is never sent to Tekantis. A model with more than a million triangles may be slow to draw, and the editor says so; leaving out IFC types you do not need makes it lighter.
Import options
Import options chooses how the part tree is made, as the BIM to Icon Map Converter does. Each change bakes the model again and saves a new version.
| Option | What it does |
|---|---|
| Tree from | IFC files only. Which IFC relationships make the tree: Assemblies within the spatial structure (the default), Assemblies only, Spatial structure only (site, building, storey) or Flat (no tree). |
| Match parts by | The value rows match a part by, compared trimmed and ignoring case. Family (Revit), else Name, the default for IFC, suits a Revit export. You can also choose Name, or an attribute such as GlobalId, else Name or ElementId, else Name. For a converter file, The file's own keys keeps the keys chosen in the converter. |
| Include by IFC type | Untick the types you do not need, with the number of elements and triangles of each. IfcSpace and IfcOpeningElement are left out of IFC files by default. |
| Add property values | Ticked property set values become part attributes and columns in the parts table. Filter narrows the list. |
| Build the tree from a table | If the model lost which part sits inside which, choose a table (CSV) with a Child column and a Parent column. Each part keyed by a child value moves under the part keyed by its parent. Keys that match no part are listed. Use the file's tree goes back. |
In Revit, a nested family is exported as its own part only when it is a shared nested family. Make the nested families you want to bind shared before you export, or rebuild the tree with Build the tree from a table.
Place the model
The Placement section sets where the model stands.
- A georeferenced IFC is placed from the file and shows "Georeferenced from the IFC file." A converter file placed in the converter shows "Placed at the location saved in the model file."
- Any other model is placed by hand: type its Longitude and Latitude, and its Heading in degrees clockwise from north.
- While the layer's settings are open, you can also drag the model on the map to move it, and drag its handle to turn it. Hold Shift to snap the turn to 15 degrees. Each move is saved when you let go, and the boxes show the new values.
- Moving a model makes it placed by hand. Use the location in the file puts it back.
| Setting | What it does | Default |
|---|---|---|
| Height | On the ground: the base of the model sits on the terrain at its location, raised by Lift above the ground (m). Above sea level: the base is at Base altitude above sea level (m), whatever the terrain. | On the ground |
| Hide what is below the ground | Foundations, piles and basements below the ground at the model's location are clipped, so they do not show through the map. Turn it off to see them. | On |
| Auto-zoom map to this model | Frames the map on the model when it loads. |
The parts table
The import writes the model's parts table: one row per part, with the same columns as the converter's parts table, among them Key, Level1 ... LevelN (the keys from the top of the tree down to the part), Path, Family, Type, IfcType, GlobalId and ElementId, plus any property values you added.
- As a file. The table is written as
parts.parquet(andparts.csv) beside the model. - As a Lakehouse table. Right after the import, Icon Map loads
parts.parquetinto a Lakehouse table in the same Lakehouse, named after the model, for examplesnowdon_parts, so you can join it in a semantic model or a Warehouse query. The Parts section says when it is ready: "The parts table is in the Lakehouse table snowdon_parts, ready to join in a semantic model." - As data for the map. Use the parts table as data, in Data binding, adds the parts table as a data source and, if the layer has no binding yet, binds it by its Level columns and colors the parts by IFC type. A model with no other data can be colored by IFC type, storey or family straight away.
Loading the table uses Fabric's Load Table API, which needs a permission Icon Map asks for only here: Lakehouse.ReadWrite.All. The first time, you may see a consent prompt. If it is refused, or your organization needs an administrator to approve it, the import still completes: the parts table stays a Parquet file, and the map works the same. Select Load into a Lakehouse table in the Parts section once it is approved, or open the Lakehouse and use Load to Tables on parts.parquet. Administrators can pre-approve the permission for everyone; see Grant admin consent.
Show and hide parts
The Parts section lists the tree. Untick a part to hide it with everything under it; parts that share a name are shown or hidden together.
Turn on Show the model's top-level parts on the map to give viewers an on-map control that shows and hides the model's top-level parts, for example its storeys.
Bind data to the parts
Open Data binding. A row finds its part by its path, outermost first, and colors that part and everything under it, unless a deeper row says otherwise.
- Choose the Data source: any data source on the map, such as a Lakehouse table, a Warehouse query or a semantic model. Or select Use the parts table as data.
- Under Part path columns, choose the columns that name the parts, outermost first. For data keyed like the parts table, select Use Level1 to LevelN. Add a level adds a column. One column is enough when every part has its own key, for example a GlobalId column with Match parts by set to GlobalId, else Name.
- Check the match report, for example "34 of 36 rows match a part. 120 of 1325 parts are colored.", and the paths that match no part.
- Choose a Part color rule, and how the parts with no row are drawn.
How rows find their parts
- Blank values are skipped, so a row can stop at any level. A row with only
Level1andLevel2binds to that whole branch. - A row binds to every part whose key is its last value and that sits inside the parts named by its earlier values. Other parts may sit in between.
- Cascade. A row's color applies to its parts and to every part below them, unless a lower part has a row of its own. A row for a lift car colors the whole car while a row for the car door colors just the door.
- Keys are compared trimmed and ignoring case. Several parts can share a key, for example two guide rails: a row then binds to all of them.
Settings
| Setting | What it does | Default |
|---|---|---|
| Combine rows with the same path | Rows that reach the same part are combined into one: choose an Aggregate (Sum, Average, Minimum, Maximum or Count of rows) and a Value column. A count of the rows is kept too, and you can color by either. Other columns show the first row's value. | Off |
| Parts with no row | Show as modeled, Ghost (faint) or Hide. | Ghost (faint) |
| Part color | The color rule over the bound rows: a category, a gradient, class breaks or rules on any column, as in Style by data. | |
| Color mode | Replace the model's colors, or Tint the model's own colors to keep its materials visible under the color. | Replace |
| Opacity of bound parts | A slider for every bound part, or an Opacity column (0 to 1) per row. | |
| Tooltip fields | Row columns shown on hover, before the part's own attributes. | None |
Remove the binding takes the data off the model; its own colors come back.
Hover, select and cross-filter
- Hover. Pointing at a part shows its row's Tooltip fields, then the part's own attributes, such as its key, family, type, IFC type and storey.
- Select. Turn on Allow selecting items on the map in Interactivity. Clicking a part selects the row bound to it, or to the nearest part above it, so clicking a door handle selects the door. The selection cross-filters your charts and other layers by the Cross-filter fields; leave them empty to use the path columns.
- Lasso. The selection tools select the rows whose parts have their center inside the area you draw.
Lighting and shadows
A BIM model is lit like the rest of the 3D scene, by the sun and lighting set in Environment effects, so it matches the 3D models and buildings around it, with the sky reflected in glass and metal. A soft shadow of its footprint falls on the ground under it.
Older BIM layers: Convert to part tree
BIM layers made before the part tree split the model into groups, by storey or by IFC type, with a color per group, a group binding and a group selector on the map. They keep working as they are.
To color each part rather than each group, open the layer and select Convert to part tree. It bakes the layer's IFC again as a part tree. Group colors and the group binding are removed: bind data to the parts afterwards.
Example: construction status
A contractor tracks a building's progress in a Lakehouse table, one row per element, with the element's GlobalId, the Task, its Status (Not started, In progress, Complete, Delayed) and its Planned finish.
- Upload the IFC model to the Lakehouse and import it into a BIM model layer. In Import options, set Match parts by to GlobalId, else Name.
- In Data binding, choose the status table and set Part path columns to its GlobalId column.
- Set Part color to a category rule on Status: gray for Not started, amber for In progress, green for Complete, red for Delayed.
- Set Parts with no row to Ghost (faint), so the elements not in the schedule stay visible as context.
- Add Task, Status and Planned finish to Tooltip fields.
- In Interactivity, turn on Allow selecting items on the map and set Cross-filter fields to Status.
The model now shows progress at a glance. Clicking a red part filters a chart of tasks by status to the delayed work, and pointing at any part shows its task and planned finish.
Tips and limits
- Cannot see the model? Check Placement, and turn on Auto-zoom map to this model. A part below the ground is hidden while Hide what is below the ground is on.
- Rows match nothing. Check the match report. The usual reasons: Match parts by reads a different value from the one in your data, or the path columns are in the wrong order.
- Native Revit files (
.rvt,.rfa) are not read: export IFC from Revit first. - The same
.glb.gzfile works in the BIM Models layer of Icon Map Pro and Icon Map Slicer in Power BI.
Related
- BIM to Icon Map Converter
- 3D scenes - 3D Tiles and Gaussian splats
- 3D models
- Lakehouse tables and files
- Grant admin consent