【发布时间】:2018-06-14 03:35:22
【问题描述】:
我有一个全球海洋学 (OmegaA) 数据的 NetCDF 文件,空间分辨率相对较粗,有 33 个深度级别。我还有一个分辨率更高的全球测深栅格。我的目标是使用从 NetCDF 文件中获取海底 OmegaA 数据,使用测深数据来确定所需的深度。到目前为止我的代码;
library(raster)
library(rgdal)
library(ncdf4)
# Aragonite data. Defaults to CRS WGS84
ncin <- nc_open("C:/..../GLODAPv2.2016b.OmegaA.nc")
ncin.depth <- ncvar_get(ncin, "Depth")# 33 depth levels
omegaA.brk <- brick("C:/.../GLODAPv2.2016b.OmegaA.nc")
omegaA.brk <-rotate(omegaA.bkr)# because netCDF is in Lon 0-360.
# depth raster. CRS WGS84
r<-raster("C:/....GEBCO.tif")
# resample the raster brick to the resolution that matches the bathymetry raster
omegaA.brk <-resample(omegaA.brk, r, method="bilinear")
# create blank final raster
omegaA.rast <- raster(ncol = r@ncols, nrow = r@nrows)
extent(omegaA.rast) <- extent(r)
omegaA.rast[] <- NA_real_
# create vector of indices of desired depth values
depth.values<-getValues(r)
depth.values.index<-which(!is.na(depth.values))
# loop to find appropriate raster brick layer, and extract the value at the desired index, and insert into blank raster
for (p in depth.values.index) {
dep.index <-which(abs(ncin.depth+depth.values[p]) == min(abs(ncin.depth+depth.values[p]))) ## this sometimes results in multiple levels being selected
brk.level <-omegaA.brk[[dep.index]] # can be more than on level if multiple layers selected above.
omegaA.rast[p] <-omegaA.brk[[1]][p] ## here I choose the first level if multiple levels have been selected above
print(paste(p, "of", length(depth.values.index))) # counter to look at progress.
}
问题:结果是一个栅格,其中应该有数据的地方存在巨大的差距 (NA)。间隙通常具有独特的形状——例如,沿着轮廓,或沿着长直线。我粘贴了一个裁剪的示例。
我认为这可能是因为 1) 出于某种原因,循环中的“which”语句未找到匹配项或 2) 使用“Rotate”时可能会发生我读过的投影错位.
我已尝试确保所有范围、分辨率、单元格数量和 CRS 都相同,它们看起来确实如此。
为了加快这个过程,我将全局砖块和深海栅格裁剪到我感兴趣的区域,再次检查所有空间分辨率等是否匹配 - 为了简单起见,我没有在此处包含这些步骤。
不知所措。欢迎任何帮助!
【问题讨论】:
-
您将粗分辨率栅格重采样为更精细的分辨率,缩小 NetCDF 数据... 为什么? IMO,最好在不修改 NetCDF 数据的情况下将测深栅格转换为粗分辨率