Skip to content

Chapter 6: Building Part#

Welcome back! We've been building up our understanding of how spatial data helps us understand the world around our BIM projects. We've learned about unique IDs for locations (UPRNs) and geographic features (TOIDs), how to link them (Linked Identifiers Dataset), how to get the basic outline and details of a whole building (Building Feature), and how to understand the larger area it sits within (Site Feature).

But what happens when a single Building Feature polygon isn't enough? Many buildings are complex. They might have multiple wings, towers, different roof heights, or attached structures like garages that are distinct parts of the whole. For detailed modelling, analysis, or planning, you often need to represent and understand these individual components.

This is where the concept of a Building Part comes in.

What is a Building Part?#

Think of a Building Part as a polygon shape that represents a specific, identifiable division or section of a building, or sometimes a smaller, standalone structure that's considered a component of a larger property.

It's a way to break down a complex building into its constituent external pieces. Examples could include:

  • A distinct wing of a hospital building.
  • A specific tower on a university campus.
  • An attached garage on a residential property.
  • Even a small, separate shed in a garden treated as a 'part' of the main property.

These parts have their own geometry (their polygon footprint) and attributes, just like a main Building Feature, but they offer more granular detail. They often link back to a main Building Feature or Site Feature to show what they belong to.

The data for Building Parts comes from detailed mapping sources like Ordnance Survey's (OS) National Geographic Database (NGD). As the OS NGD – Building Part Summary shows, this feature allows for a more detailed representation than just the overall building outline.

Why is the Building Part Important for BIM?#

Building BIM models are incredibly detailed. To connect these models accurately to real-world data for analysis and planning, having information about parts of buildings is extremely valuable:

  1. Granular Detail: Your BIM model likely has different sections based on structure, function, or design. Building Parts provide real-world polygons that align with these divisions, allowing you to map your BIM components to actual external building sections on the ground.
  2. Vertical Zoning & Analysis: Building Parts often have specific height attributes (height_absolutemax_m, height_absolutemin_m). This is crucial for:
    • Understanding step changes in building heights across a complex structure.
    • Analysing vertical clearances (e.g., for utility lines).
    • Planning rooftop access or installations.
  3. Understanding Attached Structures: Easily identify and get details for attached garages, porches, or outbuildings that might be separate Building Parts but linked to the main structure.
  4. Retrofit & Planning: When planning renovations or extensions, analysing specific parts of a building with their own attributes (like potentially different construction materials or ages, if available at this level of detail) can be very helpful.

Building Parts allow you to move beyond just the overall building footprint and work with the detailed external form of a structure, which is often a closer match to how you might organise sections within a complex BIM model.

Key Information in a Building Part#

Similar to a Building Feature, a Building Part includes its shape and attributes. Based on the OS NGD BuildingPart bSDD Data Dictionary and OS NGD – Building Part Summary, key information includes:

  1. Geometry: A polygon representing the footprint of the specific part on the ground.
  2. Attributes:
    • TOID (toid): The unique identifier for this specific building part feature.
    • OSID (osid): Another unique identifier (GUID) within the OS NGD system for this feature.
    • Description (description): What kind of part is it? (e.g., 'part of building', 'attached garage').
    • Physical Level (physicallevel): Is this part above or below ground? (e.g., 'surface', 'underground').
    • Height (height_absolutemin_m, height_absolutemax_m): The minimum and maximum heights of this specific part.
    • Status (status): Structural condition (e.g., 'In Use', 'Under Construction').
    • Associated Structure (associatedstructure): An optional link (OSID) to the larger Building Feature or structure this part belongs to.
    • Site ID (siteid): A link to the Site Feature that contains this building part.

These attributes let you describe and query based on the characteristics of individual sections of a building.

How Do You "Use" a Building Part?#

Working with Building Parts is similar to working with Building Features, but with the added dimension of needing to understand their relationship to other parts or the whole building.

  1. Find the Building Part(s): You can find Building Parts in several ways:
    • By Location: Find all Building Parts whose polygon geometry is at a specific location or within a certain area you're interested in.
    • By Associated Structure: If you know the OSID or TOID of the main Building Feature, you can search for Building Parts whose associatedstructure attribute matches that ID.
    • By Site: If you know the siteid of the Site Feature, you can find all Building Parts within that site.
    • By Attributes: Search for parts based on their attributes, like finding all 'attached garages' or parts with a specific height range.
  2. Access Geometry and Attributes: Once you've found the Building Part(s), you retrieve their polygon shape and read their attributes (description, height, physical level, etc.).
  • Example Input: The OSID def456-ghi789-jkl012... of a main hospital building (Building Feature).
  • Process: Load the Building Part data. Filter the data to find all features where the associatedstructure attribute is def456-ghi789-jkl012....
  • Example Output: A collection of polygons representing the different wings, towers, and attached structures of the hospital, each with its own TOID, height, physical level, etc.

The Data Structure#

Building Part data is spatial data, just like Building Features and Site Features. It's a collection of polygons, each representing a part and having descriptive attributes linked to it.

Conceptually, the structure looks like this:

Property Name Description Data Type Example Value
toid Topographic Identifier (ID for this part) String osgb1000002468013579
osid Unique feature identifier UUID mno987-pqr654-stu321
geometry The polygon shape of the building part Geometry POLYGON ((...))
description Type of part (e.g., 'part of building', 'attached garage') String part of building
physicallevel Level relative to ground ('surface', 'below') String surface
height_absolutemin_m Minimum height Float 0.0
height_absolutemax_m Maximum height Float 15.2
associatedstructure Link to main building (OSID) UUID def456-ghi789-jkl012
siteid Link to containing site (OSID) UUID abc123-def456-ghi789
... (other attributes) ... ... ...

Each row represents one Building Part polygon, detailing its unique ID, shape, and characteristics, including how it relates to a larger structure or site.

Behind the Scenes: Finding Building Parts for a Structure#

Here's a simplified workflow showing how you might find all Building Parts associated with a known main Building Feature OSID:

sequenceDiagram
    participant YourSystem as Your BIM/GIS System
    participant BuildingPartData as OS Building Part Data (e.g., GeoPackage)

    YourSystem->>YourSystem: I know the OSID of the main building I want (e.g., def456-ghi789-jkl012).
    YourSystem->>BuildingPartData: Query/Select features where `associatedstructure` = def456-ghi789-jkl012.
    BuildingPartData-->>YourSystem: Find matching Building Part records.
    BuildingPartData->>YourSystem: Return the Geometry (polygons) and Attributes for these parts.
    YourSystem->>YourSystem: I now have the shapes and details of the parts making up that building.

This diagram illustrates using an attribute (associatedstructure) to link a known building ID to its constituent parts in the Building Part dataset.

Now, let's look at a conceptual Python example using geopandas to load the data and filter for parts associated with a specific structure. Assume you have a GeoPackage file named building_parts.gpkg.

First, loading the data:

# This is example conceptual Python code
import geopandas as gpd

# Load the building part data from a GeoPackage file
print("Loading building part data...")
parts_gdf = gpd.read_file('building_parts.gpkg')
print("Data loaded.")

# Display the first few rows to see columns like 'toid', 'geometry', 'description', 'associatedstructure'
print("\nFirst 5 rows of the data (showing key columns):")
print(parts_gdf[['toid', 'description', 'height_absolutemax_m', 'associatedstructure', 'geometry']].head())

This code loads the data and shows the structure, including the essential toid and geometry, plus some key attributes for parts and the link back to the associated structure.

Now, let's say you have the OSID of a main building feature and want to get all its parts:

# Suppose you have the OSID of a main building (replace with a real ID from your data)
main_building_osid = 'def456-ghi789-jkl012'

# Filter the GeoDataFrame to find parts linked to this OSID
# .astype() can help if data types are inconsistent
related_parts = parts_gdf[parts_gdf['associatedstructure'] == main_building_osid]

# Print the resulting GeoDataFrame (each row is one part)
print(f"\nBuilding parts associated with structure OSID {main_building_osid}:")
print(related_parts[['toid', 'description', 'height_absolutemax_m', 'physicallevel']])

This code snippet demonstrates filtering the parts_gdf GeoDataFrame based on the associatedstructure attribute. The output would show the rows for all Building Parts explicitly linked to that main_building_osid, providing their individual details. You could then use their geometries to visualise or analyse these specific sections of the building.

Building Part vs. Building Feature (Again)#

It's worth reinforcing the difference:

  • Building Feature: Represents the entire building footprint as a single polygon, providing overall summary attributes.
  • Building Part: Represents sections or components of a building (or small structures treated as components), offering more detailed geometry and specific attributes for each part.

A complex building might have one Building Feature polygon encompassing its overall footprint, but multiple Building Part polygons nested within or adjacent to that outline, providing detail on its different sections.

Conclusion#

The Building Part dataset provides a crucial layer of detail by representing distinct sections or components of buildings as individual geometric features with their own attributes. This granularity is essential for aligning real-world spatial data with the detailed components often modelled within a BIM environment. By understanding Building Parts and how they link back to larger structures or sites, you can perform more detailed spatial analysis, validate specific design elements against real-world dimensions, and enrich your models with fine-grained contextual information.

Now that we've explored different ways to define locations and physical structures using points, polygons, and hierarchical relationships (parts, buildings, sites), we'll move on to a familiar concept but with a specific geographic definition: the Postcode.

In the next chapter, we will look at Chapter 7: Postcode (Code-Point) and how it provides a simple way to reference locations.


Next Chapter: Postcode (Code-Point)


Generated by AI Codebase Knowledge Builder