无法使用R从NetCDF文件中提取chlor_a值

时间:2018-10-12 16:16:48

标签: r gis raster netcdf netcdf4

感谢您的帮助!

我正在尝试使用R软件从NetCDF文件中获取叶绿素a值,但是我得到的只是缺少值,NA。我想知道我是在做错什么,还是文件确实只是缺少叶绿素a值。我可以使用这种方法获取经度和纬度值。

我正在使用的文件来自https://oceandata.sci.gsfc.nasa.gov/MODIS-Aqua/Mapped/Monthly/4km/chlor_a/,我尝试的任何文件都缺少值,不仅尝试了脚本上显示的那个文件。

require(rgdal)
require(maptools)
require(raster)
require(sp)
require(rorwr)
require(RNetCDF)

clorofila<- "C:\\Users\\User\\Desktop\\files\\A20172132017243.L3m_MO_CHL_chlor_a_4km.nc"

cla <- open.nc(clorofila)

print.nc(cla)
file.inq.nc(cla)

clor <- var.get.nc(cla,"chlor_a",start=c(1,1),count=c(8640,4320))
Long <- var.get.nc(cla,"lon")
Lat <- var.get.nc(cla, "lat")

使用ncdf4和栅格,我得到了相同的结果

require(ncdf4)

clorofila10<- "C:\\Users\\User\\Desktop\\files\\A20172132017243.L3m_MO_CHL_chlor_a_4km.nc"

nc <- nc_open(clorofila10)

val <- ncvar_get(nc, "chlor_a")
nc_close(nc)

光栅

require(raster)
clorofila10<- "C:\\Users\\User\\Desktop\\files\\A20172132017243.L3m_MO_CHL_chlor_a_4km.nc"
clacla<-raster(clorofila10)
CHL1 <- raster(clorofila10, varname="chlor_a")
names(CHL1) <- 'chlor_a'

z <- getValues(CHL1)

非常感谢您所做的一切!

最诚挚的问候

2 个答案:

答案 0 :(得分:0)

使用ncdf4读取数据没问题。有很多NA,但不仅如此。这是这类数据的特征:您有一个相对于地球的矩阵,但有沿海叶绿素浓度的数据。

tempF <- tempfile()
download.file('https://oceandata.sci.gsfc.nasa.gov/cgi/getfile/A20172132017243.L3m_MO_CHL_chlor_a_4km.nc', tempF)

library(ncdf4)
ncF <- nc_open(tempF)
val <- ncvar_get(ncF, "chlor_a")
nc_close(ncF)

> length(val)
[1] 37324800

> sum(is.na(val))
[1] 20985329

library(raster)
plot(raster(t(val)))

enter image description here

答案 1 :(得分:0)

文件具有值。您可以看到这样的内容:

library(raster)
r <- raster("A20172132017243.L3m_MO_CHL_chlor_a_4km.nc", var="chlor_a")
plot(r)
cellStats(r, mean)
#[1] 0.4608675

或者这样

 freq(round(r/10))
#  value    count
# [1,]     0 16110852
# [2,]     1   190403
# [3,]     2    24723
# [4,]     3     6790
# [5,]     4     3064
# [6,]     5     1666
# [7,]     6      821
# [8,]     7      524
# [9,]     8      349
#[10,]     9      209
#[11,]    10       70
#[12,]    NA 20985329

summary(r)