diff --git a/__pycache__/matsim_engine.cpython-39.pyc b/__pycache__/matsim_engine.cpython-39.pyc index 5d79a35..fd9aa38 100644 Binary files a/__pycache__/matsim_engine.cpython-39.pyc and b/__pycache__/matsim_engine.cpython-39.pyc differ diff --git a/input_files/merged-network.osm.pbf b/input_files/merged-network.osm.pbf index 83c5d62..4f19c13 100644 Binary files a/input_files/merged-network.osm.pbf and b/input_files/merged-network.osm.pbf differ diff --git a/matsim_engine.py b/matsim_engine.py index cb67175..967ea66 100644 --- a/matsim_engine.py +++ b/matsim_engine.py @@ -1,6 +1,9 @@ import subprocess import xmltodict +import geopandas as gpd +from shapely.geometry import Point + from matsim_activity_to_matsim_schedule import MatsimActivityToMatsimSchedule from hub_function_to_matsim_activity import HubFunctionToMatsimActivity @@ -19,6 +22,11 @@ class MatSimEngine: hub_function_to_matsim = HubFunctionToMatsimActivity() matsim_schedule = MatsimActivityToMatsimSchedule() + buildings_shape_data = { + 'id': [], + 'geometry': [] + } + # 1- Facilities # TODO: Add the ability for a building to have multiple activities for building in city.buildings: @@ -26,6 +34,13 @@ class MatSimEngine: schedule = matsim_schedule.dictionary[activity] start_time, end_time = schedule.split('-') + new_id = 0 + for surface in building.surfaces: + for coord in surface.solid_polygon.coordinates: + new_id += 1 + buildings_shape_data['id'].append(f"{new_id}_building.name") + buildings_shape_data['geometry'].append(Point(coord[0], coord[1])) + facility = { '@id': building.name, '@x': str(building.centroid[0]), @@ -44,6 +59,13 @@ class MatSimEngine: } facilities_dict['facilities']['facility'].append(facility) + gdf = gpd.GeoDataFrame( + buildings_shape_data, + crs="EPSG:26911" + ) + + gdf.to_file("input_files/buildings_shapefile.shp") + # Convert the Python dictionary to an XML string xml_content = xmltodict.unparse(facilities_dict, pretty=True) @@ -52,6 +74,12 @@ class MatSimEngine: file.write(xml_content) # 2- Network + # First get only the part of the network necessary for the simulation + java_path = "java" + jar_path = "matsim-network-from-osm.jar" + command = [java_path, "-jar", jar_path, "input_files/merged-network.osm.pbf", "input_files/buildings_shapefile.shp", f"{output_file_path}/network.xml.gz"] + subprocess.run(command) + # 3- Population # 4- Config Generation