我使用nc_open
从THREDDS数据服务器获取DatasetNode,并通过指定start
和count
阅读ncvar_get
中数据的子集。
library(thredds)
library(ncdf4)
Top <- CatalogNode$new("https://oceanwatch.pifsc.noaa.gov/thredds/catalog.xml")
DD <- Top$get_datasets()
dnames <- names(DD)
dname <- dnames[4] # "Chlorophyll a Concentration, Aqua MODIS - Monthly, 2002-present. v.2018.0"
D <- DD[[dname]]
dl_url <- file.path("https://oceanwatch.pifsc.noaa.gov/thredds/dodsC", D$url)
dataset <- nc_open(dl_url)
dataset_lon <- ncvar_get(dataset, "lon") # Get longitude values
dataset_lat <- ncvar_get(dataset, "lat") # Get latitude values
dataset_time <- ncvar_get(dataset, "time") # get time values in tidy format
# specify lon/lat boundaries for data subset:
lonmin = 160
lonmax = 161
latmin = -1
latmax = 0
LonIdx <- which(dataset_lon >= lonmin & dataset_lon <= lonmax)
LatIdx <- which(dataset_lat >= latmin & dataset_lat <= latmax)
# read the data for first 10 timesteps:
dataset_array <- ncvar_get(dataset,
start=c(findInterval(lonmin, dhw_lon), findInterval(latmax, sort(dhw_lat)), 1),
count=c(length(LonIdx), length(LatIdx), 10), varid="chlor_a", verbose=TRUE)
在阅读数据之前,是否有方法计算ncvarget
的近似文件大小?
1条答案
按热度按时间nle07wnf1#
非常感谢@michael-delgado和@robert-wilson的上述评论,我编辑了最初的帖子,加入了一个可复制的例子,并回答了我自己的问题,以防它对以后的其他人有帮助。
如果我理解正确的话,目前所有的R实现都使用float 32。使用上面帖子中的Aqua MODIS叶绿素数据集:
使用ncvar_get下载数据之前**文件大小的上限(假设没有
NA
)**为23,040字节:这与下载后数据的大小有关:
将输出数组写入磁盘将生成一个20,444字节的文件:
这接近于计算的上限(23,040字节)。对我来说,这种方法对于在使用ncvar_get下载数据之前获得上限和近似大小非常有用,非常感谢你们两个。
(Out在上面的例子中,排除NA,剩下5760个单元中的4559个:
(sum(!is.na(dataset_array)) * 4)
,它给出18,236字节,小于实际文件大小(20,444字节)。