130 lines
3.5 KiB
Python
130 lines
3.5 KiB
Python
"""The rio merge CLI command."""
|
|
|
|
import warnings
|
|
|
|
import click
|
|
|
|
from rasterio.enums import Resampling
|
|
from rasterio.errors import RasterioDeprecationWarning
|
|
from rasterio.rio import options
|
|
from rasterio.rio.helpers import resolve_inout
|
|
from rasterio.merge import MERGE_METHODS
|
|
|
|
|
|
def deprecated_precision(ctx, param, value):
|
|
if value is not None:
|
|
warnings.warn(
|
|
"The --precision option is unused, deprecated, and will be removed in 2.0.0.",
|
|
RasterioDeprecationWarning,
|
|
)
|
|
return None
|
|
|
|
|
|
@click.command(short_help="Merge a stack of raster datasets.")
|
|
@options.files_inout_arg
|
|
@options.output_opt
|
|
@options.format_opt
|
|
@options.bounds_opt
|
|
@options.resolution_opt
|
|
@click.option('--resampling',
|
|
type=click.Choice([r.name for r in Resampling if r.value <= 7]),
|
|
default='nearest', help="Resampling method.",
|
|
show_default=True)
|
|
@click.option('--method',
|
|
type=click.Choice(list(MERGE_METHODS)),
|
|
default='first', help="Merging strategy.",
|
|
show_default=True)
|
|
@options.nodata_opt
|
|
@options.dtype_opt
|
|
@options.bidx_mult_opt
|
|
@options.overwrite_opt
|
|
@click.option(
|
|
"--precision",
|
|
type=int,
|
|
default=None,
|
|
callback=deprecated_precision,
|
|
help="Unused, deprecated, and will be removed in 2.0.0.",
|
|
)
|
|
@click.option(
|
|
"--target-aligned-pixels/--no-target-aligned-pixels",
|
|
default=False,
|
|
help="Align the output bounds based on the resolution.",
|
|
)
|
|
@click.option(
|
|
"--mem-limit",
|
|
type=int,
|
|
default=64,
|
|
help="Limit on memory used to perform calculations, in MB.",
|
|
)
|
|
@click.option(
|
|
"--use-highest-res/--use-first-res",
|
|
default=False,
|
|
help="Use the highest resolution of sources or the resolution of the first source argument.",
|
|
)
|
|
@options.creation_options
|
|
@click.pass_context
|
|
def merge(
|
|
ctx,
|
|
files,
|
|
output,
|
|
driver,
|
|
bounds,
|
|
res,
|
|
resampling,
|
|
method,
|
|
nodata,
|
|
dtype,
|
|
bidx,
|
|
overwrite,
|
|
precision,
|
|
target_aligned_pixels,
|
|
mem_limit,
|
|
use_highest_res,
|
|
creation_options,
|
|
):
|
|
"""Copy valid pixels from input files to an output file.
|
|
|
|
All files must have the same number of bands, data type, and
|
|
coordinate reference system. Rotated rasters cannot be merged.
|
|
|
|
Input files are merged in their listed order using the reverse
|
|
painter's algorithm. If the output file exists, its values will be
|
|
overwritten by input values.
|
|
|
|
Geospatial bounds and resolution of a new output file in the
|
|
units of the input file coordinate reference system may be provided
|
|
and are otherwise taken from the first input file.
|
|
|
|
Note: --res changed from 2 parameters in 0.25.
|
|
|
|
\b
|
|
--res 0.1 0.1 => --res 0.1 (square)
|
|
--res 0.1 0.2 => --res 0.1 --res 0.2 (rectangular)
|
|
|
|
"""
|
|
from rasterio.merge import merge as merge_tool
|
|
|
|
output, files = resolve_inout(
|
|
files=files, output=output, overwrite=overwrite)
|
|
|
|
resampling = Resampling[resampling]
|
|
if driver:
|
|
creation_options.update(driver=driver)
|
|
|
|
with ctx.obj["env"]:
|
|
merge_tool(
|
|
files,
|
|
bounds=bounds,
|
|
res=res,
|
|
nodata=nodata,
|
|
dtype=dtype,
|
|
indexes=(bidx or None),
|
|
resampling=resampling,
|
|
method=method,
|
|
target_aligned_pixels=target_aligned_pixels,
|
|
mem_limit=mem_limit,
|
|
use_highest_res=use_highest_res,
|
|
dst_path=output,
|
|
dst_kwds=creation_options,
|
|
)
|