Generate network from city

This commit is contained in:
Ruben1729 2024-01-26 15:11:49 -05:00
parent d383725bc8
commit e9a05f4bc2
3 changed files with 28 additions and 0 deletions

Binary file not shown.

View File

@ -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