-1

我正在处理一些天气数据,并且有一个 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 中按此顺序执行此操作)。

4

1 回答 1

1

我不确定删除缺失值是否有帮助。如果波浪数据和部分网格之间没有空间重叠,那么移除 nas 不会改善这种情况。

唯一的解决方案是推断这些值。由于这是波浪数据,因此仅使用最近的沿海单元格可能是安全的。

这可以通过 CDO 轻松完成:

cdo setmisstonn infile.nc outfile.nc
于 2021-12-03T09:26:17.323 回答