Example #1
0
def execute(bbox: BBOX, run_id: str, args: Dict[str, object] = dict()) -> None:
    xyz_result = xyz_provisioner(
        bbox,
        args["xyz_url"],
        ZOOM_MIN,
        ZOOM_MAX,
        ["image/png", "image/jpeg"],
        OUTPUT_FORMAT,
    )
    tmp_dir = get_run_data_path(run_id, (NAME, ))
    tmp_tile_paths = list()
    logging.info(
        f"Copying {len(xyz_result.tile_paths)} {NAME} tiles to tmp dir for edge clipping"
    )
    for tile_path in xyz_result.tile_paths:
        tmp_tile_path = tile_path.replace(xyz_result.tile_dir, tmp_dir)
        tmp_tile_paths.append(tmp_tile_path)
        os.makedirs(os.path.dirname(tmp_tile_path), exist_ok=True)
        copyfile(tile_path, tmp_tile_path)
    transparent_clip_to_bbox(
        [
            os.path.join(tmp_dir, tile_path)
            for tile_path in get_edge_tiles(tmp_dir)
        ],
        bbox,
    )
    add_or_update(tmp_dir, get_result_path((NAME, )))
def add_or_update(source_dir: str, dest_dir: str):
    logging.info(
        "Searching existing tiles for edge overlaps and stitching if necessary"
    )
    edge_tiles = get_edge_tiles(source_dir)
    existing_edge_tiles = [
        edge_tile for edge_tile in edge_tiles
        if os.path.exists(os.path.join(dest_dir, edge_tile))
    ]
    if len(existing_edge_tiles) > 0:
        logging.info(f"Stitching {len(existing_edge_tiles)} tile(s)")

        def stitch(edge_tile):
            new_edge_tile_path = os.path.join(source_dir, edge_tile)
            merge_tiles(
                os.path.join(dest_dir, edge_tile),
                new_edge_tile_path,
                new_edge_tile_path,
            )

        ThreadPool(int(os.environ.get("TILE_STITCH_CONCURRENCY",
                                      4))).map(stitch, existing_edge_tiles)

    logging.info("Updating result directories with latest export")
    merge_dirs(source_dir, dest_dir)
Example #3
0
def execute(
        bbox: BBOX,
        run_id: str,
        xyz_url: str,
        profile_name: str,
        layers: List[ProjectLayer],
        extra_styles: List[str] = list(),
) -> None:
    xyz_result = xyz_provisioner(bbox, xyz_url, ZOOM_MIN, ZOOM_MAX,
                                 ["image/png", "image/jpeg"], OUTPUT_FORMAT)
    generate_result = generate_tiles(
        layers,
        ["common", profile_name] + extra_styles,
        bbox,
        profile_name,
        ZOOM_MIN,
        ZOOM_MAX,
        run_id,
    )
    xyz_tiles_merged = list()
    logging.info(
        f"Merging {len(generate_result.tile_paths)} generated tile(s) to xyz base"
    )
    path_tuples = [(
        data_tile.replace(generate_result.tile_dir, xyz_result.tile_dir),
        data_tile,
        data_tile,
    ) for data_tile in generate_result.tile_paths]
    merge_tiles(path_tuples)
    xyz_tiles_merged = [path_tuple[0] for path_tuple in path_tuples]
    logging.info("Collecting non-generated xyz tiles")
    for xyz_tile in xyz_result.tile_paths:
        if xyz_tile not in xyz_tiles_merged:
            xyz_copy_path = xyz_tile.replace(xyz_result.tile_dir,
                                             generate_result.tile_dir)
            os.makedirs(os.path.dirname(xyz_copy_path), exist_ok=True)
            copyfile(xyz_tile, xyz_copy_path)
    transparent_clip_to_bbox(
        [
            os.path.join(generate_result.tile_dir, tile_path)
            for tile_path in get_edge_tiles(generate_result.tile_dir)
        ],
        bbox,
    )
    logging.info("Transferring combined tile set to result directory")
    add_or_update(generate_result.tile_dir, get_result_path((profile_name, )))
def execute(bbox: BBOX, run_id: str, args: Dict[str, object] = dict()) -> None:
    layers = (canvec(
        bbox,
        run_id,
        (9244667, 4622334, 2311167, 1155583, 577792, 288896, 144448, 72224,
         36112),
    ) + bc_topo(bbox, run_id) + bc_hillshade(bbox, run_id) +
              bc_resource_roads(bbox, run_id) + trails(bbox, run_id) +
              shelters(bbox, run_id))
    generate_result = generate_tiles(layers, ["common", "topo"], bbox, NAME,
                                     ZOOM_MIN, ZOOM_MAX, run_id)
    transparent_clip_to_bbox(
        [
            os.path.join(generate_result.tile_dir, tile_path)
            for tile_path in get_edge_tiles(generate_result.tile_dir)
        ],
        bbox,
        False,
    )
    logging.info("Transferring generated tile set to result directory")
    add_or_update(generate_result.tile_dir, get_result_path((NAME, )), False)
def execute(bbox: BBOX, run_id: str, xyz_url: str, profile_name: str,
            layers: List[ProjectLayer]) -> None:
    xyz_result = xyz_provisioner(bbox, xyz_url, ZOOM_MIN, ZOOM_MAX,
                                 "image/jpeg", OUTPUT_FORMAT)
    generate_result = generate_tiles(layers, ["common", profile_name], bbox,
                                     profile_name, ZOOM_MIN, ZOOM_MAX, run_id)
    xyz_tiles_merged = list()
    logging.info(
        f"Merging {len(generate_result.tile_paths)} generated tile(s) to xyz base"
    )
    for data_tile in generate_result.tile_paths:
        matching_raw_xyz_tile = data_tile.replace(generate_result.tile_dir,
                                                  xyz_result.tile_dir)
        logging.debug(
            f"Base tile {matching_raw_xyz_tile}, overlay {data_tile}")
        merge_tiles(
            matching_raw_xyz_tile,
            data_tile,
            data_tile,
        )
        xyz_tiles_merged.append(matching_raw_xyz_tile)
    logging.info("Collecting non-generated xyz tiles")
    for xyz_tile in xyz_result.tile_paths:
        if xyz_tile not in xyz_tiles_merged:
            xyz_copy_path = xyz_tile.replace(xyz_result.tile_dir,
                                             generate_result.tile_dir)
            os.makedirs(os.path.dirname(xyz_copy_path), exist_ok=True)
            copyfile(xyz_tile, xyz_copy_path)
    transparent_clip_to_bbox(
        [
            os.path.join(generate_result.tile_dir, tile_path)
            for tile_path in get_edge_tiles(generate_result.tile_dir)
        ],
        bbox,
    )
    logging.info("Transferring combined tile set to result directory")
    add_or_update(generate_result.tile_dir, get_result_path((profile_name, )))
def add_or_update(source_dir: str, dest_dir: str, quantize: bool = True):
    logging.info(
        "Searching existing tiles for edge overlaps and stitching if necessary"
    )
    edge_tiles = get_edge_tiles(source_dir)
    existing_edge_tiles = [
        edge_tile
        for edge_tile in edge_tiles
        if os.path.exists(os.path.join(dest_dir, edge_tile))
    ]
    if len(existing_edge_tiles) > 0:
        logging.info(f"Stitching {len(existing_edge_tiles)} tile(s)")
        path_tuples = [
            (
                os.path.join(dest_dir, edge_tile),
                os.path.join(source_dir, edge_tile),
                os.path.join(source_dir, edge_tile),
            )
            for edge_tile in existing_edge_tiles
        ]
        merge_tiles(path_tuples, quantize)

    logging.info("Updating result directories with latest export")
    merge_dirs(source_dir, dest_dir)