使用DIVAnd的 loadobs功能,但在 'obsid' 功能上存在问题
在Julia中,我在使用SeaDataNet的 DIVAnd 来尝试对就地观测数据进行客观分析。
我在运行这段代码:
"@time obsval, obslon, obslat, obsdepth, obstime, obsids = loadobs(Float64, in_file, in_variable_name);"
但我得到的结果是:
"TypeError: in typeassert, expected Tuple{Int64, Int64}, got a value of type Tuple{Int64}"
我的 "in_file" 是一个NetCDF文件,里面包含一个温度变量,以及纬度、经度、深度、时间,还有一个被认为是SeaDataNet标识符的字段。我不得不将变量重命名以匹配DIVAnd的标签,但obsids(使用SeaDataNet标识符)才是问题所在。我不知道如何把in_file中的obsids变成Tuple{Int64, Int64},而不是Tuple{Int64}。
解决方案
对于SeaDataNet的 netCDF文件,相关的一个函数似乎是 DIVAnd.NCSDN.load
在相关函数 loadvar 中,似乎有几处调整会带来好处。
# Redefine DIVAnd.NCSDN.loadvar from NCSDN.jl to use `name in keys(dataset)`
import DIVAnd.NCSDN.loadvar
import DIVAnd.NCSDN.GOOD_VALUE
import DIVAnd.NCSDN.PROBABLY_GOOD_VALUE
import DIVAnd.NCSDN.QC_SUFFIX
import DIVAnd.NCDatasets.nomissing
"""
data = loadvar(ds,param;
fillvalue::T = NaN,
qualityflags = [GOOD_VALUE, PROBABLY_GOOD_VALUE],
qfname = param * QC_SUFFIX,
)
Load the netCDF variable `param` from the NCDataset `ds`.
Data points not having the provide quality flags will be masked by `fillvalue`.
`qfname` is the netCDF variable name for the quality flags.
"""
function loadvar(
ds,
param;
fillvalue::T = NaN,
qualityflags = [GOOD_VALUE, PROBABLY_GOOD_VALUE],
qfname = param * QC_SUFFIX,
) where {T}
if !(param in keys(ds)) # was: if !(param in ds)
#@show "no data for",param
return T[]
end
dataarray = Array(ds[param])
data = nomissing(dataarray, fillvalue)
if qfname in keys(ds) # was: if qfname in ds
qf = Array(ds[qfname].var)
keep_data = falses(size(qf))
for flag in qualityflags
keep_data[:] = keep_data .| (qf .== flag[1])
end
data[(.!keep_data)] = fillvalue
end
return data
end
通过这些调整,DIVAnd.NCSDN.load 可以返回非空的数据数组。
using DIVAnd
fname = "SDN_D85_WP8_netCDF_files_examples/netCDF_timeseries_tidegauge.nc"
varname = "PRES"
obsvalue,obslon,obslat,obsdepth,obstime,obsids = DIVAnd.NCSDN.load(Float64, fname, varname)
# ([15.654; 15.615; … ; 15.699; 15.68;;], [178.4535; 178.4535; … ; 178.4535; 178.4535;;], [-18.1425; -18
# .1425; … ; -18.1425; -18.1425;;], [15.654; 15.615; … ; 15.699; 15.68;;], [Dates.DateTime("1998-07-21T0
# 9:30:00"); Dates.DateTime("1998-07-21T09:40:00"); … ; Dates.DateTime("1998-09-19T11:00:00"); Dates.Dat
# eTime("1998-09-19T11:10:00");;], ["486-FI35199810007_00001_D09"; "486-FI35199810007_00001_D09"; … ; "4
# 86-FI35199810007_00001_D09"; "486-FI35199810007_00001_D09";;])
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。