从 paleoView 导入 R 中的 netcdf 时只有正纬度和经度可能是错误的投影
Only positive latitude and longitude when importing netcdf in R from paleoView probably wrong projection
我使用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)
这清楚地显示了极圈温度极低且南极洲比北极大的预期模式。
显然 +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 在这里是错误的,我认为如果我弄清楚实际的 coord 是什么。 ref. 我可以重新投影它并获得正确格式的光栅
使用 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 投影
要解决此问题,您可以设置范围:
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软件从过去的气候中下载了一些变量,包括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)
这清楚地显示了极圈温度极低且南极洲比北极大的预期模式。
显然 +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 在这里是错误的,我认为如果我弄清楚实际的 coord 是什么。 ref. 我可以重新投影它并获得正确格式的光栅
使用 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 投影
要解决此问题,您可以设置范围:
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)
当然,您只有在确定范围的情况下才想这样做,并且您可能需要联系数据提供者来报告此问题。