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

Posted

技术标签:

【中文标题】从paleoView导入R中的netcdf时只有正纬度和经度可能是错误的投影【英文标题】:Only positive latitude and longitude when importing netcdf in R from paleoView probably wrong projection 【发布时间】:2019-01-26 20:13:57 【问题描述】:

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

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

使用光栅

我加载了 raster 和 ncdf4 库以使用 raster 读取它

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)

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

显然 +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"

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

【问题讨论】:

你能把print(nc)的输出也贴出来吗? 这些链接可能会有所帮助***.com/q/31549880/786542 | gis.stackexchange.com/q/284224/1269 cran.r-project.org/web/packages/futureheatwaves/vignettes/… 【参考方案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)

当然,您只希望这样做是您确实确定程度,并且您可能想联系数据提供者报告此问题。

【讨论】:

以上是关于从paleoView导入R中的netcdf时只有正纬度和经度可能是错误的投影的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 R 中的纬度/经度边界从 netCDF 文件中获取子集

从 R 中的 netCDF 提取点的时间序列(lon,lat)

从 NetCDF 中提取数据

绘制 NetCDF 的部分并覆盖形状文件-R

使用 R 扩展 netCDF 文件中的尺寸

R在打开netcdf文件时崩溃