从paleoView导入R中的netcdf时,只有正纬度和经度可能是错误的投影

时间:2018-08-20 16:39:47

标签: r netcdf r-raster netcdf4

我使用paleoview软件下载了过去气候的一些变量,包括平均温度15000BP-10000BP(我可以根据要求上传文件,但至少是GB)。

主要问题是,当我阅读栅格时,它仅包含正纬度和正经度。我从文章中知道分辨率为2.5 * 2.5。

使用栅格

我同时加载了光栅库和ncdf4库以使用光栅读取它

library(raster)
library(ncdf4)

当我使用以下代码阅读时

r <- raster("mean_temperature-15000BP-10000BP.nc",  varname = "14000BP-13000BP/13300BP")

我得到以下信息

r
class       : RasterLayer 
band        : 1  (of  12  bands)
dimensions  : 72, 144, 10368  (nrow, ncol, ncell)
resolution  : 1, 1  (x, y)
extent      : 0.5, 144.5, 0.5, 72.5  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
names       : Mean.Temperature 
z-value     : 1 
zvar        : 14000BP-13000BP/13300BP 

如您所见,范围仅是正数,但是我知道它具有整个世界的数据,当我绘制地图时,我得到以下图像:

plot(r)

enter image description here

清楚地显示了极圈温度极低且南极洲比北极更大的预期模式。

显然+ proj = longlat + datum = WGS84 + ellps = WGS84 + towgs84 = 0,0,0在这里是错误的,我想如果我弄清楚实际的坐标是什么。 我可以重新投影它并以正确的格式获取栅格

使用ncdf4

我尝试使用ncdf4软件包尝试从该层获取更多信息,这就是我所做的:

nc <- nc_open("mean_temperature-15000BP-10000BP.nc")

使用nc_open函数读取图层后,我看到了变量的名称,试图理解更多的图层,在这里,我显示了前10个

names(nc$var)[1:10]

[1] "window"                  "width"                   "decimals"                "months"                  "latitudes"               "longitudes"              "15100BP-15000BP/15100BP" "15100BP-15000BP/15099BP"
[9] "15100BP-15000BP/15098BP" "15100BP-15000BP/15097BP"

因此,如果我继续查找并查找经纬度名称,则会得到:

ncatt_get(nc, attributes(nc$var)$names[5])
$units
[1] "degrees north"

ncatt_get(nc, attributes(nc$var)$names[6])
$units
[1] "degrees east"

关于如何重新投影此栅格以得到+ proj = longlat + ellps = WGS84 + datum = WGS84 + no_defs +的-90、90和经度-180至180的任何想法towgs84 = 0,0,0投影

1 个答案:

答案 0 :(得分:1)

要解决此问题,您可以设置范围:

library(raster)
r <- raster("mean_temperature-15000BP-10000BP.nc",  varname = "14000BP-13000BP/13300BP")
extent(r) <- c(-180,180,-90,90)

但是请注意,有时气候数据的经度从0到360(我认为不是在这里):

extent(r) <- c(0,360,-90,90)
r <- rotate(r)

要了解有关ncdf中内容的更多信息,可以执行

print(r)

当然,您只想这样做是因为您确实对范围有把握,并且您可能想联系数据提供商以报告此问题。