Beispiel #1
0
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
Beispiel #2
0
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,
    )