8
8
import pandas as pd
9
9
import shapely
10
10
import xarray as xr
11
+ from xarray .groupers import UniqueGrouper
11
12
12
13
13
14
def _agg_rasterize (groups , stats , ** kwargs ):
@@ -50,19 +51,32 @@ def _zonal_stats_rasterize(
50
51
crs = None
51
52
52
53
transform = acc ._obj .rio .transform ()
54
+ length = len (geometry )
55
+ dtype = np .int16 if length < np .iinfo (np .int16 ).max else np .int32
53
56
54
57
labels = features .rasterize (
55
- zip (geometry , range (len ( geometry ) ), strict = False ),
58
+ zip (geometry , range (length ), strict = False ),
56
59
out_shape = (
57
60
acc ._obj [y_coords ].shape [0 ],
58
61
acc ._obj [x_coords ].shape [0 ],
59
62
),
60
63
transform = transform ,
61
- fill = np . nan , # type: ignore
64
+ fill = length , # type: ignore
62
65
all_touched = all_touched ,
63
- dtype = np . float32 ,
66
+ dtype = dtype ,
64
67
)
65
- groups = acc ._obj .groupby (xr .DataArray (labels , dims = (y_coords , x_coords )))
68
+
69
+ unique = np .unique (labels ).tolist ()
70
+ unique .remove (length )
71
+
72
+ obj = acc ._obj .copy ()
73
+ if isinstance (obj , xr .Dataset ):
74
+ obj = obj .assign_coords (
75
+ __labels__ = xr .DataArray (labels , dims = (y_coords , x_coords ))
76
+ )
77
+ else :
78
+ obj ["__labels__" ] = xr .DataArray (labels , dims = (y_coords , x_coords ))
79
+ groups = obj .groupby ({"__labels__" : UniqueGrouper (labels = unique )})
66
80
67
81
if pd .api .types .is_list_like (stats ):
68
82
agg = {}
@@ -89,10 +103,11 @@ def _zonal_stats_rasterize(
89
103
raise ValueError (f"{ stats } is not a valid aggregation." )
90
104
91
105
vec_cube = (
92
- agg_array .reindex (group = range (len (geometry )))
93
- .assign_coords (group = geometry )
94
- .rename (group = name )
95
- ).xvec .set_geom_indexes (name , crs = crs )
106
+ agg_array .reindex (__labels__ = range (length ))
107
+ .assign_coords (__labels__ = geometry )
108
+ .rename (__labels__ = name )
109
+ .xvec .set_geom_indexes (name , crs = crs )
110
+ )
96
111
97
112
del groups
98
113
gc .collect ()
0 commit comments