我正在处理一些天气数据,并且有一个 netcdf 文件可以给我波高。我的目标是将沿海岸的港口与最近的网格点相匹配。我从ERA5 数据存储中提取数据. 请求数据时,您可以通过提供您感兴趣区域的纬度和经度来指定边界。我的目标是在 R 中使用该数据进行分析。现在,我进行此分析的方式是使用 ncdf4 包中的函数(代码如下)。我遇到的问题是我正在处理波浪数据,这意味着不主要与海洋重叠的网格在数据中显示为 NA。因此,当我尝试将一个点与最近的网格匹配时,我收到的是 NaS 而不是具有相关值的网格单元之一。我想要做的是将所有 NA 值放在 netcdf 文件中,以便我尝试与最近的网格单元匹配会产生一个值。
我目前正在运行的代码:
#open the connection with the netcdf file
nc <- nc_open("swell_bilmap.nc")
#extract lon and lat
lat <- ncvar_get(nc,'lat')
lon <- ncvar_get(nc,'lon')
dim(lat);dim(lon)
#extract the time
t <- ncvar_get(nc, "time")
#time unit
ncatt_get(nc,'time')
#convert the hours into date + hour
#as_datetime() function of the lubridate package needs seconds
timestamp <- as_datetime(c(t*60*60),origin="1900-01-01")
#import the data, in this case the data var is shts
data_shts <- ncvar_get(nc,"shts")
#close the conection with the ncdf file
nc_close(nc)
#create all the combinations of lon-lat
lonlat <- expand.grid(lon=lon,lat=lat)
#then I match a given lat and long with the nearest, distance based, grid cell
#we must convert the coordinates in a spatial object
coord_brookings <- st_as_sf(lonlat,coords=c("lon","lat"))%>%
st_set_crs(4326)
#we do the same with our coordinate of our port of interest (keep in mind PORTS is the data frame that contains the point lats and longs
psj_brookings <- st_point(c(PORTS[1,5],PORTS[1,4]))%>%
st_sfc()%>%
st_set_crs(4326)
#add the distance to the points
coord_brookings <- mutate(coord_brookings,dist=st_distance(coord_brookings,psj_brookings))
#create a distance matrix with the same dimensions as our data
dist_mat_brookings_shts <- matrix(coord_brookings$dist,dim(data_u)[-3])
#the arrayInd function is useful to obtain the row and column indexes
mat_index_brookings_shts <- as.vector(arrayInd(which.min(dist_mat_brookings_shts), dim(dist_mat_brookings_shts)))
#extract the time series
df_brookings_shts <- data.frame(shts=data_shts[mat_index_brookings_shts[1],mat_index_brookings_shts[2],],time=timestamp)
然后这给了我一个数据框,其中包含每个日期和时间步距最近的网格单元格中该变量的值。
我遇到的问题的直观表示:
我与网格单元匹配的点位于地表上。乍一看,可能没有我们看不到颜色的数据,但是有,它只是一个 na 值,所以它不会显示为任何东西。但是当我在 R 中运行我的代码时,我得到了 NA。我只想显示彩色区域/非 NA。
我是使用 netcdf 文件的新手,所以感谢所有帮助!(我也想在 R、CDO 或 ArcGIS pro 中按此顺序执行此操作)。