2222
2323from pyinterpolate .distance .angular import calc_angles
2424from pyinterpolate .distance .point import point_distance
25- from pyinterpolate .transform .geo import points_to_lon_lat , largest_geometry
25+ from pyinterpolate .transform .geo import points_to_lon_lat , largest_geometry , \
26+ join_geometry_and_values
2627
2728
28- # TODO: if multipolygon then get coordinates /
29- # representative points from the largest block - as an option
3029class Blocks :
3130 """Class represents aggregated blocks data.
3231
3332 Parameters
3433 ----------
35- ds : gpd.GeoDataFrame
36- Dataset with block values.
34+ ds : gpd.GeoDataFrame, optional
35+ Dataset with block values. Must be provided if ``values`` and
36+ ``geometry`` parameters are not given.
3737
38- value_column_name : Any
39- Name of the column with block rates.
38+ values : ArrayLike, optional
39+ Aggregated values of each block. Optional parameter, if not
40+ given then ``ds`` must be provided.
41+
42+ geometries : ArrayLike, optional
43+ Array or similar structure with geometries. It must have the same
44+ length as ``values``. Optional parameter, if not given then ``ds``
45+ must be provided.
46+
47+ value_column_name : Any, optional
48+ Name of the column with block rates. Must be provided when
49+ the ``ds`` parameter is given, otherwise it is set to 'values' if
50+ not provided.
4051
4152 geometry_column_name : Any, default = 'geometry'
4253 Name of the column with a block geometry.
@@ -177,16 +188,18 @@ class Blocks:
177188 """
178189
179190 def __init__ (self ,
180- ds : gpd .GeoDataFrame ,
181- value_column_name ,
182- geometry_column_name = 'geometry' ,
183- index_column_name = None ,
184- representative_points_column_name = None ,
185- representative_points_from_centroid = False ,
186- representative_points_from_random_sample = False ,
187- representative_points_from_largest_area = True ,
188- distances_between_representative_points = True ,
189- angles_between_representative_points = False ):
191+ ds : gpd .GeoDataFrame = None ,
192+ values : ArrayLike = None ,
193+ geometries : ArrayLike = None ,
194+ value_column_name : str = None ,
195+ geometry_column_name = 'geometry' ,
196+ index_column_name = None ,
197+ representative_points_column_name = None ,
198+ representative_points_from_centroid = False ,
199+ representative_points_from_random_sample = False ,
200+ representative_points_from_largest_area = True ,
201+ distances_between_representative_points = True ,
202+ angles_between_representative_points = False ):
190203
191204 # Helper params
192205 self ._lon_col_name = 'lon'
@@ -202,7 +215,15 @@ def __init__(self,
202215 self ._rep_ps_sample = representative_points_from_random_sample
203216 self ._rep_ps_largest_area = representative_points_from_largest_area
204217
205- self .ds = ds .copy (deep = True )
218+ if ds is not None :
219+ self .ds = ds .copy (deep = True )
220+ else :
221+ if value_column_name is None :
222+ value_column_name = 'values'
223+ self .ds = join_geometry_and_values (geometry = geometries ,
224+ values = values ,
225+ values_column_name = value_column_name )
226+
206227 self .value_column_name = value_column_name
207228 self .index_column_name = index_column_name
208229 self .geometry_column_name = geometry_column_name
0 commit comments