def expression(sceneid, tile_x, tile_y, tile_z, expr, **kwargs): """ """ bands_names = tuple(set(re.findall(r'b(?P<bands>[0-9A]{1,2})', expr))) rgb = expr.split(',') if sceneid.startswith('L'): from rio_tiler.landsat8 import tile as l8_tile arr, mask = l8_tile(sceneid, tile_x, tile_y, tile_z, bands=bands_names, **kwargs) elif sceneid.startswith('S2'): from rio_tiler.sentinel2 import tile as s2_tile arr, mask = s2_tile(sceneid, tile_x, tile_y, tile_z, bands=bands_names, **kwargs) elif sceneid.startswith('CBERS'): from rio_tiler.cbers import tile as cbers_tile arr, mask = cbers_tile(sceneid, tile_x, tile_y, tile_z, bands=bands_names, **kwargs) else: from rio_tiler.main import tile as main_tile bands = tuple(map(int, bands_names)) arr, mask = main_tile(sceneid, tile_x, tile_y, tile_z, indexes=bands, **kwargs) ctx = {} for bdx, b in enumerate(bands_names): ctx['b{}'.format(b)] = arr[bdx] return np.array([np.nan_to_num(ne.evaluate(bloc.strip(), local_dict=ctx)) for bloc in rgb]), mask
def expression(sceneid, tile_x, tile_y, tile_z, expr=None, **kwargs): """ Apply expression on data. Attributes ---------- sceneid : str Landsat id, Sentinel id, CBERS ids or file url. tile_x : int Mercator tile X index. tile_y : int Mercator tile Y index. tile_z : int Mercator tile ZOOM level. expr : str, required Expression to apply (e.g '(B5+B4)/(B5-B4)') Band name should start with 'B'. Returns ------- out : ndarray Returns processed pixel value. """ if not expr: raise Exception("Missing expression") bands_names = tuple( sorted(set(re.findall(r"b(?P<bands>[0-9A]{1,2})", expr)))) rgb = expr.split(",") if sceneid.startswith("L"): from rio_tiler.landsat8 import tile as l8_tile arr, mask = l8_tile(sceneid, tile_x, tile_y, tile_z, bands=bands_names, **kwargs) elif sceneid.startswith("S2"): from rio_tiler.sentinel2 import tile as s2_tile arr, mask = s2_tile(sceneid, tile_x, tile_y, tile_z, bands=bands_names, **kwargs) elif sceneid.startswith("CBERS"): from rio_tiler.cbers import tile as cbers_tile arr, mask = cbers_tile(sceneid, tile_x, tile_y, tile_z, bands=bands_names, **kwargs) else: from rio_tiler.main import tile as main_tile bands = tuple(map(int, bands_names)) arr, mask = main_tile(sceneid, tile_x, tile_y, tile_z, indexes=bands, **kwargs) bands_names = ["b{}".format(b) for b in bands_names] arr = dict(zip(bands_names, arr)) return ( np.array([ np.nan_to_num(ne.evaluate(bloc.strip(), local_dict=arr)) for bloc in rgb ]), mask, )