【问题标题】:How can I put a coordinate system into a NetCDF using R?如何使用 R 将坐标系放入 NetCDF?
【发布时间】:2025-12-29 23:50:11
【问题描述】:

我一直在使用来自 Daymet 的 NetCDF 文件,我的项目涉及从各种文件中提取数据、修改它们并在 R 中创建新文件,然后在 Arcmaps 中对其进行分析。使用带有 x 和 y 的 make NetCDF 栅格图层工具作为尺寸适用于当天未修改的数据,但对我自己制作的文件没有任何作用。使用坐标变量对它们都有效,但产品会失真。查看我创建的文件之间的差异,唯一的区别是我创建的文件没有任何空间参考坐标。

在未修改的文件中有一个现有的空间参考或投影,在元数据中看起来像:

' 5个变量(不包括维度变量):
浮动 time_bnds[nv,time]
时间:自 1980-01-01 00:00:00 UTC 以来的天数

' 短lambert_conformal_conic[]
网格映射名称:lambert_conformal_conic
longitude_of_central_meridian:-100
纬度_of_projection_origin:42.5
false_easting: 0
false_northing: 0
标准平行:25
标准平行:60
semi_major_axis:6378137
inverse_flattening: 298.257232666016

使用 netcdf r 包能够创建类似以下代码的内容:

' corddef

这给出了这个:

' 5个变量(不包括维度变量):
float time_bnds[time](分块:[1])
单位:自 1980-01-01 00:00:00 UTC 以来的天数
短lambert_conformal_conic[](连续存储)
网格映射名称:lambert_conformal_conic
longitude_of_central_meridian:-100
纬度_of_projection_origin:42.5
false_easting: 0
false_northing: 0
标准平行:25
标准并行_2:60
semi_major_axis:6378137
inverse_flattening: 298.257232666016

尝试在 Arcmaps 中制作栅格仍然没有任何作用,所以我想知道是否有更好的方法可以将有关投影的信息直接放入我正在创建的新文件中,以便 arcmaps 可以自动读取信息。

【问题讨论】:

    标签: r arcgis netcdf4


    【解决方案1】:

    必须像这样编写代码,并为要添加的数字指定名称。

    longitude_of_central_meridian <- -100
    latitude_of_projection_origin <- 42.5
    false_easting <- 0
    false_northing <- 0
    semi_major_axis <- 6378137
    inverse_flattening <- 298.257232666016
    
    ncatt_put(ncout, "lambert_conformal_conic", "grid_mapping_name", "lambert_conformal_conic")
    ncatt_put(ncout,"lambert_conformal_conic","longitude_of_central_meridian", longitude_of_central_meridian)
    ncatt_put(ncout,"lambert_conformal_conic","latitude_of_projection_origin", latitude_of_projection_origin)
    ncatt_put(ncout,"lambert_conformal_conic","false_easting", false_easting)
    ncatt_put(ncout,"lambert_conformal_conic","false_northing", false_northing)
    ncatt_put(ncout,"lambert_conformal_conic", "standard_parallel", c(25,60))
    ncatt_put(ncout,"lambert_conformal_conic","semi_major_axis", semi_major_axis)
    ncatt_put(ncout,"lambert_conformal_conic","inverse_flattening", inverse_flattening)
    

    【讨论】: