From 0e3db345befa2178635108b2c72ac27d37a4397e Mon Sep 17 00:00:00 2001 From: s_ranjbar Date: Mon, 24 Jun 2024 21:35:04 -0400 Subject: [PATCH] feat: tests conducted on Lachine --- central.py | 52 +- hub/city_model_structure/building.py | 2 +- .../processed_output -single_building.geojson | 50 + input_files/processed_output.geojson | 2848 +++++++++++++++++ main.py | 54 +- scripts/costs/capital_costs.py | 11 +- .../system_simulation_models/archetype13.py | 2 + 7 files changed, 2939 insertions(+), 80 deletions(-) create mode 100644 input_files/processed_output -single_building.geojson create mode 100644 input_files/processed_output.geojson diff --git a/central.py b/central.py index 8b584208..f8d0c81f 100644 --- a/central.py +++ b/central.py @@ -1,8 +1,6 @@ import pandas as pd from scripts.geojson_creator import process_geojson from pathlib import Path -import subprocess -from scripts.ep_run_enrich import energy_plus_workflow from hub.imports.geometry_factory import GeometryFactory from hub.helpers.dictionaries import Dictionaries from hub.imports.construction_factory import ConstructionFactory @@ -13,16 +11,13 @@ from scripts import random_assignation from hub.imports.energy_systems_factory import EnergySystemsFactory from scripts.energy_system_sizing_and_simulation_factory import EnergySystemsSimulationFactory from scripts.costs.cost import Cost -from scripts.costs.constants import SKIN_RETROFIT_AND_SYSTEM_RETROFIT_AND_PV, SYSTEM_RETROFIT_AND_PV -import hub.helpers.constants as cte +from scripts.costs.constants import SYSTEM_RETROFIT_AND_PV from hub.exports.exports_factory import ExportsFactory -from scripts.solar_angles import CitySolarAngles -from scripts.pv_sizing_and_simulation import PVSizingSimulation -# Specify the GeoJSON file path +# Specify the GeoJSON file path location = [45.49034212153445, -73.61435648647083] geojson_file = process_geojson(x=location[1], y=location[0], diff=0.0001) -file_path = (Path(__file__).parent / 'input_files' / 'output_buildings.geojson') +file_path = (Path(__file__).parent / 'input_files' / 'processed_output -single_building.geojson') # Specify the output path for the PDF file output_path = (Path(__file__).parent / 'out_files').resolve() # Create city object from GeoJSON file @@ -39,37 +34,28 @@ UsageFactory('nrcan', city).enrich() WeatherFactory('epw', city).enrich() ResultFactory('energy_plus_multiple_buildings', city, output_path).enrich() ExportsFactory('sra', city, output_path).export() -sra_path = (output_path / f'{city.name}_sra.xml').resolve() -subprocess.run(['sra', str(sra_path)]) -ResultFactory('sra', city, output_path).enrich() -solar_angles = CitySolarAngles(city.name, - city.latitude, - city.longitude, - tilt_angle=45, - surface_azimuth_angle=180).calculate random_assignation.call_random(city.buildings, random_assignation.residential_new_systems_percentage) EnergySystemsFactory('montreal_future', city).enrich() for building in city.buildings: EnergySystemsSimulationFactory('archetype13', building=building, output_path=output_path).enrich() - ghi = [x / cte.WATTS_HOUR_TO_JULES for x in building.roofs[0].global_irradiance[cte.HOUR]] - pv_sizing_simulation = PVSizingSimulation(building, - solar_angles, - tilt_angle=45, - module_height=1, - module_width=2, - ghi=ghi) - +sum_floor_area = 0 +buildings_list = [] for building in city.buildings: + buildings_list.append(building.name) +df = pd.DataFrame(columns=['building_name', 'total_floor_area', 'investment_cost', 'lc CAPEX']) +df['building_name'] = buildings_list +for building in city.buildings: + for thermal_zone in building.thermal_zones_from_internal_zones: + sum_floor_area += thermal_zone.total_floor_area costs = Cost(building=building, retrofit_scenario=SYSTEM_RETROFIT_AND_PV).life_cycle - costs.to_csv(output_path / f'{building.name}_lcc.csv') costs.loc['global_capital_costs', f'Scenario {SYSTEM_RETROFIT_AND_PV}'].to_csv( output_path / f'{building.name}_cc.csv') - # (costs.loc['global_operational_costs', f'Scenario {SYSTEM_RETROFIT_AND_PV}']. - # to_csv(output_path / f'{building.name}_op.csv')) - # costs.loc['global_maintenance_costs', f'Scenario {SYSTEM_RETROFIT_AND_PV}'].to_csv( - # output_path / f'{building.name}_m.csv') - print(building.name) - investment_cost = costs.loc['global_capital_costs', f'Scenario {SYSTEM_RETROFIT_AND_PV}'].loc[0, 'D3020_heat_and_cooling_generating_systems'] + investment_cost = costs.loc['global_capital_costs', + f'Scenario {SYSTEM_RETROFIT_AND_PV}'].loc[0, 'D3020_heat_and_cooling_generating_systems'] lcc_capex = costs.loc['total_capital_costs_systems', f'Scenario {SYSTEM_RETROFIT_AND_PV}'] - print(investment_cost) - print(lcc_capex) + df.loc[df['building_name'] == building.name, 'total_floor_area'] = ( + building.thermal_zones_from_internal_zones[0].total_floor_area) + df.loc[df['building_name'] == building.name, 'investment_cost'] = investment_cost + df.loc[df['building_name'] == building.name, 'lc CAPEX'] = lcc_capex + +df.to_csv(output_path / 'economic analysis.csv') diff --git a/hub/city_model_structure/building.py b/hub/city_model_structure/building.py index ac284d29..442f939e 100644 --- a/hub/city_model_structure/building.py +++ b/hub/city_model_structure/building.py @@ -484,7 +484,7 @@ class Building(CityObject): monthly_values = PeakLoads().peak_loads_from_hourly(self.domestic_hot_water_heat_demand[cte.HOUR]) if monthly_values is None: return None - results[cte.MONTH] = [x for x in monthly_values] + results[cte.MONTH] = [x / cte.WATTS_HOUR_TO_JULES for x in monthly_values] results[cte.YEAR] = [max(monthly_values) / cte.WATTS_HOUR_TO_JULES] return results diff --git a/input_files/processed_output -single_building.geojson b/input_files/processed_output -single_building.geojson new file mode 100644 index 00000000..c8e09aa0 --- /dev/null +++ b/input_files/processed_output -single_building.geojson @@ -0,0 +1,50 @@ +{ + "type": "FeatureCollection", + "name": "lachine_group_mach_buildings", + "crs": { + "type": "name", + "properties": { + "name": "urn:ogc:def:crs:OGC:1.3:CRS84" + } + }, + "features": [ + { + "type": "Feature", + "properties": { + "name": "1", + "address": "", + "function": 1000, + "height": 23.29, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66557613653009, + 45.43551716511939 + ], + [ + -73.66530891881455, + 45.43551716511939 + ], + [ + -73.66530891881455, + 45.43590129058549 + ], + [ + -73.66557613653009, + 45.43590129058549 + ], + [ + -73.66557613653009, + 45.43551716511939 + ] + ] + ] + }, + "id": 1 + } + ] +} \ No newline at end of file diff --git a/input_files/processed_output.geojson b/input_files/processed_output.geojson new file mode 100644 index 00000000..591db517 --- /dev/null +++ b/input_files/processed_output.geojson @@ -0,0 +1,2848 @@ +{ + "type": "FeatureCollection", + "name": "lachine_group_mach_buildings", + "crs": { + "type": "name", + "properties": { + "name": "urn:ogc:def:crs:OGC:1.3:CRS84" + } + }, + "features": [ + { + "type": "Feature", + "properties": { + "name": "1", + "address": "", + "function": 1000, + "height": 23.29, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66557613653009, + 45.43551716511939 + ], + [ + -73.66530891881455, + 45.43551716511939 + ], + [ + -73.66530891881455, + 45.43590129058549 + ], + [ + -73.66557613653009, + 45.43590129058549 + ], + [ + -73.66557613653009, + 45.43551716511939 + ] + ] + ] + }, + "id": 1 + }, + { + "type": "Feature", + "properties": { + "name": "2", + "address": "", + "function": 1000, + "height": 28.69, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66557613653009, + 45.43643906623803 + ], + [ + -73.66530223837167, + 45.43643906623803 + ], + [ + -73.66530223837167, + 45.436936759233234 + ], + [ + -73.66557613653009, + 45.436936759233234 + ], + [ + -73.66557613653009, + 45.43643906623803 + ] + ] + ] + }, + "id": 2 + }, + { + "type": "Feature", + "properties": { + "name": "3", + "address": "", + "function": 1000, + "height": 26.83, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66515860884955, + 45.43667288173913 + ], + [ + -73.66457407009679, + 45.43667288173913 + ], + [ + -73.66457407009679, + 45.43683989281135 + ], + [ + -73.66515860884955, + 45.43683989281135 + ], + [ + -73.66515860884955, + 45.43667288173913 + ] + ] + ] + }, + "id": 3 + }, + { + "type": "Feature", + "properties": { + "name": "4", + "address": "", + "function": 1000, + "height": 13.83, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66482124648368, + 45.436512551109814 + ], + [ + -73.66459077120402, + 45.436512551109814 + ], + [ + -73.66459077120402, + 45.43657434520653 + ], + [ + -73.66482124648368, + 45.43657434520653 + ], + [ + -73.66482124648368, + 45.436512551109814 + ] + ] + ] + }, + "id": 4 + }, + { + "type": "Feature", + "properties": { + "name": "5", + "address": "", + "function": 1000, + "height": 20.11, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66481623615151, + 45.436448251847004 + ], + [ + -73.66459244131474, + 45.436448251847004 + ], + [ + -73.66459244131474, + 45.43650253044548 + ], + [ + -73.66481623615151, + 45.43650253044548 + ], + [ + -73.66481623615151, + 45.436448251847004 + ] + ] + ] + }, + "id": 5 + }, + { + "type": "Feature", + "properties": { + "name": "6", + "address": "", + "function": 6199, + "height": 23.66, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66481540109615, + 45.436378107196674 + ], + [ + -73.66459411142546, + 45.436378107196674 + ], + [ + -73.66459411142546, + 45.43643489096123 + ], + [ + -73.66481540109615, + 45.43643489096123 + ], + [ + -73.66481540109615, + 45.436378107196674 + ] + ] + ] + }, + "id": 6 + }, + { + "type": "Feature", + "properties": { + "name": "7", + "address": "", + "function": 1000, + "height": 15.49, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66481456604079, + 45.43631297287851 + ], + [ + -73.66459411142546, + 45.43631297287851 + ], + [ + -73.66459411142546, + 45.43637059169843 + ], + [ + -73.66481456604079, + 45.43637059169843 + ], + [ + -73.66481456604079, + 45.43631297287851 + ] + ] + ] + }, + "id": 7 + }, + { + "type": "Feature", + "properties": { + "name": "8", + "address": "", + "function": 1000, + "height": 14.02, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66481623615151, + 45.43624867361571 + ], + [ + -73.66459244131474, + 45.43624867361571 + ], + [ + -73.66459244131474, + 45.43629961199274 + ], + [ + -73.66481623615151, + 45.43629961199274 + ], + [ + -73.66481623615151, + 45.43624867361571 + ] + ] + ] + }, + "id": 8 + }, + { + "type": "Feature", + "properties": { + "name": "9", + "address": "", + "function": 1000, + "height": 17.75, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66481540109615, + 45.43617769391002 + ], + [ + -73.66459244131474, + 45.43617769391002 + ], + [ + -73.66459244131474, + 45.43623531272993 + ], + [ + -73.66481540109615, + 45.43623531272993 + ], + [ + -73.66481540109615, + 45.43617769391002 + ] + ] + ] + }, + "id": 9 + }, + { + "type": "Feature", + "properties": { + "name": "10", + "address": "", + "function": 1000, + "height": 23.88, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66481373098543, + 45.43610921937041 + ], + [ + -73.6645932763701, + 45.43610921937041 + ], + [ + -73.6645932763701, + 45.436169343356404 + ], + [ + -73.66481373098543, + 45.436169343356404 + ], + [ + -73.66481373098543, + 45.43610921937041 + ] + ] + ] + }, + "id": 10 + }, + { + "type": "Feature", + "properties": { + "name": "11", + "address": "", + "function": 6199, + "height": 24.11, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66558448708373, + 45.436100868816794 + ], + [ + -73.66491310257342, + 45.436100868816794 + ], + [ + -73.66491310257342, + 45.43628124077479 + ], + [ + -73.66558448708373, + 45.43628124077479 + ], + [ + -73.66558448708373, + 45.436100868816794 + ] + ] + ] + }, + "id": 11 + }, + { + "type": "Feature", + "properties": { + "name": "12", + "address": "", + "function": 6199, + "height": 13.77, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66557947675156, + 45.43537604076338 + ], + [ + -73.665582816973, + 45.434661233374285 + ], + [ + -73.66529388781807, + 45.43484160533228 + ], + [ + -73.66529722803952, + 45.43537270054193 + ], + [ + -73.66557947675156, + 45.43537604076338 + ] + ] + ] + }, + "id": 12 + }, + { + "type": "Feature", + "properties": { + "name": "13", + "address": "", + "function": 1000, + "height": 28.22, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66516695940318, + 45.43575348578659 + ], + [ + -73.66453064721803, + 45.43575348578659 + ], + [ + -73.66453064721803, + 45.43591715663736 + ], + [ + -73.66516695940318, + 45.43591715663736 + ], + [ + -73.66516695940318, + 45.43575348578659 + ] + ] + ] + }, + "id": 13 + }, + { + "type": "Feature", + "properties": { + "name": "14", + "address": "", + "function": 6199, + "height": 22.95, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66485798891958, + 45.43559315515726 + ], + [ + -73.66485798891958, + 45.43515725625877 + ], + [ + -73.66458910109331, + 45.43532426733099 + ], + [ + -73.66458743098259, + 45.43559148504654 + ], + [ + -73.66485798891958, + 45.43559315515726 + ] + ] + ] + }, + "id": 14 + }, + { + "type": "Feature", + "properties": { + "name": "15", + "address": "", + "function": 1000, + "height": 26.97, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66540996051329, + 45.43448587174846 + ], + [ + -73.66478867932464, + 45.43400487986047 + ], + [ + -73.66461164758809, + 45.434125127832466 + ], + [ + -73.66522791844457, + 45.434611130052616 + ], + [ + -73.66540996051329, + 45.43448587174846 + ] + ] + ] + }, + "id": 15 + }, + { + "type": "Feature", + "properties": { + "name": "16", + "address": "", + "function": 1000, + "height": 19.78, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66512270146907, + 45.43466791381717 + ], + [ + -73.66495402028613, + 45.43453764518084 + ], + [ + -73.6645598741557, + 45.43479651234278 + ], + [ + -73.66473022544936, + 45.43492845108983 + ], + [ + -73.66512270146907, + 45.43466791381717 + ] + ] + ] + }, + "id": 16 + }, + { + "type": "Feature", + "properties": { + "name": "17", + "address": "", + "function": 1000, + "height": 14.19, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66474943172267, + 45.43425873669024 + ], + [ + -73.66461164758809, + 45.43413598355216 + ], + [ + -73.6645531937128, + 45.434181911597015 + ], + [ + -73.66469264795812, + 45.434303829679735 + ], + [ + -73.66474943172267, + 45.43425873669024 + ] + ] + ] + }, + "id": 17 + }, + { + "type": "Feature", + "properties": { + "name": "18", + "address": "", + "function": 6199, + "height": 21.7, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66467928707233, + 45.43430549979046 + ], + [ + -73.66454317304847, + 45.43418942709527 + ], + [ + -73.66448638928392, + 45.434232014918685 + ], + [ + -73.6646199981417, + 45.43435226289068 + ], + [ + -73.66467928707233, + 45.43430549979046 + ] + ] + ] + }, + "id": 18 + }, + { + "type": "Feature", + "properties": { + "name": "19", + "address": "", + "function": 6199, + "height": 25.94, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66460663725591, + 45.434355603112124 + ], + [ + -73.66446467784453, + 45.434234520084765 + ], + [ + -73.6644095641907, + 45.43427877801891 + ], + [ + -73.66454734832529, + 45.4343990259909 + ], + [ + -73.66460663725591, + 45.434355603112124 + ] + ] + ] + }, + "id": 19 + }, + { + "type": "Feature", + "properties": { + "name": "20", + "address": "", + "function": 6199, + "height": 19.14, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66453315238415, + 45.434401531156986 + ], + [ + -73.66439620330493, + 45.43427961307427 + ], + [ + -73.66433440920821, + 45.43432470606376 + ], + [ + -73.66447803873031, + 45.434439943703595 + ], + [ + -73.66453315238415, + 45.434401531156986 + ] + ] + ] + }, + "id": 20 + }, + { + "type": "Feature", + "properties": { + "name": "21", + "address": "", + "function": 1000, + "height": 24.93, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66446467784453, + 45.434442448869675 + ], + [ + -73.66432355348852, + 45.43432554111912 + ], + [ + -73.66426509961323, + 45.43436729388718 + ], + [ + -73.66440538891389, + 45.43448670680382 + ], + [ + -73.66446467784453, + 45.434442448869675 + ] + ] + ] + }, + "id": 21 + }, + { + "type": "Feature", + "properties": { + "name": "22", + "address": "", + "function": 1000, + "height": 21.94, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66438952286204, + 45.43449004702526 + ], + [ + -73.66424839850602, + 45.434373139274705 + ], + [ + -73.66418743946465, + 45.4344140569874 + ], + [ + -73.66433691437429, + 45.43453179979331 + ], + [ + -73.66438952286204, + 45.43449004702526 + ] + ] + ] + }, + "id": 22 + }, + { + "type": "Feature", + "properties": { + "name": "23", + "address": "", + "function": 1000, + "height": 13.15, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66431687304562, + 45.43453263484867 + ], + [ + -73.66417908891104, + 45.43442157248565 + ], + [ + -73.66412147009113, + 45.43446416030906 + ], + [ + -73.66426426455787, + 45.434576057727455 + ], + [ + -73.66431687304562, + 45.43453263484867 + ] + ] + ] + }, + "id": 23 + }, + { + "type": "Feature", + "properties": { + "name": "24", + "address": "", + "function": 6199, + "height": 25.25, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66452563688591, + 45.4350770909441 + ], + [ + -73.66438534758525, + 45.434956842972106 + ], + [ + -73.66352357045261, + 45.43552802083909 + ], + [ + -73.66365717931039, + 45.435634907925305 + ], + [ + -73.66452563688591, + 45.4350770909441 + ] + ] + ] + }, + "id": 24 + }, + { + "type": "Feature", + "properties": { + "name": "25", + "address": "", + "function": 6199, + "height": 28.42, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66424839850603, + 45.434890038543216 + ], + [ + -73.66390101547582, + 45.434632841492004 + ], + [ + -73.66374736528938, + 45.43472970791389 + ], + [ + -73.66409808854104, + 45.434996925629434 + ], + [ + -73.66424839850603, + 45.434890038543216 + ] + ] + ] + }, + "id": 25 + }, + { + "type": "Feature", + "properties": { + "name": "26", + "address": "", + "function": 6199, + "height": 18.08, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.6634701269095, + 45.4355213403962 + ], + [ + -73.66308934166484, + 45.43508711160843 + ], + [ + -73.66289560882107, + 45.43522406068765 + ], + [ + -73.66329309517295, + 45.43562154703953 + ], + [ + -73.6634701269095, + 45.4355213403962 + ] + ] + ] + }, + "id": 26 + }, + { + "type": "Feature", + "properties": { + "name": "27", + "address": "", + "function": 6199, + "height": 20.04, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66373316934823, + 45.434914463912534 + ], + [ + -73.66358870477077, + 45.43480423660487 + ], + [ + -73.6635386014491, + 45.434849329594364 + ], + [ + -73.66367638558368, + 45.43495705173595 + ], + [ + -73.66373316934823, + 45.434914463912534 + ] + ] + ] + }, + "id": 27 + }, + { + "type": "Feature", + "properties": { + "name": "28", + "address": "", + "function": 6199, + "height": 21.43, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66366552986399, + 45.43495872184667 + ], + [ + -73.66351856012044, + 45.434848494539004 + ], + [ + -73.66346177635587, + 45.43489108236242 + ], + [ + -73.66360290071191, + 45.43500464989153 + ], + [ + -73.66366552986399, + 45.43495872184667 + ] + ] + ] + }, + "id": 28 + }, + { + "type": "Feature", + "properties": { + "name": "29", + "address": "", + "function": 1000, + "height": 25.0, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66359288004757, + 45.43500799011298 + ], + [ + -73.66345008558082, + 45.434896092694586 + ], + [ + -73.66339580698235, + 45.43493784546264 + ], + [ + -73.66353442617229, + 45.435049742881034 + ], + [ + -73.66359288004757, + 45.43500799011298 + ] + ] + ] + }, + "id": 29 + }, + { + "type": "Feature", + "properties": { + "name": "30", + "address": "", + "function": 1000, + "height": 22.37, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66351689000972, + 45.435051412991754 + ], + [ + -73.66338161104122, + 45.43493701040728 + ], + [ + -73.66331647672305, + 45.43497876317534 + ], + [ + -73.66346428152197, + 45.43509233070445 + ], + [ + -73.66351689000972, + 45.435051412991754 + ] + ] + ] + }, + "id": 30 + }, + { + "type": "Feature", + "properties": { + "name": "31", + "address": "", + "function": 1000, + "height": 18.51, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66344758041474, + 45.43509483587053 + ], + [ + -73.66330645605872, + 45.4349795982307 + ], + [ + -73.66324800218344, + 45.43502302110948 + ], + [ + -73.66338912653946, + 45.43513825874931 + ], + [ + -73.66344758041474, + 45.43509483587053 + ] + ] + ] + }, + "id": 31 + }, + { + "type": "Feature", + "properties": { + "name": "32", + "address": "", + "function": 6199, + "height": 15.79, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66337493059832, + 45.43514159897075 + ], + [ + -73.66323714646374, + 45.43502886649701 + ], + [ + -73.6631736822563, + 45.43507479454187 + ], + [ + -73.66331731177841, + 45.435184186794174 + ], + [ + -73.66337493059832, + 45.43514159897075 + ] + ] + ] + }, + "id": 32 + }, + { + "type": "Feature", + "properties": { + "name": "33", + "address": "", + "function": 6199, + "height": 23.58, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66329977561583, + 45.435188362070974 + ], + [ + -73.66316449664733, + 45.43507479454187 + ], + [ + -73.66312775421143, + 45.435100681258064 + ], + [ + -73.6632530125156, + 45.43522593956222 + ], + [ + -73.66329977561583, + 45.435188362070974 + ] + ] + ] + }, + "id": 33 + }, + { + "type": "Feature", + "properties": { + "name": "34", + "address": "", + "function": 6199, + "height": 26.2, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66458325570586, + 45.43386813954507 + ], + [ + -73.66446467784459, + 45.4337579122374 + ], + [ + -73.66401875828176, + 45.43388150043084 + ], + [ + -73.6641724084682, + 45.43412366648556 + ], + [ + -73.66458325570586, + 45.43386813954507 + ] + ] + ] + }, + "id": 34 + }, + { + "type": "Feature", + "properties": { + "name": "35", + "address": "", + "function": 6199, + "height": 20.18, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66399704684237, + 45.43409527460329 + ], + [ + -73.66344925052549, + 45.43367774692273 + ], + [ + -73.66326386823532, + 45.4338180362234 + ], + [ + -73.6639085309741, + 45.4342990281114 + ], + [ + -73.66399704684237, + 45.43409527460329 + ] + ] + ] + }, + "id": 35 + }, + { + "type": "Feature", + "properties": { + "name": "36", + "address": "", + "function": 6199, + "height": 14.15, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.6637064475767, + 45.43444599785495 + ], + [ + -73.66304675384143, + 45.433941624416846 + ], + [ + -73.66285135088692, + 45.43408358382823 + ], + [ + -73.66350436417932, + 45.43456624582695 + ], + [ + -73.6637064475767, + 45.43444599785495 + ] + ] + ] + }, + "id": 36 + }, + { + "type": "Feature", + "properties": { + "name": "37", + "address": "", + "function": 1000, + "height": 15.39, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66296825863749, + 45.43427063622911 + ], + [ + -73.66278287634732, + 45.43415038825711 + ], + [ + -73.66255240106766, + 45.434307378665 + ], + [ + -73.6627578246865, + 45.43443931741206 + ], + [ + -73.66296825863749, + 45.43427063622911 + ] + ] + ] + }, + "id": 37 + }, + { + "type": "Feature", + "properties": { + "name": "38", + "address": "", + "function": 1000, + "height": 13.32, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66293652653377, + 45.43491529896789 + ], + [ + -73.6624739058637, + 45.434394224422554 + ], + [ + -73.66231190512366, + 45.434559565384056 + ], + [ + -73.66271273169698, + 45.435022186054105 + ], + [ + -73.66293652653377, + 45.43491529896789 + ] + ] + ] + }, + "id": 38 + }, + { + "type": "Feature", + "properties": { + "name": "39", + "address": "", + "function": 6199, + "height": 18.43, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66336156971256, + 45.434631380145106 + ], + [ + -73.66321543502437, + 45.434516142505274 + ], + [ + -73.66315948631518, + 45.434562070550136 + ], + [ + -73.66330395089265, + 45.43467313291316 + ], + [ + -73.66336156971256, + 45.434631380145106 + ] + ] + ] + }, + "id": 39 + }, + { + "type": "Feature", + "properties": { + "name": "40", + "address": "", + "function": 1000, + "height": 18.16, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66329059000687, + 45.43467730818997 + ], + [ + -73.6631461254294, + 45.43456624582694 + ], + [ + -73.66309184683092, + 45.43460966870572 + ], + [ + -73.6632321361316, + 45.434720731068744 + ], + [ + -73.66329059000687, + 45.43467730818997 + ] + ] + ] + }, + "id": 40 + }, + { + "type": "Feature", + "properties": { + "name": "41", + "address": "", + "function": 1000, + "height": 24.56, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66321627007973, + 45.43472323623483 + ], + [ + -73.66307514572371, + 45.43461050376108 + ], + [ + -73.66301919701452, + 45.434652256529134 + ], + [ + -73.66316449664734, + 45.434764153947526 + ], + [ + -73.66321627007973, + 45.43472323623483 + ] + ] + ] + }, + "id": 41 + }, + { + "type": "Feature", + "properties": { + "name": "42", + "address": "", + "function": 1000, + "height": 23.92, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66314111509723, + 45.434767494168966 + ], + [ + -73.66299915568585, + 45.43465559675058 + ], + [ + -73.66294320697665, + 45.434697349518636 + ], + [ + -73.66308516638804, + 45.43481091704775 + ], + [ + -73.66314111509723, + 45.434767494168966 + ] + ] + ] + }, + "id": 42 + }, + { + "type": "Feature", + "properties": { + "name": "43", + "address": "", + "function": 6199, + "height": 26.21, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66307013539154, + 45.434816762435275 + ], + [ + -73.6629273409248, + 45.43470152479544 + ], + [ + -73.66287139221559, + 45.43474494767422 + ], + [ + -73.66301919701452, + 45.43485851520333 + ], + [ + -73.66307013539154, + 45.434816762435275 + ] + ] + ] + }, + "id": 43 + }, + { + "type": "Feature", + "properties": { + "name": "44", + "address": "", + "function": 6199, + "height": 14.46, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66299665051976, + 45.43486018531405 + ], + [ + -73.66286304166199, + 45.43474578272958 + ], + [ + -73.66283381472435, + 45.43477918494403 + ], + [ + -73.66295155753026, + 45.43489442258386 + ], + [ + -73.66299665051976, + 45.43486018531405 + ] + ] + ] + }, + "id": 44 + }, + { + "type": "Feature", + "properties": { + "name": "45", + "address": "", + "function": 1000, + "height": 23.0, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66317284720095, + 45.43588229307605 + ], + [ + -73.66267014387357, + 45.435326146205554 + ], + [ + -73.6624697305869, + 45.435426352848886 + ], + [ + -73.6629807844679, + 45.43597414916577 + ], + [ + -73.66317284720095, + 45.43588229307605 + ] + ] + ] + }, + "id": 45 + }, + { + "type": "Feature", + "properties": { + "name": "46", + "address": "", + "function": 6199, + "height": 23.79, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66281043317423, + 45.43604596392683 + ], + [ + -73.66266012320924, + 45.435883963186775 + ], + [ + -73.66209061545295, + 45.436059324812604 + ], + [ + -73.66223591508579, + 45.43620295433472 + ], + [ + -73.66281043317423, + 45.43604596392683 + ] + ] + ] + }, + "id": 46 + }, + { + "type": "Feature", + "properties": { + "name": "47", + "address": "", + "function": 1000, + "height": 14.51, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66229770918251, + 45.43597247905505 + ], + [ + -73.66198873869891, + 45.43565181779638 + ], + [ + -73.66178832541223, + 45.43574033366466 + ], + [ + -73.66210564644946, + 45.43602926281961 + ], + [ + -73.66229770918251, + 45.43597247905505 + ] + ] + ] + }, + "id": 47 + }, + { + "type": "Feature", + "properties": { + "name": "48", + "address": "", + "function": 6199, + "height": 18.76, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66259331878035, + 45.435580838090694 + ], + [ + -73.6624805863066, + 45.43545390967581 + ], + [ + -73.66241294682236, + 45.435490652111696 + ], + [ + -73.66253152468363, + 45.435615075360495 + ], + [ + -73.66259331878035, + 45.435580838090694 + ] + ] + ] + }, + "id": 48 + }, + { + "type": "Feature", + "properties": { + "name": "49", + "address": "", + "function": 1000, + "height": 22.43, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66251315346568, + 45.43561591041586 + ], + [ + -73.66240209110266, + 45.43549733255458 + ], + [ + -73.66233946195058, + 45.43553240487975 + ], + [ + -73.66244885420288, + 45.43565098274102 + ], + [ + -73.66251315346568, + 45.43561591041586 + ] + ] + ] + }, + "id": 49 + }, + { + "type": "Feature", + "properties": { + "name": "50", + "address": "", + "function": 6199, + "height": 17.74, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66243298815102, + 45.43565098274102 + ], + [ + -73.66232359589871, + 45.43553323993511 + ], + [ + -73.66225846158055, + 45.43556831226027 + ], + [ + -73.66236952394358, + 45.43568438495547 + ], + [ + -73.66243298815102, + 45.43565098274102 + ] + ] + ] + }, + "id": 50 + }, + { + "type": "Feature", + "properties": { + "name": "51", + "address": "", + "function": 1000, + "height": 19.78, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66235282283635, + 45.43568689012155 + ], + [ + -73.66223758519652, + 45.43556914731564 + ], + [ + -73.6621757910998, + 45.43560338458544 + ], + [ + -73.66228935862891, + 45.43571945728063 + ], + [ + -73.66235282283635, + 45.43568689012155 + ] + ] + ] + }, + "id": 51 + }, + { + "type": "Feature", + "properties": { + "name": "52", + "address": "", + "function": 6199, + "height": 17.37, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66194114054332, + 45.436273098985055 + ], + [ + -73.66132988001898, + 45.435608394917615 + ], + [ + -73.66120629182554, + 45.4358255093115 + ], + [ + -73.6616772630492, + 45.436343243635385 + ], + [ + -73.66194114054332, + 45.436273098985055 + ] + ] + ] + }, + "id": 52 + }, + { + "type": "Feature", + "properties": { + "name": "53", + "address": "", + "function": 1000, + "height": 27.69, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66139668444788, + 45.43627977942794 + ], + [ + -73.66112278628943, + 45.435985839940834 + ], + [ + -73.6607152792732, + 45.436369965406946 + ], + [ + -73.66086224901676, + 45.43652027537194 + ], + [ + -73.66139668444788, + 45.43627977942794 + ] + ] + ] + }, + "id": 53 + }, + { + "type": "Feature", + "properties": { + "name": "54", + "address": "", + "function": 6199, + "height": 16.53, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66252233907464, + 45.43517082590839 + ], + [ + -73.66211817227988, + 45.43471655579195 + ], + [ + -73.6619545014291, + 45.43490360819284 + ], + [ + -73.66229854423787, + 45.435284393437506 + ], + [ + -73.66252233907464, + 45.43517082590839 + ] + ] + ] + }, + "id": 54 + }, + { + "type": "Feature", + "properties": { + "name": "55", + "address": "", + "function": 1000, + "height": 25.79, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66197454275776, + 45.43514410413684 + ], + [ + -73.66185763500721, + 45.43498711372895 + ], + [ + -73.66147684976254, + 45.43539796096661 + ], + [ + -73.66163384017042, + 45.435578332924614 + ], + [ + -73.66193780032187, + 45.43544806428828 + ], + [ + -73.66183759367854, + 45.43531779565195 + ], + [ + -73.66197454275776, + 45.43514410413684 + ] + ] + ] + }, + "id": 55 + }, + { + "type": "Feature", + "properties": { + "name": "56", + "address": "", + "function": 1000, + "height": 19.22, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66187433611442, + 45.43451280228384 + ], + [ + -73.66173070659231, + 45.43433911076873 + ], + [ + -73.66127643647587, + 45.43459630781995 + ], + [ + -73.66155701507721, + 45.43487354619984 + ], + [ + -73.66187433611442, + 45.43451280228384 + ] + ] + ] + }, + "id": 56 + }, + { + "type": "Feature", + "properties": { + "name": "57", + "address": "", + "function": 1000, + "height": 28.83, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66143008666232, + 45.434997134393285 + ], + [ + -73.66112612651088, + 45.43466645247028 + ], + [ + -73.66091569255987, + 45.434796721106615 + ], + [ + -73.66127977669731, + 45.43517416612984 + ], + [ + -73.66143008666232, + 45.434997134393285 + ] + ] + ] + }, + "id": 57 + }, + { + "type": "Feature", + "properties": { + "name": "58", + "address": "", + "function": 1000, + "height": 29.71, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66111610584655, + 45.43539796096661 + ], + [ + -73.66068855750166, + 45.434916969078614 + ], + [ + -73.6604747833292, + 45.435050577936394 + ], + [ + -73.66099919809598, + 45.435591693810395 + ], + [ + -73.66111610584655, + 45.43539796096661 + ] + ] + ] + }, + "id": 58 + }, + { + "type": "Feature", + "properties": { + "name": "59", + "address": "", + "function": 6199, + "height": 29.8, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66089565123121, + 45.435731983111054 + ], + [ + -73.66076538259487, + 45.4355549513745 + ], + [ + -73.6602042253922, + 45.43580880820428 + ], + [ + -73.66036789624299, + 45.43596913883361 + ], + [ + -73.66089565123121, + 45.435731983111054 + ] + ] + ] + }, + "id": 59 + }, + { + "type": "Feature", + "properties": { + "name": "60", + "address": "", + "function": 6199, + "height": 20.61, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66038459735022, + 45.435625096024836 + ], + [ + -73.6600605958701, + 45.43524097055872 + ], + [ + -73.65980673904032, + 45.43535787830928 + ], + [ + -73.66014410140622, + 45.435728642889615 + ], + [ + -73.66038459735022, + 45.435625096024836 + ] + ] + ] + }, + "id": 60 + }, + { + "type": "Feature", + "properties": { + "name": "61", + "address": "", + "function": 6199, + "height": 16.25, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66414902691807, + 45.43368108714418 + ], + [ + -73.66402209850318, + 45.43356751961507 + ], + [ + -73.66390519075263, + 45.433641004486844 + ], + [ + -73.66400873761741, + 45.43376459268029 + ], + [ + -73.66414902691807, + 45.43368108714418 + ] + ] + ] + }, + "id": 61 + }, + { + "type": "Feature", + "properties": { + "name": "62", + "address": "", + "function": 6199, + "height": 20.43, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66570222988973, + 45.434185460582285 + ], + [ + -73.6651510933514, + 45.43376793290174 + ], + [ + -73.66499076272207, + 45.4338781602094 + ], + [ + -73.6655418992604, + 45.43428900744706 + ], + [ + -73.66570222988973, + 45.434185460582285 + ] + ] + ] + }, + "id": 62 + }, + { + "type": "Feature", + "properties": { + "name": "63", + "address": "", + "function": 1000, + "height": 28.52, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66632017085698, + 45.43394830485972 + ], + [ + -73.66567216789676, + 45.4334205498715 + ], + [ + -73.66545839372432, + 45.433600921829495 + ], + [ + -73.66611641734887, + 45.434091934381826 + ], + [ + -73.66632017085698, + 45.43394830485972 + ] + ] + ] + }, + "id": 63 + }, + { + "type": "Feature", + "properties": { + "name": "64", + "address": "", + "function": 1000, + "height": 14.76, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66714186533231, + 45.43340384876427 + ], + [ + -73.66694813248853, + 45.433276920349385 + ], + [ + -73.6661865619992, + 45.433787974230384 + ], + [ + -73.66636359373575, + 45.43392826353105 + ], + [ + -73.66714186533231, + 45.43340384876427 + ] + ] + ] + }, + "id": 64 + }, + { + "type": "Feature", + "properties": { + "name": "65", + "address": "", + "function": 1000, + "height": 22.86, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66685460628808, + 45.43323349747061 + ], + [ + -73.66666755388721, + 45.43309654839139 + ], + [ + -73.66638697528587, + 45.433193414813275 + ], + [ + -73.66665085277998, + 45.433380467214164 + ], + [ + -73.66685460628808, + 45.43323349747061 + ] + ] + ] + }, + "id": 65 + }, + { + "type": "Feature", + "properties": { + "name": "66", + "address": "", + "function": 1000, + "height": 14.33, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66655732657954, + 45.433019723298166 + ], + [ + -73.6660663140272, + 45.43267234026794 + ], + [ + -73.66588928229065, + 45.4327291240325 + ], + [ + -73.66597278782676, + 45.43292953731917 + ], + [ + -73.6648103907641, + 45.433223476806276 + ], + [ + -73.66488387563588, + 45.43337378677128 + ], + [ + -73.66606297380577, + 45.433086527727056 + ], + [ + -73.6661030564631, + 45.433126610384384 + ], + [ + -73.66655732657954, + 45.433019723298166 + ] + ] + ] + }, + "id": 66 + }, + { + "type": "Feature", + "properties": { + "name": "67", + "address": "", + "function": 1000, + "height": 26.98, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66649970775963, + 45.43334790005508 + ], + [ + -73.66638280000907, + 45.433205940643695 + ], + [ + -73.66637194428938, + 45.43320844580978 + ], + [ + -73.66642872805394, + 45.43336627127303 + ], + [ + -73.66649970775963, + 45.43334790005508 + ] + ] + ] + }, + "id": 67 + }, + { + "type": "Feature", + "properties": { + "name": "68", + "address": "", + "function": 6199, + "height": 28.96, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66641870738961, + 45.43336710632839 + ], + [ + -73.6663585834036, + 45.43321596130803 + ], + [ + -73.66630848008194, + 45.43323433252598 + ], + [ + -73.66636526384649, + 45.433379632158804 + ], + [ + -73.66641870738961, + 45.43336710632839 + ] + ] + ] + }, + "id": 68 + }, + { + "type": "Feature", + "properties": { + "name": "69", + "address": "", + "function": 6199, + "height": 23.14, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66634772768391, + 45.43338130226953 + ], + [ + -73.66628342842111, + 45.43322932219381 + ], + [ + -73.66623165498872, + 45.43325186868856 + ], + [ + -73.66628676864255, + 45.433395498210665 + ], + [ + -73.66634772768391, + 45.43338130226953 + ] + ] + ] + }, + "id": 69 + }, + { + "type": "Feature", + "properties": { + "name": "70", + "address": "", + "function": 6199, + "height": 19.18, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66627340775678, + 45.433394663155305 + ], + [ + -73.66622079926903, + 45.43326522957433 + ], + [ + -73.66616485055982, + 45.43328610595836 + ], + [ + -73.66621662399221, + 45.433409694151806 + ], + [ + -73.66627340775678, + 45.433394663155305 + ] + ] + ] + }, + "id": 70 + }, + { + "type": "Feature", + "properties": { + "name": "71", + "address": "", + "function": 6199, + "height": 26.94, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66619825277427, + 45.43341303437325 + ], + [ + -73.66614480923116, + 45.433272745072586 + ], + [ + -73.66608134502371, + 45.43329362145661 + ], + [ + -73.666139798899, + 45.43343140559119 + ], + [ + -73.66619825277427, + 45.43341303437325 + ] + ] + ] + }, + "id": 71 + }, + { + "type": "Feature", + "properties": { + "name": "72", + "address": "", + "function": 6199, + "height": 20.39, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66612810812394, + 45.43343307570192 + ], + [ + -73.66606380886114, + 45.433289446179806 + ], + [ + -73.66601454059483, + 45.43330531223167 + ], + [ + -73.66606965424866, + 45.43344977680914 + ], + [ + -73.66612810812394, + 45.43343307570192 + ] + ] + ] + }, + "id": 72 + }, + { + "type": "Feature", + "properties": { + "name": "73", + "address": "", + "function": 6199, + "height": 23.57, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66605462325217, + 45.43344977680914 + ], + [ + -73.6660045199305, + 45.43331282772992 + ], + [ + -73.66594439594449, + 45.43333787939075 + ], + [ + -73.6659978394876, + 45.43346981813781 + ], + [ + -73.66605462325217, + 45.43344977680914 + ] + ] + ] + }, + "id": 73 + }, + { + "type": "Feature", + "properties": { + "name": "74", + "address": "", + "function": 1000, + "height": 22.69, + "year_of_construction": 2023 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -73.66598447860183, + 45.43346981813781 + ], + [ + -73.66592602472655, + 45.43333119894786 + ], + [ + -73.66587091107272, + 45.43334873511044 + ], + [ + -73.6659335402248, + 45.43348401407894 + ], + [ + -73.66598447860183, + 45.43346981813781 + ] + ] + ] + }, + "id": 74 + } + ] +} \ No newline at end of file diff --git a/main.py b/main.py index 3921027d..bd8539a6 100644 --- a/main.py +++ b/main.py @@ -1,78 +1,52 @@ import pandas as pd -from scripts.geojson_creator import process_geojson from pathlib import Path -import subprocess from scripts.ep_run_enrich import energy_plus_workflow from hub.imports.geometry_factory import GeometryFactory from hub.helpers.dictionaries import Dictionaries from hub.imports.construction_factory import ConstructionFactory from hub.imports.usage_factory import UsageFactory from hub.imports.weather_factory import WeatherFactory -from hub.imports.results_factory import ResultFactory from scripts import random_assignation from hub.imports.energy_systems_factory import EnergySystemsFactory from scripts.energy_system_sizing_and_simulation_factory import EnergySystemsSimulationFactory from scripts.costs.cost import Cost -from scripts.costs.constants import SKIN_RETROFIT_AND_SYSTEM_RETROFIT_AND_PV, SYSTEM_RETROFIT_AND_PV -import hub.helpers.constants as cte -from hub.exports.exports_factory import ExportsFactory -from scripts.solar_angles import CitySolarAngles -from scripts.pv_sizing_and_simulation import PVSizingSimulation +from scripts.costs.constants import SYSTEM_RETROFIT_AND_PV # Specify the GeoJSON file path -location = [45.49034212153445, -73.61435648647083] -geojson_file = process_geojson(x=location[1], y=location[0], diff=0.0005) -file_path = (Path(__file__).parent / 'input_files' / 'output_buildings.geojson') -# Specify the output path for the PDF file +file_path = (Path(__file__).parent / 'input_files' / 'processed_output -single_building.geojson') output_path = (Path(__file__).parent / 'out_files').resolve() -# Create city object from GeoJSON file city = GeometryFactory('geojson', path=file_path, height_field='height', year_of_construction_field='year_of_construction', function_field='function', function_to_hub=Dictionaries().montreal_function_to_hub_function).city -# Enrich city data ConstructionFactory('nrcan', city).enrich() UsageFactory('nrcan', city).enrich() WeatherFactory('epw', city).enrich() -ExportsFactory('sra', city, output_path).export() -sra_path = (output_path / f'{city.name}_sra.xml').resolve() -subprocess.run(['sra', str(sra_path)]) -ResultFactory('sra', city, output_path).enrich() -solar_angles = CitySolarAngles(city.name, - city.latitude, - city.longitude, - tilt_angle=45, - surface_azimuth_angle=180).calculate energy_plus_workflow(city) random_assignation.call_random(city.buildings, random_assignation.residential_new_systems_percentage) EnergySystemsFactory('montreal_future', city).enrich() for building in city.buildings: EnergySystemsSimulationFactory('archetype13', building=building, output_path=output_path).enrich() - # ghi = [x / cte.WATTS_HOUR_TO_JULES for x in building.roofs[0].global_irradiance[cte.HOUR]] - # pv_sizing_simulation = PVSizingSimulation(building, - # solar_angles, - # tilt_angle=45, - # module_height=1, - # module_width=2, - # ghi=ghi) sum_floor_area = 0 +buildings_list = [] +for building in city.buildings: + buildings_list.append(building.name) +df = pd.DataFrame(columns=['building_name', 'total_floor_area', 'investment_cost', 'lc CAPEX']) +df['building_name'] = buildings_list for building in city.buildings: for thermal_zone in building.thermal_zones_from_internal_zones: sum_floor_area += thermal_zone.total_floor_area costs = Cost(building=building, retrofit_scenario=SYSTEM_RETROFIT_AND_PV).life_cycle - # costs.to_csv(output_path / f'{building.name}_lcc.csv') costs.loc['global_capital_costs', f'Scenario {SYSTEM_RETROFIT_AND_PV}'].to_csv( output_path / f'{building.name}_cc.csv') - # (costs.loc['global_operational_costs', f'Scenario {SYSTEM_RETROFIT_AND_PV}']. - # to_csv(output_path / f'{building.name}_op.csv')) - # costs.loc['global_maintenance_costs', f'Scenario {SYSTEM_RETROFIT_AND_PV}'].to_csv( - # output_path / f'{building.name}_m.csv') - print(building.name) - investment_cost = costs.loc['global_capital_costs', f'Scenario {SYSTEM_RETROFIT_AND_PV}'].loc[0, 'D3020_heat_and_cooling_generating_systems'] + investment_cost = costs.loc['global_capital_costs', + f'Scenario {SYSTEM_RETROFIT_AND_PV}'].loc[0, 'D3020_heat_and_cooling_generating_systems'] lcc_capex = costs.loc['total_capital_costs_systems', f'Scenario {SYSTEM_RETROFIT_AND_PV}'] - print(investment_cost) - print(lcc_capex) + df.loc[df['building_name'] == building.name, 'total_floor_area'] = ( + building.thermal_zones_from_internal_zones[0].total_floor_area) + df.loc[df['building_name'] == building.name, 'investment_cost'] = investment_cost + df.loc[df['building_name'] == building.name, 'lc CAPEX'] = lcc_capex -print(sum_floor_area) \ No newline at end of file +df.to_csv(output_path / 'economic analysis.csv') diff --git a/scripts/costs/capital_costs.py b/scripts/costs/capital_costs.py index c87f3eba..0f361328 100644 --- a/scripts/costs/capital_costs.py +++ b/scripts/costs/capital_costs.py @@ -155,13 +155,12 @@ class CapitalCosts(CostBase): capital_cost_energy_storage_equipment = 0 capital_cost_distribution_equipment = 0 capital_cost_lighting = 0 - capital_cost_pv = self._surface_pv * chapter.item('D2010_photovoltaic_system').initial_investment[0] + capital_cost_pv = 0 for (i, component) in enumerate(system_components): if component_categories[i] == 'generation': capital_cost_heating_and_cooling_equipment += chapter.item(component).initial_investment[0] * component_sizes[i] elif component_categories[i] == 'dhw': - capital_cost_domestic_hot_water_equipment += chapter.item(component).initial_investment[0] * \ - component_sizes[i] + capital_cost_domestic_hot_water_equipment += 0 elif component_categories[i] == 'distribution': capital_cost_distribution_equipment += chapter.item(component).initial_investment[0] * \ component_sizes[i] @@ -237,7 +236,7 @@ class CapitalCosts(CostBase): reposition_cost_heating_and_cooling_equipment = chapter.item(component).reposition[0] * component_sizes[i] * costs_increase self._yearly_capital_costs.loc[year, 'D3020_heat_and_cooling_generating_systems'] += reposition_cost_heating_and_cooling_equipment elif component_categories[i] == 'dhw': - reposition_cost_domestic_hot_water_equipment = chapter.item(component).reposition[0] * component_sizes[i] * costs_increase + reposition_cost_domestic_hot_water_equipment = 0 self._yearly_capital_costs.loc[year, 'D40_dhw'] += reposition_cost_domestic_hot_water_equipment elif component_categories[i] == 'distribution': reposition_cost_distribution_equipment = chapter.item(component).reposition[0] * component_sizes[i] * costs_increase @@ -248,13 +247,13 @@ class CapitalCosts(CostBase): if self._configuration.retrofit_scenario == CURRENT_STATUS and pv: if (year % chapter.item('D2010_photovoltaic_system').lifetime) == 0: self._yearly_capital_costs.loc[year, 'D2010_photovoltaic_system'] += ( - self._surface_pv * chapter.item('D2010_photovoltaic_system').reposition[0] * costs_increase + self._surface_pv * 0 * costs_increase ) elif self._configuration.retrofit_scenario in (PV, SYSTEM_RETROFIT_AND_PV, SKIN_RETROFIT_AND_SYSTEM_RETROFIT_AND_PV): if (year % chapter.item('D2010_photovoltaic_system').lifetime) == 0: self._yearly_capital_costs.loc[year, 'D2010_photovoltaic_system'] += ( - self._surface_pv * chapter.item('D2010_photovoltaic_system').reposition[0] * costs_increase + self._surface_pv * 0 * costs_increase ) def system_components(self): diff --git a/scripts/system_simulation_models/archetype13.py b/scripts/system_simulation_models/archetype13.py index 17a44c94..bb08df35 100644 --- a/scripts/system_simulation_models/archetype13.py +++ b/scripts/system_simulation_models/archetype13.py @@ -45,6 +45,8 @@ class Archetype13: dhw_tes = dhw_hp.energy_storage_systems[0] dhw_tes.volume = round( (self._domestic_hot_water_peak_load * storage_factor * 3600) / (cte.WATER_HEAT_CAPACITY * cte.WATER_DENSITY * 10)) + if float(dhw_tes.volume) == 0: + dhw_tes.volume = 1 return dhw_hp, dhw_tes def heating_system_simulation(self):