From e5760fa012bf15da0b85046fa451ec0d577c9220 Mon Sep 17 00:00:00 2001 From: Rafael Schouten Date: Sun, 9 Feb 2025 02:46:36 +0100 Subject: [PATCH 1/2] precompute chunks for RasterDataset --- src/raster/array.jl | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/raster/array.jl b/src/raster/array.jl index b2eec3b6..18cfbcc6 100644 --- a/src/raster/array.jl +++ b/src/raster/array.jl @@ -21,9 +21,10 @@ us to be able to index into it like we would an array. Constructing a RasterDataset will error if the raster bands do not have all the same size and a common element data type. """ -struct RasterDataset{T,DS<:AbstractDataset} <: AbstractDiskArray{T,3} +struct RasterDataset{T,DS<:AbstractDataset,C} <: AbstractDiskArray{T,3} ds::DS size::Tuple{Int,Int,Int} + chunks::C end function RasterDataset( @@ -33,7 +34,12 @@ function RasterDataset( throw(ArgumentError("The Dataset does not contain any raster bands")) end s = _common_size(ds) - return RasterDataset{pixeltype(ds),typeof(ds)}(ds, s) + subchunks = DiskArrays.eachchunk(getband(ds, 1)) + chunks = DiskArrays.GridChunks( + subchunks.chunks..., + DiskArrays.RegularChunks(1, 0, s[3]), + ) + return RasterDataset{pixeltype(ds),typeof(ds),typeof(chunks)}(ds, s, chunks) end # Forward a few functions @@ -138,14 +144,8 @@ indexing. readraster(s::String; kwargs...)::RasterDataset = RasterDataset(read(s; kwargs...)) -function DiskArrays.eachchunk(ds::RasterDataset)::DiskArrays.GridChunks - subchunks = DiskArrays.eachchunk(getband(ds, 1)) - return DiskArrays.GridChunks( - subchunks.chunks..., - DiskArrays.RegularChunks(1, 0, size(ds, 3)), - ) -end - +DiskArrays.eachchunk(ds::RasterDataset)::DiskArrays.GridChunks = + ds.chunks DiskArrays.haschunks(::RasterDataset)::DiskArrays.Chunked = DiskArrays.Chunked() DiskArrays.haschunks(::AbstractRasterBand)::DiskArrays.Chunked = DiskArrays.Chunked() From e1b8d101059574b2db900ccbde9ce497d1c4dcaf Mon Sep 17 00:00:00 2001 From: Yeesian Ng Date: Sun, 9 Feb 2025 16:27:18 -0800 Subject: [PATCH 2/2] Update src/raster/array.jl Co-authored-by: Rafael Schouten --- src/raster/array.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/raster/array.jl b/src/raster/array.jl index 18cfbcc6..41a9fe7e 100644 --- a/src/raster/array.jl +++ b/src/raster/array.jl @@ -21,7 +21,7 @@ us to be able to index into it like we would an array. Constructing a RasterDataset will error if the raster bands do not have all the same size and a common element data type. """ -struct RasterDataset{T,DS<:AbstractDataset,C} <: AbstractDiskArray{T,3} +struct RasterDataset{T,DS<:AbstractDataset,C<:DiskArrays.GridChunks} <: AbstractDiskArray{T,3} ds::DS size::Tuple{Int,Int,Int} chunks::C