From c0fce593d0e98aba5f50f19a0a921e3c70d23034 Mon Sep 17 00:00:00 2001 From: Dan Schoppe Date: Mon, 14 Jul 2025 17:22:44 -0500 Subject: [PATCH 1/3] Add aoi argument to Reader::tile() to support clipped tiles --- rio_tiler/io/rasterio.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/rio_tiler/io/rasterio.py b/rio_tiler/io/rasterio.py index 2e2c1008..adb8e5cb 100644 --- a/rio_tiler/io/rasterio.py +++ b/rio_tiler/io/rasterio.py @@ -38,6 +38,7 @@ from rio_tiler.utils import ( CRS_to_uri, _validate_shape_input, + create_cutline, has_alpha_band, has_mask_band, ) @@ -254,6 +255,7 @@ def tile( tile_y: int, tile_z: int, tilesize: int = 256, + aoi: Optional[Dict] = None, indexes: Optional[Indexes] = None, expression: Optional[str] = None, buffer: Optional[float] = None, @@ -280,6 +282,11 @@ def tile( f"Tile(x={tile_x}, y={tile_y}, z={tile_z}) is outside bounds" ) + vrt_options = kwargs.pop("vrt_options", {}) + if aoi is not None: + cutline = create_cutline(self.dataset, aoi, geometry_crs="epsg:4326") + vrt_options.update({"cutline": cutline}) + return self.part( tuple(self.tms.xy_bounds(Tile(x=tile_x, y=tile_y, z=tile_z))), dst_crs=self.tms.rasterio_crs, @@ -290,6 +297,7 @@ def tile( indexes=indexes, expression=expression, buffer=buffer, + vrt_options=vrt_options, **kwargs, ) From 6a524608a8224bc9d95ff672574502478ed1b99d Mon Sep 17 00:00:00 2001 From: Dan Schoppe Date: Thu, 7 Aug 2025 11:40:34 -0500 Subject: [PATCH 2/3] Add init_dest_nodata=False VRT param --- rio_tiler/reader.py | 1 + 1 file changed, 1 insertion(+) diff --git a/rio_tiler/reader.py b/rio_tiler/reader.py index 1006e3ca..25cdacf7 100644 --- a/rio_tiler/reader.py +++ b/rio_tiler/reader.py @@ -151,6 +151,7 @@ def read( "add_alpha": True, "resampling": warp_resampling, "dtype": src_dst.dtypes[0], + "init_dest_nodata": False, } if nodata is not None: From 9f37df109db235e65339fe80f5aeae9ea7dae792 Mon Sep 17 00:00:00 2001 From: Dan Schoppe Date: Thu, 7 Aug 2025 14:51:26 -0500 Subject: [PATCH 3/3] Conditionally add init_dest_nodata --- rio_tiler/reader.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/rio_tiler/reader.py b/rio_tiler/reader.py index 25cdacf7..1130b4bc 100644 --- a/rio_tiler/reader.py +++ b/rio_tiler/reader.py @@ -151,10 +151,15 @@ def read( "add_alpha": True, "resampling": warp_resampling, "dtype": src_dst.dtypes[0], - "init_dest_nodata": False, } - if nodata is not None: + if nodata is None: + vrt_params.update( + { + "init_dest_nodata": False + } + ) + else: vrt_params.update( { "nodata": nodata,