-
Notifications
You must be signed in to change notification settings - Fork 13
Closed
Description
Here is a reproducible example:
import xarray as xr
import numpy as np
import geopandas as gpd
from shapely.geometry import Point
x_coords = np.arange(500000, 500000 + 100 * 20, 20)
y_coords = np.arange(5500000, 5500000 + 100 * 20, 20)
# dummy Dataarray
test_da = xr.DataArray(
np.random.random((100, 100)),
coords={
'y': y_coords,
'x': x_coords
},
dims=['y', 'x'],
)
# dummy Dataset
test_ds = test_da.to_dataset(name='test_var')
test_gdf = gpd.GeoDataFrame({
'geometry': [Point(x, y) for x, y in zip(np.random.uniform(x_coords.min(), x_coords.max(), 5),
np.random.uniform(y_coords.min(), y_coords.max(), 5))]},
crs='EPSG:32632')
test_gdf['geometry_buffer'] = test_gdf.geometry.buffer(50)
Using the xarray.Dataset
works:
test_ds.xvec.zonal_stats(
test_gdf.geometry_buffer, x_coords="x", y_coords="y",
method='exactextract'
)
Using the xarray.Dataarray
doesn't work and raises ValueError: Must pass non-zero number of levels/codes
:
test_da.xvec.zonal_stats(
test_gdf.geometry_buffer, x_coords="x", y_coords="y",
method='exactextract'
)
arr_dims
in the following part is empty when a Dataarray is passed and that results in stack
to fail:
Lines 699 to 702 in 3ba5d0c
# Stack the other dimensions into one dimension called "location" | |
arr_dims = tuple(dim for dim in acc._obj.dims if dim not in [x_coords, y_coords]) | |
data = acc._obj.stack(location=arr_dims) | |
locs = data.location.size |
Metadata
Metadata
Assignees
Labels
No labels