def load_netcdf_array(datafile, meta, layer_specs=None):
'''
Loads metadata for NetCDF
Parameters:
:datafile: str: Path on disk to NetCDF file
:meta: dict: netcdf metadata object
:variables: dict<str:str>, list<str>: list of variables to load
Returns:
:new_es: xr.Dataset
'''
logger.debug('load_netcdf_array: {}'.format(datafile))
ds = xr.open_dataset(datafile)
if layer_specs:
data = []
if isinstance(layer_specs, dict):
data = { k: ds[getattr(v, 'name', v)] for k, v in layer_specs.items() }
layer_spec = tuple(layer_specs.values())[0]
if isinstance(layer_specs, (list, tuple)):
data = {getattr(v, 'name', v): ds[getattr(v, 'name', v)]
for v in layer_specs }
layer_spec = layer_specs[0]
data = OrderedDict(data)
else:
data = OrderedDict([(v, ds[v]) for v in meta['variables']])
layer_spec = None
geo_transform = take_geo_transform_from_meta(layer_spec=layer_spec,
required=True,
**meta)
for b, sub_dataset_name in zip(meta['layer_meta'], data):
b['geo_transform'] = meta['geo_transform'] = geo_transform
b['sub_dataset_name'] = sub_dataset_name
new_es = xr.Dataset(data,
coords=_normalize_coords(ds),
attrs=meta)
return new_es
评论列表
文章目录