У меня есть следующая матрица, полученная из файла NetCDF, который я пытаюсь преобразовать в растр. Я знаю, что матрица имеет проекцию WGS84.
Я обнаружил одну проблему, исправленную в приведенном ниже коде - интервал между широтами lat
в NetCDF и, следовательно, в производной матрице clim_ncdf
не был равен. Тем не менее, растр EI_adj
не проецируется точно, как это должно быть после преобразования из матрицы, и все пространства смещены на юг. Эта проблема сводит меня с ума - у кого-нибудь есть идеи, как это исправить? Исходные файлы (NetCDF и границы мировых администраторов) можно загрузить с здесь .
library(raster)
library(ncdf4)
library(lattice)
# Choose variable name
dname <- c("GI")
clim_ncdf <- nc_open("NetCDF_GI.nc")
lon <- ncvar_get(clim_ncdf,"Longitude")
head(lon)
lat <- ncvar_get(clim_ncdf,"Latitude")
# Latitudes have spacing of 0.5 except in two instances:
lat[55:60]
lat[58:59] # problematic ones
# Create a new latitude vector with equal spacing for corrected matrix
nlat <- seq(min(lat),max(lat),0.5)
EI1 <- ncvar_get(clim_ncdf,dname[1])
# This needs to be rotated
rotate <- function(x) t(apply(x, 2, rev))
EI <- rotate(rotate(rotate(EI1)))
# Now adjust EI for the problematic lats:
rows_m_reps <- rep(1,nrow(EI))
rows_m_reps[58] <- 2
rows_m_reps[59] <- 10
# Replicating corresponding rows so we can now have equal latitude distancing
EI_adj <- EI[rep(1:nrow(EI), rows_m_reps), ]
EIr_adj <- raster(EI_adj,xmn=min(lon), xmx=max(lon),ymn=min(nlat),ymx=max(nlat),
crs = "+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0")
plot(EIr_adj)
# Add admin layer
library(rgdal)
world_admin <- readOGR("Countries_WGS84.shp")
plot(world_admin, add = TRUE)