## 1. Creating the City Model from a GeoJSON File Start by using the `GeometryFactory` class to create a city model from a GeoJSON file. This class reads building geometries and attributes from the file and constructs a city model. ```python city = GeometryFactory( "geojson", input_file, height_field="height", year_of_construction_field="contr_year", function_field="function_c", adjacency_field="adjacency", function_to_hub=Dictionaries().montreal_function_to_hub_function ).city ``` - `"geojson"`: Specifies the format of the input file. - `input_file`: The path to your GeoJSON file. - `height_field="height"`: The attribute in the GeoJSON file that contains the building height. - `year_of_construction_field="contr_year"`: The attribute for the building's year of construction. - `function_field="function_c"`: The attribute for the building's function or usage. - `adjacency_field="adjacency"`: The attribute indicating whether the building is attached or detached. - `function_to_hub`: A dictionary that maps the building functions to standardized functions used by HUB. The `city` object now contains all the buildings from the GeoJSON file with their associated attributes. --- ## 2. Enriching the City with Construction Details Use the `ConstructionFactory` to enrich the city model with construction details and calculation of the thermal zones and total floor area. ```python ConstructionFactory('nrcan', city).enrich() ``` - `'nrcan'`: Specifies the source of construction data, in this case, NRCan. - `city`: The city model created in the previous step. --- ## 3. Assigning Energy Demands Using Archetypes Finally, we assign energy demands to each building using the `ResultFactory` class and an archetype-based demand model. This basically maps buildings to predefined archetypes and assigning corresponding energy demand profiles. ```python ResultFactory('archetypes', city, demand_file).enrich() ``` - `'archetypes'`: Specifies the handler we are using which in this case is archetype-based demand model. - `city`: The city. - `demand_file`: The path to the CSV file containing the archetype demand profiles. --- ## 4. Rules for Finding Archetypes and Assigning Demands This mapping is based on the following building attributes: - **Function** - **Height** - **Adjacency**: Whether the building is attached or is detached. - **Year of Construction** ### **Mapping Rules**: Based on the building's function, height, and adjacency: - **Residential Buildings** ('residential', 'multifamily house', 'single family house'): - **Single Family House**: - Height less than 6 meters. - Adjacency: 'detached'. - `usage = 'Single Family'`. - **Row House**: - Height less than 6 meters. - Adjacency: 'attached'. - `usage = 'Row house'`. - **Duplex/Triplex**: - Height between 6 and 10 meters. - Adjacency: 'detached'. - `usage = 'Duplex/triplex'`. - **Small MURBs** (Multi-Unit Residential Buildings): - Height between 6 and 10 meters. - Adjacency: 'attached'. - `usage = 'Small MURBs'`. - **Medium MURBs**: - Height between 10 and 15 meters. - `usage = 'Medium MURBs'`. - **Large MURBs**: - Height greater than 15 meters. - `usage = 'Large MURBs'`. - **Office Buildings** ('office', 'office and administration'): - `usage = 'Office'`. - **Commercial Buildings** ('commercial', 'retail shop without refrigerated food', 'retail shop with refrigerated food', 'stand alone retail', 'strip mall'): - If adjacency is 'attached': - `usage = 'Commercial attached'`. - Else: - `usage = 'Commercial detached'`. #### Determine Building Vintage (`vintage`): Based on the building's year of construction: - **Pre-1947**: - `year <= 1947`. - `vintage = 'Pre 1947'`. - **1947-1983**: - `1947 < year <= 1983`. - `vintage = '1947-1983'`. - **1984-2010**: - `1983 < year <= 2010`. - `vintage = '1984-2010'`. - **Post-2010**: - `year > 2010`. - `vintage = 'Post 2010'`. Combine usage and vintage to create the key: ```python archetype_key = f"{usage} {vintage}" ``` This key is used to look up the corresponding demand profiles in the archetype demand file. --- ### Assigning Demands: 1. **Lookup Demand Profiles**: Using the `archetype_key`, retrieve the hourly demand profiles from the `demand_file`. Each archetype has associated hourly demands for different energy uses. 2. **Scale Demands by Floor Area**: Multiply the demand values by the building's total floor area. 3. **Assign Demands to Building**: Set the building's demand attributes: ```python building.heating_demand = [value * area for value in demand['Heating']] building.cooling_demand = [value * area for value in demand['Cooling']] building.domestic_hot_water_heat_demand = [value * area for value in demand['DHW']] building.appliances_electrical_demand = [value * area for value in demand['Equipment']] building.lighting_electrical_demand = [value * area for value in demand['Lighting']] ``` --- ### Example: For a residential building with the following attributes: - **Function**: 'residential' - **Height**: 9 meters - **Adjacency**: 'attached' - **Year of Construction**: 1986 #### **Mapping Steps**: 1. **Usage**: - Height is between 6 and 10 meters. - Adjacency is 'attached'. - Therefore, `usage = 'Small MURBs'`. 2. **Vintage**: - Year is 1986, which falls in 1984-2010. - Therefore, `vintage = '1984-2010'`. 3. **Archetype Key**: - `archetype_key = 'Small MURBs 1984-2010'`.