将UTM转换为latlon rasterBrick R.

时间:2016-02-03 02:16:17

标签: r raster netcdf

library(raster)
library(ncdf)
library(rgdal)

我在rasterBrick对象中遇到了将UTM转换为latlon的问题。我的代码如下:

示例文件可以在这里找到: https://www.dropbox.com/s/yv4opmrx1v4whpt/2013_000_CaPA_continental_v2.3-analyse_final_10km_6h_APCP.nc.7z?dl=0

rasnc<- brick('file.nc', varname = "APCP_surface")

rasnc
#class       : RasterBrick 
#dimensions  : 824, 935, 770440, 1460  (nrow, ncol, ncell, nlayers)
#resolution  : 10000, 10000  (x, y)
#extent      : -5000, 9345000, -5000, 8235000  (xmin, xmax, ymin, ymax)
#coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 

wgs84.p4s <- "+proj=longlat +datum=NAD83 +ellps=GRS80 +no_defs"
# reprojecting
rx <- projectRaster(from=rasnc, crs=wgs84.p4s,method="ngb")

上述内容未从UTM转换为latlon。我甚至试图将文件写入GeoTIFF然后重新投影,但它仍然无效。

writeRaster(rasnc, file="myfil.tif", format="GTiff", overwrite=TRUE)

基本上我想:

  • 使用netCDF

  • 阅读brick file.nc
  • 将UTM坐标转换为latlon

  • 将RasterBrick对象裁剪为ext <- extent(-141.01807,-52.61941,41.68144.0,83.13550)

  • 使用levelplot函数显示任何图层。

从2013年1月1日至2013年12月1日,时间序列为6小时

根据@RobertH的建议,我使用旧的光栅包版本确实是问题的根源。 rasnc没有coord.ref。在数据建模器的网页(http://weather.gc.ca/grib/grib2_RDPA_ps10km_e.html)中,使用了覆盖北美和邻近水域的{{​​1}},其中北纬60度的分辨率为10 km。如何获得polar-stereographic (PS) grid PS的正确rasnc之后我将projectRaster应用于rasnc以获取latlon坐标

1 个答案:

答案 0 :(得分:1)

问题是rasnc报告它有一个lon / lat坐标参考系统(#coord. ref. : +proj=longlat +datum=WGS84);看起来不正确。如果你知道它应该是什么,(你说UTM,但区域是什么?),分配它:

  crs(rasnc) <- '+proj=utm +zone=??? +datum=WGS84'

然后事情应该有效。 问题是,这是怎么回事?

我明白了:

library(raster)
r <- brick("2013_000_CaPA_continental_v2.3-analyse_final_10km_6h_APCP.nc")
#Loading required namespace: ncdf4
#r
#class       : RasterBrick 
#dimensions  : 824, 935, 770440, 1460  (nrow, ncol, ncell, nlayers)
#resolution  : 10000, 10000  (x, y)
#extent      : -5000, 9345000, -5000, 8235000  (xmin, xmax, ymin, ymax)
#coord. ref. : NA 

这是正确的,因为此文件不提供坐标参考系统信息。

首先更新你的光栅版本(你使用的是ncdf而不是ncdf4,所以我们可以看到它是旧的);并且不要遗漏代码(如果你自己设置了coord。参考系统)