Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ Aqua = "0.8"
ArchGDAL = "0.9, 0.10"
CFTime = "0.1"
ColorTypes = "0.10, 0.11, 0.12"
CommonDataModel = "0.2.3, 0.3"
CommonDataModel = "0.3.10"
ConstructionBase = "1"
CoordinateTransformations = "0.6.2"
DataFrames = "1"
Expand Down
2 changes: 1 addition & 1 deletion ext/RastersArchGDALExt/gdal_source.jl
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ RA._open(f, ::GDALsource, A::AG.RasterDataset; mod=RA.NoMod(), kw...) =
# These methods are type piracy on DimensionalData/ArchGDAL and may have to move some day

# We allow passing in crs and mappedcrs manually
function RA._dims(raster::AG.RasterDataset, crs=nokw, mappedcrs=nokw)
function RA._dims(raster::AG.RasterDataset, crs=nokw, mappedcrs=nokw, prefer_datetime=true)
gt_dims = try
AG.getgeotransform(raster)
catch
Expand Down
3 changes: 2 additions & 1 deletion src/array.jl
Original file line number Diff line number Diff line change
Expand Up @@ -353,6 +353,7 @@ function _raster(ds;
raw::Bool=false,
mod=nokw,
f=identity,
prefer_datetime=true,
)::Raster
_maybe_warn_replace_missing(replace_missing)
# `raw` option will ignore `scaled` and `missingval`
Expand Down Expand Up @@ -381,7 +382,7 @@ function _raster(ds;
Array(modvar)
end
# Generate dims
dims_out = isnokw(dims) ? _dims(var, crs, mappedcrs) : format(dims, data_out)
dims_out = isnokw(dims) ? _dims(var, crs, mappedcrs, prefer_datetime) : format(dims, data_out)
# Return the data to the parent function
mv_outer = _outer_missingval(mod)
data_out, dims_out, metadata_out, mv_outer
Expand Down
18 changes: 11 additions & 7 deletions src/sources/commondatamodel.jl
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@ defaultmappedcrs(::CDMsource) = EPSG(4326)

function _nondimnames(ds)
dimnames = CDM.dimnames(ds)
isempty(dimnames) && return String[]
toremove = if "bnds" in dimnames
dimnames = setdiff(dimnames, ("bnds",))
boundsnames = String[]
Expand All @@ -122,10 +123,13 @@ function _nondimnames(ds)
end
end
union(dimnames, boundsnames)::Vector{String}
elseif isempty(dimnames)
String[]
else
collect(dimnames)::Vector{String}
end
# Maybe this should be fixed in ZarrDatasets but it works with this patch.

nondim = collect(setdiff(keys(ds), toremove))
return nondim
end
Expand Down Expand Up @@ -158,10 +162,10 @@ function _layers(ds::AbstractDataset, names, group)
_layers(ds.group[group], names, nokw)
end

function _dims(var::AbstractVariable{<:Any,N}, crs=nokw, mappedcrs=nokw) where N
function _dims(var::AbstractVariable{<:Any,N}, crs=nokw, mappedcrs=nokw, prefer_datetime=true) where N
dimnames = CDM.dimnames(var)
ntuple(Val(N)) do i
_cdmdim(CDM.dataset(var), dimnames[i], crs, mappedcrs)
_cdmdim(CDM.dataset(var), dimnames[i], crs, mappedcrs, prefer_datetime)
end
end
_metadata(var::AbstractVariable; attr=CDM.attribs(var)) =
Expand Down Expand Up @@ -211,6 +215,7 @@ end
# TODO don't load all keys here with _layers
_name_or_firstname(ds::AbstractDataset, name) = Symbol(name)
function _name_or_firstname(ds::AbstractDataset, name::Union{Nothing,NoKW}=nokw)

names = _nondimnames(ds)
if length(names) > 0
return Symbol(first(names))
Expand All @@ -219,11 +224,11 @@ function _name_or_firstname(ds::AbstractDataset, name::Union{Nothing,NoKW}=nokw)
end
end

function _cdmdim(ds, dimname::Key, crs=nokw, mappedcrs=nokw)
function _cdmdim(ds, dimname::Key, crs=nokw, mappedcrs=nokw, prefer_datetime=true)
if haskey(ds, dimname)
var = ds[dimname]
D = _cdmdimtype(CDM.attribs(var), dimname)
lookup = _cdmlookup(ds, dimname, D, crs, mappedcrs)
lookup = _cdmlookup(ds, dimname, D, crs, mappedcrs, prefer_datetime)
return D(lookup)
else
# The var doesn't exist. Maybe its `complex` or some other marker,
Expand Down Expand Up @@ -270,8 +275,8 @@ end

# _cdmlookup
# Generate a `Lookup` from a nCDM dim.
function _cdmlookup(ds::AbstractDataset, dimname, D::Type, crs, mappedcrs)
var = ds[dimname]
function _cdmlookup(ds::AbstractDataset, dimname, D::Type, crs, mappedcrs, prefer_datetime)
var = CDM.cfvariable(ds, dimname;prefer_datetime)
index = Missings.disallowmissing(var[:])
attr = CDM.attribs(var)
metadata = _metadatadict(sourcetrait(ds), attr)
Expand Down Expand Up @@ -356,7 +361,6 @@ end
function _cdmspan(index, order)
# Handle a length 1 index
length(index) == 1 && return Regular(zero(eltype(index))), Points()

step = if eltype(index) <: AbstractFloat
# Calculate step, avoiding as many floating point errors as possible
st = Base.step(Base.range(Float64(first(index)), Float64(last(index)); length = length(index)))
Expand Down
Loading