当前位置: 首页 > 知识库问答 >
问题:

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

阎善
2023-03-14

我使用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 = long lat datum = WGS 84 ellps = WGS 84 tow GS 84 = 0,0,0是错误的,我想如果我算出实际坐标是多少。参考文献。我可以重新投影,得到正确格式的栅格

我尝试使用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 基准面=WGS84 no_defs towgs84=0,0,0 投影中

共有1个答案

严项明
2023-03-14

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

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)

当然,您只想这样做,因为您非常确定程度,并且您可能希望联系数据提供商报告此问题。

 类似资料:
  • 我想用xarray创建一个NetCDF文件,并尝试理解此处有关“创建数据集”的文档。 下面是示例中的代码(将ds保存到NetCDF): 从上面的例子中,我希望得到一个具有三个维度(x,y,时间)的两个变量(温度,降水)的NetCDF。我希望尺寸在 x 方向上为 2,在 y 方向上为 2,在时间方向上为 3。根据@Bart的测试(评论),NetCDF就是这种情况。因此,当在QGIS 3.4(EPSG

  • 我有一对纬度 然而,我需要一个更灵活的解决方案,例如,我希望能够指定1/3, 1/4, 8/9等对点之间。 注:lat1,long1

  • 我有一个 netCDF 文件,我希望使用 R 中的“ncdf”包从由纬度/经度边界定义的子集(即经纬度/经度定义的框)中提取子集。 下面是我的netCDF文件的摘要。它有两个维度(纬度和经度)和一个变量(10U_GDS4_SFC)。它本质上是一个包含风值的平面/长网格: 纬度变量从 90 到 -90,经度变量从 0 到 360。 我希望使用以下地理角边界提取整个网格的子集: 左下角:纬度:34.5

  • 我正在下载netcdf格式的气候数据。对于每个变量(例如“降水量”),我需要合并9个netcdf,每个都属于一个独特的气候模型。每个netcdf具有相同的大小(time、lat、lon)。如何将9个3D netcdf合并为一个4D netcdf?最后,我想计算每月的累积降水量。这是我的当前代码: 上面的代码有效,但我正在创建一个大的3D netcdf,而不是一个仍然包含气候模型名称的4D。以下代码

  • 我有一个onCreate的活动,它计算您的位置和附近的事件之间的距离,我使用lastNotnloceto获取当前设备位置并在谷歌地图上标记它,但我需要它来写经度和纬度它的方法之外用于计算距离。 我已经使用LocationManager来获取粗略的坐标,但这些坐标不够准确,对于距离不到半英里的东西来说,距离为50英里。我目前拥有它,因此将覆盖从LocationManager获得的经度和纬度,但它没有

  • 问题内容: 在询问具体的代码示例之前,我只想问一下是否可以进行类似此伪代码的查询: 从表中选择项目,其中经度/经度=-在某个经度/经度点的x英里内- 那可行吗?还是我必须跳过一些箍?可以推荐的任何好的方法都很棒! 问题答案: 您应该搜索Haversine公式,但是一个好的开始可能是: 使用PHP,MySQL和Google Maps创建商店定位器 -请参见“使用MySQL查找位置”部分 使用MySQ