Skip to content

Buildings

buildings

Classes

Buildings

Buildings(gdf: GeoDataFrame, overrides: Dict[str, str] | None = None)

Base class for building-related data with field mapping and data access.

Source code in packages/core/src/sphere/core/schemas/buildings.py
def __init__(self, gdf: gpd.GeoDataFrame, overrides: Dict[str, str] | None = None):
    self._gdf = gdf

    # Define building-specific aliases (all lowercase for case-insensitive matching)
    aliases = {
        "id": ["id", "building_id", "bldg_id", "fd_id"],
        "occupancy_type": ["occupancy_type", "occtype", "occupancy", "occ_type", "building_type"],
        "first_floor_height": ["first_floor_height", "found_ht", "first_floor_ht", "ffh", "floor_height"],
        "foundation_type": ["foundation_type", "fndtype", "found_type", "fnd_type"],
        "number_stories": ["number_stories", "num_story", "numstories", "stories", "num_floors", "floors"],
        "area": ["area", "sqft", "building_area", "floor_area"],
        "building_cost": ["buildingcostusd", "building_cost", "val_struct", "cost", "replacement_cost", "building_value"],
        "content_cost": ["contentcostusd", "content_cost", "val_cont", "contents_cost"],
        "inventory_cost": ["inventorycostusd", "inventory_cost", "val_inv", "inv_cost"],
        "general_building_type": ["general_building_type", "bldgtype", "generalbuildingtype"],
        "eq_building_type": ["eqbldgtypeid", "eq_building_type", "earthquake_building_type"],
        "eq_design_level": ["eqdesignlevelid", "eq_design_level", "design_level"], 
        #"flood_type": ["floodtype", "flood_type", "flooding_type"],
    }

    # Define output fields
    output_fields = {
        "flux": "flux",
        "flood_depth": "flood_depth",
        "depth_in_structure": "depth_in_structure",
        "bddf_id": "bddf_id",
        "flood_peril_type": "flood_peril_type",
        "building_damage_percent": "building_damage_percent",
        "building_loss": "building_loss",
        "cddf_id": "cddf_id",
        "content_damage_percent": "content_damage_percent",
        "content_loss": "content_loss",
        "iddf_id": "iddf_id",
        "inventory_damage_percent": "inventory_damage_percent",
        "inventory_loss": "inventory_loss",
        "relocation_loss": "relocation_loss",
        "income_loss": "income_loss",
        "rental_loss": "rental_loss",
        "wage_loss": "wage_loss",
        "debris_finish": "debris_finish",
        "debris_foundation": "debris_foundation",
        "debris_structure": "debris_structure",
        "debris_total": "debris_total",
        "restoration_minimum": "restoration_minimum",
        "restoration_maximum": "restoration_maximum",
        # Tsunami probability fields
        "probability_str_exceed_moderate": "probability_str_exceed_moderate",
        "probability_str_exceed_extensive": "probability_str_exceed_extensive", 
        "probability_str_complete": "probability_str_complete",
        "probability_str_none": "probability_str_none",
        "probability_str_moderate": "probability_str_moderate",
        "probability_str_extensive": "probability_str_extensive",
        "probability_nsd_exceed_moderate": "probability_nsd_exceed_moderate",
        "probability_nsd_exceed_extensive": "probability_nsd_exceed_extensive",
        "probability_nsd_complete": "probability_nsd_complete",
        "probability_nsd_none": "probability_nsd_none",
        "probability_nsd_moderate": "probability_nsd_moderate",
        "probability_nsd_extensive": "probability_nsd_extensive",
        "probability_content_exceed_moderate": "probability_content_exceed_moderate",
        "probability_content_exceed_extensive": "probability_content_exceed_extensive",
        "probability_content_complete": "probability_content_complete",
        "probability_content_none": "probability_content_none",
        "probability_content_moderate": "probability_content_moderate",
        "probability_content_extensive": "probability_content_extensive",
    }

    self.fields = FieldMapping(gdf, aliases, output_fields, overrides)


    # Ensure damage-function ID output columns exist on the GeoDataFrame
    for df_prop in ("flood_peril_type"):
        col_name = self.fields.get_field_name(df_prop)
        if col_name and col_name not in self._gdf.columns:
            self._gdf[col_name] = None
Attributes
gdf property
gdf: GeoDataFrame

Get the underlying GeoDataFrame.