voxcity 0.4.4__py3-none-any.whl → 0.4.5__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of voxcity might be problematic. Click here for more details.

@@ -4,7 +4,7 @@ import matplotlib.colors as mcolors
4
4
  import matplotlib.cm as cm
5
5
  import matplotlib.pyplot as plt
6
6
 
7
- def create_voxel_mesh(voxel_array, class_id, meshsize=1.0, building_id_grid=None):
7
+ def create_voxel_mesh(voxel_array, class_id, meshsize=1.0, building_id_grid=None, mesh_type=None):
8
8
  """
9
9
  Create a mesh from voxels preserving sharp edges, scaled by meshsize.
10
10
 
@@ -18,6 +18,11 @@ def create_voxel_mesh(voxel_array, class_id, meshsize=1.0, building_id_grid=None
18
18
  The real-world size of each voxel in meters, for x, y, and z.
19
19
  building_id_grid : np.ndarray (2D), optional
20
20
  2D grid of building IDs, shape (X, Y). Used when class_id=-3 (buildings).
21
+ mesh_type : str, optional
22
+ Type of mesh to create:
23
+ - None (default): create meshes for boundaries between different classes
24
+ - 'building_solar': only create meshes for boundaries between buildings (-3)
25
+ and void (0) or trees (-2)
21
26
 
22
27
  Returns
23
28
  -------
@@ -81,7 +86,7 @@ def create_voxel_mesh(voxel_array, class_id, meshsize=1.0, building_id_grid=None
81
86
  (x, y-1, z) # Bottom
82
87
  ]
83
88
 
84
- # Only create faces where there's a transition between this class and "not this class"
89
+ # Only create faces where there's a transition based on mesh_type
85
90
  for face_idx, adj_coord in enumerate(adjacent_coords):
86
91
  try:
87
92
  # If adj_coord is outside array bounds, it's a boundary => face is visible
@@ -89,7 +94,13 @@ def create_voxel_mesh(voxel_array, class_id, meshsize=1.0, building_id_grid=None
89
94
  is_boundary = True
90
95
  else:
91
96
  adj_value = voxel_array[adj_coord]
92
- is_boundary = (adj_value == 0 or adj_value != class_id)
97
+
98
+ if mesh_type == 'open_air' and class_id == -3:
99
+ # For building_solar, only create faces at boundaries with void (0) or trees (-2)
100
+ is_boundary = (adj_value == 0 or adj_value == -2)
101
+ else:
102
+ # Default behavior - create faces at any class change
103
+ is_boundary = (adj_value == 0 or adj_value != class_id)
93
104
  except IndexError:
94
105
  # Out of range => boundary
95
106
  is_boundary = True
voxcity/simulator/view.py CHANGED
@@ -1708,7 +1708,8 @@ def get_surface_view_factor(voxel_data, meshsize, **kwargs):
1708
1708
  voxel_data,
1709
1709
  building_class_id,
1710
1710
  meshsize,
1711
- building_id_grid=building_id_grid
1711
+ building_id_grid=building_id_grid,
1712
+ mesh_type='open_air'
1712
1713
  )
1713
1714
  if building_mesh is None or len(building_mesh.faces) == 0:
1714
1715
  print("No surfaces found in voxel data for the specified class.")
@@ -1270,7 +1270,7 @@ def visualize_numerical_grid_on_basemap(grid, rectangle_vertices, meshsize, valu
1270
1270
  plt.tight_layout()
1271
1271
  plt.show()
1272
1272
 
1273
- def visualize_numerical_grid_gdf_on_basemap(gdf, value_name="value", cmap='viridis', vmin=None, vmax=None,
1273
+ def visualize_numerical_gdf_on_basemap(gdf, value_name="value", cmap='viridis', vmin=None, vmax=None,
1274
1274
  alpha=0.6, figsize=(12, 8), basemap='CartoDB light',
1275
1275
  show_edge=False, edge_color='black', edge_width=0.5):
1276
1276
  """Visualizes a GeoDataFrame with numerical values on a basemap.
@@ -1298,7 +1298,7 @@ def visualize_numerical_grid_gdf_on_basemap(gdf, value_name="value", cmap='virid
1298
1298
  fig, ax = plt.subplots(figsize=figsize)
1299
1299
 
1300
1300
  # Plot the GeoDataFrame
1301
- gdf_web.plot(column='value',
1301
+ gdf_web.plot(column=value_name,
1302
1302
  ax=ax,
1303
1303
  alpha=alpha,
1304
1304
  cmap=cmap,
@@ -1325,7 +1325,7 @@ def visualize_numerical_grid_gdf_on_basemap(gdf, value_name="value", cmap='virid
1325
1325
  plt.tight_layout()
1326
1326
  plt.show()
1327
1327
 
1328
- def visualize_point_grid_on_basemap(point_gdf, value_name='value', **kwargs):
1328
+ def visualize_point_gdf_on_basemap(point_gdf, value_name='value', **kwargs):
1329
1329
  """Visualizes a point GeoDataFrame on a basemap with colors based on values.
1330
1330
 
1331
1331
  Args:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: voxcity
3
- Version: 0.4.4
3
+ Version: 0.4.5
4
4
  Summary: voxcity is an easy and one-stop tool to output 3d city models for microclimate simulation by integrating multiple geospatial open-data
5
5
  Author-email: Kunihiko Fujiwara <kunihiko@nus.edu.sg>
6
6
  Maintainer-email: Kunihiko Fujiwara <kunihiko@nus.edu.sg>
@@ -16,22 +16,22 @@ voxcity/exporter/obj.py,sha256=0RBFPMKGRH6uNmCLIwAoYFko1bOZKtTSwg7QnoPMud0,21593
16
16
  voxcity/geoprocessor/__init_.py,sha256=JzPVhhttxBWvaZ0IGX2w7OWL5bCo_TIvpHefWeNXruA,133
17
17
  voxcity/geoprocessor/draw.py,sha256=8Em2NvazFpYfFJUqG9LofNXaxdghKLL_rNuztmPwn8Q,13911
18
18
  voxcity/geoprocessor/grid.py,sha256=t-KAdYOk1iUeBuOMcoAb5e4hzJjMIfVItTdFP6FJs1A,44340
19
- voxcity/geoprocessor/mesh.py,sha256=z6e-BigN_K1CGpS9mopkf121pbCnBFJMu32XYfqpLI4,10506
19
+ voxcity/geoprocessor/mesh.py,sha256=r3cRPLgpbhjwgESBemHWWJ5pEWl2KdkRhID6mdLhios,11171
20
20
  voxcity/geoprocessor/network.py,sha256=opb_kpUCAxDd1qtrWPStqR5reYZtVe96XxazNSen7Lk,18851
21
21
  voxcity/geoprocessor/polygon.py,sha256=8Vb2AbkpKYhq1kk2hQMc-gitmUo9pFIe910v4p1vP2g,37772
22
22
  voxcity/geoprocessor/utils.py,sha256=1BRHp-DDeOA8HG8jplY7Eo75G3oXkVGL6DGONL4BA8A,19815
23
23
  voxcity/simulator/__init_.py,sha256=APdkcdaovj0v_RPOaA4SBvFUKT2RM7Hxuuz3Sux4gCo,65
24
24
  voxcity/simulator/solar.py,sha256=amJ5GJtzdG9NE7oxrLj4EMRxGvDY9s2BQdDJ2paFfn0,56709
25
25
  voxcity/simulator/utils.py,sha256=sEYBB2-hLJxTiXQps1_-Fi7t1HN3-1OPOvBCWtgIisA,130
26
- voxcity/simulator/view.py,sha256=-CM-pPbfthg_meyMdcZs9Ar3CHaZhw2fRf_dM6ioN_Q,74875
26
+ voxcity/simulator/view.py,sha256=YufbLuDXrLg1d1dedM6pVyiJ7uHsqY8F2sLLnIoJvB4,74910
27
27
  voxcity/utils/__init_.py,sha256=nLYrj2huBbDBNMqfchCwexGP8Tlt9O_XluVDG7MoFkw,98
28
28
  voxcity/utils/lc.py,sha256=RwPd-VY3POV3gTrBhM7TubgGb9MCd3nVah_G8iUEF7k,11562
29
29
  voxcity/utils/material.py,sha256=Vt3IID5Ft54HNJcEC4zi31BCPqi_687X3CSp7rXaRVY,5907
30
- voxcity/utils/visualization.py,sha256=UJ2wyFFbuI6glZJ8adyiVtNlZFUgleC278S-r2OO33g,85240
30
+ voxcity/utils/visualization.py,sha256=SF8W7sqvBl3sZbB5noWCY9ic2D34Gq01VZYJ9NDNZ4Y,85237
31
31
  voxcity/utils/weather.py,sha256=CFPtoqRTajwMRswswDChwQ3BW1cGsnA3orgWHgz7Ehg,26304
32
- voxcity-0.4.4.dist-info/AUTHORS.rst,sha256=m82vkI5QokEGdcHof2OxK39lf81w1P58kG9ZNNAKS9U,175
33
- voxcity-0.4.4.dist-info/LICENSE,sha256=-hGliOFiwUrUSoZiB5WF90xXGqinKyqiDI2t6hrnam8,1087
34
- voxcity-0.4.4.dist-info/METADATA,sha256=73PRyC5f-BPeFk8FpmZvaUvUVYGVDqAHMK-_Rj_oQs0,25527
35
- voxcity-0.4.4.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
36
- voxcity-0.4.4.dist-info/top_level.txt,sha256=00b2U-LKfDllt6RL1R33MXie5MvxzUFye0NGD96t_8I,8
37
- voxcity-0.4.4.dist-info/RECORD,,
32
+ voxcity-0.4.5.dist-info/AUTHORS.rst,sha256=m82vkI5QokEGdcHof2OxK39lf81w1P58kG9ZNNAKS9U,175
33
+ voxcity-0.4.5.dist-info/LICENSE,sha256=-hGliOFiwUrUSoZiB5WF90xXGqinKyqiDI2t6hrnam8,1087
34
+ voxcity-0.4.5.dist-info/METADATA,sha256=YDINX8e1EqSKFcCMTlPdFYj-wrWH7zIazT1fE89MkrQ,25527
35
+ voxcity-0.4.5.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
36
+ voxcity-0.4.5.dist-info/top_level.txt,sha256=00b2U-LKfDllt6RL1R33MXie5MvxzUFye0NGD96t_8I,8
37
+ voxcity-0.4.5.dist-info/RECORD,,