Exemple #1
0
def render_tile_and_put_to_s3(tile_str, s3_bucket, key_prefix, source_adapter):
    tile_type, tile = parse_tile_str(tile_str)
    render_data = RENDER_COMBINATIONS.get(tile_type)

    if not render_data:
        logger.error("Could not parse tile string %s", tile_str)

    (transformation, format, suffix) = render_data
    key = "{}/{}/{}/{}{}".format(
        tile_type,
        tile.z,
        tile.x,
        tile.y,
        suffix,
    )

    if key_prefix:
        key = key_prefix + '/' + key

    with Timer() as t:
        (headers, data) = tiling.render_tile(tile,
                                             source_adapter,
                                             format=format,
                                             transformation=transformation)
    logger.debug("Tile %s rendered in %0.3f", tile, t.elapsed)

    with Timer() as t:
        # Each thread needs its own boto3 Session object – it's not threadsafe
        session = boto3.session.Session()
        s3 = session.resource('s3')
        bucket = s3.Bucket(s3_bucket)

        obj = write_to_s3(bucket, key, data, headers, overwrite=True)
    logger.debug("Tile %s uploaded to s3://%s/%s in %0.3f", tile,
                 obj.bucket_name, obj.key, t.elapsed)
def render_tile_and_put_to_s3(tile, s3_details, sources):
    s3_bucket, s3_key_prefix = s3_details

    for (type, transformation, format, ext, scale) in RENDER_COMBINATIONS:
        if ONLY_RENDER and type not in ONLY_RENDER:
            logger.debug(
                '(%02d/%06d/%06d) Skipping render because '
                'type %s not in %s',
                tile.z,
                tile.x,
                tile.y,
                type,
                ONLY_RENDER,
            )
            continue

        key = s3_key(s3_key_prefix, type, tile, ext)
        obj = THREAD_LOCAL.s3.Object(s3_bucket, key)
        if not OVERWRITE and s3_obj_exists(obj):
            logger.debug(
                '(%02d/%06d/%06d) Skipping existing %s tile',
                tile.z,
                tile.x,
                tile.y,
                type,
            )
            continue

        with Timer() as t:
            (headers, data) = tiling.render_tile(tile,
                                                 sources,
                                                 format=format,
                                                 transformation=transformation,
                                                 scale=scale)

        logger.debug(
            '(%02d/%06d/%06d) Took %0.3fs to render %s tile (%s bytes), Source: %s, Timers: %s',
            tile.z,
            tile.x,
            tile.y,
            t.elapsed,
            type,
            len(data),
            headers.get('X-Imagery-Sources'),
            headers.get('X-Timers'),
        )

        with Timer() as t:
            obj = write_to_s3(obj, tile, type, data, ext, headers)

        logger.debug(
            '(%02d/%06d/%06d) Took %0.3fs to write %s tile to s3://%s/%s',
            tile.z,
            tile.x,
            tile.y,
            t.elapsed,
            type,
            obj.bucket_name,
            obj.key,
        )
Exemple #3
0
def render_tif(z, x, y):
    tile = Tile(x, y, z)

    headers, data = tiling.render_tile(tile, CATALOG, format=GEOTIFF_FORMAT)

    headers.update(CATALOG.headers)

    return data, 200, headers
Exemple #4
0
def render_geotiff(z, x, y, **kwargs):
    tile = Tile(x, y, z)

    headers, data = tiling.render_tile(
        tile,
        ELEVATION_CATALOG,
        format=GEOTIFF_FORMAT,
        scale=2,
        data_band_count=1)

    return data, 200, headers
Exemple #5
0
def render_hillshade_tiff(z, x, y, **kwargs):
    tile = Tile(x, y, z)

    headers, data = tiling.render_tile(
        tile,
        CATALOGS['hillshade'],
        format=HILLSHADE_GEOTIFF_FORMAT,
        transformation=HILLSHADE_TRANSFORMATION,
        scale=2,
        data_band_count=1)

    return data, 200, headers
Exemple #6
0
def render_png(renderer, z, x, y, scale=1, **kwargs):
    tile = Tile(x, y, z)

    headers, data = tiling.render_tile(
        tile,
        CATALOGS[renderer],
        format=FORMATS[renderer],
        transformation=TRANSFORMATIONS.get(renderer),
        scale=scale,
        data_band_count=DATA_BAND_COUNTS.get(renderer, 1))

    return data, 200, headers
Exemple #7
0
def render_png(z, x, y, scale=1):
    tile = Tile(x, y, z)

    headers, data = tiling.render_tile(
        tile,
        CATALOG,
        format=IMAGE_FORMAT,
        transformation=COLORMAP_TRANSFORMATION,
        scale=scale,
    )

    headers.update(CATALOG.headers)

    return data, 200, headers
Exemple #8
0
def render_png(z, x, y, scale=1):
    catalog = make_catalog(request.args)
    tile = Tile(x, y, z)

    headers, data = tiling.render_tile(
        tile,
        catalog,
        format=IMAGE_FORMAT,
        transformation=IMAGE_TRANSFORMATION,
        scale=scale,
    )

    headers.update(catalog.headers)

    return data, 200, headers
Exemple #9
0
def user_render(id, z, x, y, scale=1, prefix=None):
    catalog = make_remote_catalog("user", id)
    tile = Tile(x, y, z)

    headers, data = tiling.render_tile(
        tile,
        catalog,
        format=OPTIMAL_FORMAT,
        transformation=IMAGE_TRANSFORMATION,
        scale=scale,
    )

    headers.update(catalog.headers)

    return data, 200, headers
Exemple #10
0
def render_json(z, x, y, scale=1):
    tile = Tile(x, y, z)

    sieve = int(request.args.get("sieve", 4))

    headers, data = tiling.render_tile(
        tile,
        CATALOG,
        format=GeoJSON(sieve_size=sieve),
        transformation=Transformation(collar=8 * scale),
        scale=scale,
    )

    headers.update(CATALOG.headers)

    return data, 200, headers
def render_png_from_remote(id, z, x, y, scale=1, prefix=None):
    # prefix is for URL generation only (API Gateway stages); if it matched the
    # URL, it's part of the id
    if prefix is not None:
        id = "/".join([prefix, id])

    catalog = make_remote_catalog(id)
    tile = Tile(x, y, z)

    headers, data = tiling.render_tile(tile,
                                       catalog,
                                       format=PNG_FORMAT,
                                       transformation=IMAGE_TRANSFORMATION,
                                       scale=scale)

    headers.update(catalog.headers)

    return data, 200, headers
def render_tile(
    format,
    output,
    scale,
    transformation,
    tile,
):
    z, x, y = map(int, tile.split("/"))
    tile = Tile(x, y, z)

    (headers, data) = tiling.render_tile(
        tile,
        PostGISCatalog(),
        format=FORMATS[format],
        transformation=TRANSFORMATIONS.get(transformation),
        scale=scale)

    [click.echo("{}: {}".format(k, v), err=True) for k, v in headers.items()]

    output.write(data)
def render_tile(tile, sources, output):
    for (type, transformation, format, ext) in RENDER_COMBINATIONS:

        with Timer() as t:
            (headers, data) = tiling.render_tile(tile,
                                                 sources,
                                                 format=format,
                                                 transformation=transformation)

        logger.debug(
            '(%02d/%06d/%06d) Took %0.3fs to render %s tile (%s bytes), Source: %s, Timers: %s',
            tile.z,
            tile.x,
            tile.y,
            t.elapsed,
            type,
            len(data),
            headers.get('X-Imagery-Sources'),
            headers.get('X-Timers'),
        )

        MBTILES_POOL.apply_async(write_to_mbtiles,
                                 args=[type, tile, headers, data, output])
Exemple #14
0
# coding=utf-8
from __future__ import print_function

import logging

from marblecutter import tiling
from marblecutter.catalogs.postgis import PostGISCatalog
from marblecutter.formats.geotiff import GeoTIFF
from mercantile import Tile

logging.basicConfig(level=logging.INFO)

if __name__ == "__main__":
    tile = Tile(324, 787, 11)
    (headers, data) = tiling.render_tile(
        tile, PostGISCatalog(), format=GeoTIFF(area_or_point="Point"), scale=2)

    print("headers: ", headers)

    with open("tmp/11_324_787.tif", "w") as f:
        f.write(data)
from mercantile import Tile

from marblecutter import tiling
from marblecutter.catalogs.postgis import PostGISCatalog
from marblecutter.formats.png import PNG
from tilezen.transformations import Normal

logging.basicConfig(level=logging.INFO)

if __name__ == "__main__":
    zoom = 2

    tile = Tile(0, 0, zoom)
    (headers, data) = tiling.render_tile(tile,
                                         PostGISCatalog(),
                                         format=PNG(),
                                         transformation=Normal(collar=2),
                                         scale=2)

    print("Headers: ", headers)

    with open(
            "tmp/{}_{}_{}_buffered_normal.png".format(tile.z, tile.x, tile.y),
            "w") as f:
        f.write(data)

    tile = Tile(0, 2**zoom - 1, zoom)
    (headers, data) = tiling.render_tile(tile,
                                         PostGISCatalog(),
                                         format=PNG(),
                                         transformation=Normal(collar=2),
Exemple #16
0
# coding=utf-8
from __future__ import print_function

import logging

from mercantile import Tile

from marblecutter import tiling
from marblecutter.catalogs.postgis import PostGISCatalog
from marblecutter.formats.png import PNG
from tilezen.transformations import Terrarium

logging.basicConfig(level=logging.INFO)

if __name__ == "__main__":
    tile = Tile(324, 787, 11)
    (headers, data) = tiling.render_tile(tile,
                                         PostGISCatalog(),
                                         format=PNG(),
                                         transformation=Terrarium(),
                                         scale=2)

    print("Headers: ", headers)

    with open("tmp/11_324_787_terrarium.png", "w") as f:
        f.write(data)
from marblecutter import tiling
from marblecutter.catalogs.postgis import PostGISCatalog
from marblecutter.formats.color_ramp import ColorRamp
from marblecutter.formats.geotiff import GeoTIFF
from tilezen.transformations import Hillshade

logging.basicConfig(level=logging.INFO)

if __name__ == "__main__":
    tile = Tile(1308, 3164, 13)

    hillshade = Hillshade(resample=True, add_slopeshade=True)
    (headers, data) = tiling.render_tile(tile,
                                         PostGISCatalog(),
                                         format=GeoTIFF(),
                                         transformation=hillshade,
                                         scale=1)

    print("Headers: ", headers)

    with open("tmp/{}_{}_{}_hillshade.tif".format(tile.z, tile.x, tile.y),
              "w") as f:
        f.write(data)

    (headers, data) = tiling.render_tile(tile,
                                         PostGISCatalog(),
                                         format=GeoTIFF())

    print("Headers: ", headers)