我想从netcdf4文件的阿拉斯加上的一个区域中子集化,该文件处于极地立体投影(ESRI:102018)投影中。 netcdf为每个变量(例如温度或降水量)提供了720 x 720矩阵,并提供了纬度和经度的“ XLAT”和“ XLONG”。我需要子集数据以实际包括每个网格点的纬度/经度,并且对于它来说,要上传的文件很大,因此在此处下载示例的链接是: https://rda.ucar.edu/data/ds631.1/asr15.fcst3.monthly/asr15km.fct.2D.200006.mon.nc 我尝试执行以下操作以获取所需信息,但实际上我的问题是然后使用该区域并获得适当的经度/纬度。我的目标是将其重新投影到EPSG 3857或类似的经/纬样式投影中。
library(raster)
library(ncdf4)
# load netcdf4
nc_file <- nc_open("nc_list/asr15km.fct.2D.200007.mon.nc")
# variable of interest
RAINC <- ncvar_get(nc_file, "RAINC") # Cumulus precip
XLAT <- ncvar_get(nc_file, "XLAT")
XLONG <- ncvar_get(nc_file, "XLONG")
在这里,我当时在考虑使用栅格来处理此问题,但极坐标学坐标似乎不太有效。我不确定如何正确设置栅格范围!
nc_file$dim$y$vals -> lon
nc_file$dim$x$vals -> lat
prcp <- raster(RAINC)
# EPSG doesn't recognize the esri code.
crs(prcp) <- crs('+init=esri:102018')
extent(prcp) <- extent(min(lat), max(lat), min(lon), max(lon))
这里的范围是1到720和1到720,这不是我想要的(但我正在设置此值)。您可以在下图中看到它。
# Area we want to remove
yukon_ind <-((XLAT >= 62) & (XLAT <= 64) & (XLONG >= -165) & (XLONG <= -163))
cropping_rast <- raster(yukon_ind, crs = crs('+init=esri:102018'))
# Pic
extent(cropping_rast) = extent(min(lat), max(lat), min(lon), max(lon))
prcp_c <- mask(prcp, cropping_rast, maskvalue = 0)
如何从该区域退回所需区域并重新投影?