π¦ VoxCity OBJ ExportΒΆ
Export voxel city models and simulation results to Wavefront OBJ format for use in external 3D software.
Export TypesΒΆ
Export |
Function |
Description |
|---|---|---|
Voxel City |
|
Full 3D voxel model |
Simulation Results |
|
Value-mapped colored surface |
Use CasesΒΆ
Blender/Rhino integration - Import for rendering and further modeling
Presentation - Create high-quality visualizations
Analysis overlay - View simulation results as colored 3D surfaces
PrerequisitesΒΆ
pip install voxcity
# %pip install voxcity
from voxcity.generator import get_voxcity
from voxcity.exporter.obj import export_obj, grid_to_obj
from voxcity.simulator.solar import get_global_solar_irradiance_using_epw
from voxcity.simulator.view import get_view_index
meshsize = 5
rectangle_vertices = [
(139.760, 35.680),
(139.760, 35.690),
(139.770, 35.690),
(139.770, 35.680)
]
city = get_voxcity(
rectangle_vertices,
meshsize=meshsize,
building_source='OpenStreetMap',
land_cover_source='OpenStreetMap',
canopy_height_source='High Resolution 1m Global Canopy Height Maps',
dem_source='DeltaDTM',
output_dir='output/obj_demo'
)
# Access grids from the VoxCity object
voxcity_grid = city.voxels.classes
dem_grid = city.dem.elevation
print(voxcity_grid.shape, dem_grid.shape)
ποΈ Export Voxel CityΒΆ
Export the full 3D voxel city model as an OBJ file with materials.
export_obj(city, output_dir='output/obj_demo', file_name='voxcity')
print('Exported voxcity OBJ')
π Export Simulation Results as Colored OBJΒΆ
Export 2D analysis grids (solar, view indices) as colored 3D surfaces.
grid_to_obj() ParametersΒΆ
Parameter |
Description |
|---|---|
|
Output directory path |
|
Output file name (without extension) |
|
Grid cell size (meshsize) |
|
Height offset for surface (default: view_point_height) |
|
Matplotlib colormap name |
|
Value range for color mapping |
|
Transparency (0-1) |
# Instantaneous solar
solar_kwargs = {
"download_nearest_epw": True,
"rectangle_vertices": rectangle_vertices,
"calc_time": "01-01 12:00:00",
"view_point_height": 1.5,
}
solar_grid = get_global_solar_irradiance_using_epw(
city, calc_type='instantaneous', **solar_kwargs
)
# Export instantaneous solar as colored OBJ
grid_to_obj(
solar_grid, dem_grid,
output_dir='output/obj_demo', file_name='solar_instantaneous',
cell_size=meshsize, offset=1.5, colormap_name='magma', num_colors=10, alpha=1.0,
vmin=0
)
# Cumulative solar for a time window
cum_kwargs = solar_kwargs.copy()
cum_kwargs["start_time"] = "01-01 05:00:00"
cum_kwargs["end_time"] = "01-31 20:00:00"
cum_solar_grid = get_global_solar_irradiance_using_epw(
city, calc_type='cumulative', **cum_kwargs
)
grid_to_obj(
cum_solar_grid, dem_grid,
output_dir='output/obj_demo', file_name='solar_cumulative',
cell_size=meshsize, offset=1.5, colormap_name='viridis', num_colors=10, alpha=1.0
)
# View indices
gvi = get_view_index(city, mode='green', obj_export=False)
grid_to_obj(
gvi, dem_grid,
output_dir='output/obj_demo', file_name='gvi',
cell_size=meshsize, offset=1.5, colormap_name='Greens', num_colors=10, alpha=1.0,
vmin=0.0, vmax=1.0
)