in data-access/nexustiles/backends/zarr/backend.py [0:0]
def __fetch_data_for_tile(self, tile: Tile):
bbox: BBox = tile.bbox
min_lat = None
min_lon = None
max_lat = None
max_lon = None
min_time = tile.min_time
max_time = tile.max_time
# if min_time:
# min_time = datetime.utcfromtimestamp(min_time)
#
# if max_time:
# max_time = datetime.utcfromtimestamp(max_time)
if bbox:
min_lat = bbox.min_lat
min_lon = bbox.min_lon
max_lat = bbox.max_lat
max_lon = bbox.max_lon
sel_g = {
self.__latitude: slice(min_lat, max_lat),
self.__longitude: slice(min_lon, max_lon),
}
sel_t = {}
if min_time is None and max_time is None:
sel_t = None
method = None
elif min_time == max_time:
sel_t[self.__time] = [min_time] # List, otherwise self.__time dim will be dropped
method = 'nearest'
else:
sel_t[self.__time] = slice(min_time, max_time)
method = None
tile.variables = [
TileVariable(v, v) for v in self.__variables
]
matched = self.__ds.sel(sel_g)
if sel_t is not None:
matched = matched.sel(sel_t, method=method)
tile.latitudes = ma.masked_invalid(matched[self.__latitude].to_numpy())
tile.longitudes = ma.masked_invalid(matched[self.__longitude].to_numpy())
times = matched[self.__time].to_numpy()
if np.issubdtype(times.dtype, np.datetime64):
times = (times - np.datetime64(EPOCH)).astype('timedelta64[s]').astype(int)
tile.times = ma.masked_invalid(times)
var_data = [matched[var].to_numpy() for var in self.__variables]
if len(self.__variables) > 1:
tile.data = ma.masked_invalid(var_data)
tile.is_multi = True
else:
tile.data = ma.masked_invalid(var_data[0])
tile.is_multi = False