Skip to content

Commit e5760fa

Browse files
committed
precompute chunks for RasterDataset
1 parent d353f15 commit e5760fa

File tree

1 file changed

+10
-10
lines changed

1 file changed

+10
-10
lines changed

src/raster/array.jl

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,10 @@ us to be able to index into it like we would an array.
2121
Constructing a RasterDataset will error if the raster bands do not have all the
2222
same size and a common element data type.
2323
"""
24-
struct RasterDataset{T,DS<:AbstractDataset} <: AbstractDiskArray{T,3}
24+
struct RasterDataset{T,DS<:AbstractDataset,C} <: AbstractDiskArray{T,3}
2525
ds::DS
2626
size::Tuple{Int,Int,Int}
27+
chunks::C
2728
end
2829

2930
function RasterDataset(
@@ -33,7 +34,12 @@ function RasterDataset(
3334
throw(ArgumentError("The Dataset does not contain any raster bands"))
3435
end
3536
s = _common_size(ds)
36-
return RasterDataset{pixeltype(ds),typeof(ds)}(ds, s)
37+
subchunks = DiskArrays.eachchunk(getband(ds, 1))
38+
chunks = DiskArrays.GridChunks(
39+
subchunks.chunks...,
40+
DiskArrays.RegularChunks(1, 0, s[3]),
41+
)
42+
return RasterDataset{pixeltype(ds),typeof(ds),typeof(chunks)}(ds, s, chunks)
3743
end
3844

3945
# Forward a few functions
@@ -138,14 +144,8 @@ indexing.
138144
readraster(s::String; kwargs...)::RasterDataset =
139145
RasterDataset(read(s; kwargs...))
140146

141-
function DiskArrays.eachchunk(ds::RasterDataset)::DiskArrays.GridChunks
142-
subchunks = DiskArrays.eachchunk(getband(ds, 1))
143-
return DiskArrays.GridChunks(
144-
subchunks.chunks...,
145-
DiskArrays.RegularChunks(1, 0, size(ds, 3)),
146-
)
147-
end
148-
147+
DiskArrays.eachchunk(ds::RasterDataset)::DiskArrays.GridChunks =
148+
ds.chunks
149149
DiskArrays.haschunks(::RasterDataset)::DiskArrays.Chunked = DiskArrays.Chunked()
150150
DiskArrays.haschunks(::AbstractRasterBand)::DiskArrays.Chunked =
151151
DiskArrays.Chunked()

0 commit comments

Comments
 (0)