简体   繁体   English

将栅格堆栈范围从米转换为纬度/经度

[英]Converting raster stack extent from meters to lat/lon coordinates

I have a raster stack in the following format which I converted to NetCDF using this method . 我有以下格式的栅格堆栈,我使用此方法将转换为NetCDF This works but the latitude and longitude variables are in 'meters' which is the extent of the raster file, and I need them to be in decimal degrees. 此方法有效,但是纬度和经度变量在“米”中,这是栅格文件的范围,我需要将它们设置为十进制度。 The R Grid file is here and the format is as follows: R Grid文件在这里 ,格式如下:

class       : RasterBrick 
dimensions  : 205, 170, 34850, 12  (nrow, ncol, ncell, nlayers)
resolution  : 1, 1  (x, y)
extent      : 160.5, 330.5, 145.5, 350.5  (xmin, xmax, ymin, ymax)
coord. ref. : NA 
data source : \TavgM_1981.grd 
names       :   Jan.1981,   Feb.1981,   Mar.1981,   Apr.1981,   May.1981,   Jun.1981,   Jul.1981,   Aug.1981,   Sep.1981,   Oct.1981,   Nov.1981,   Dec.1981 
min values  :  1.9912137,  0.8120775,  4.0446638,  4.4135274,  6.5349769,  8.6149150,  9.9991916, 11.8400562,  9.6407796,  3.5005649,  4.1205872, -0.6106244 
max values  :   9.850221,   9.121176,  10.238524,   9.858942,  11.669445,  14.260988,  15.722292,  17.235090,  15.708690,  11.598482,  11.552235,   8.981533 
time        : Jan 1981, Feb 1981, Mar 1981, Apr 1981, May 1981, Jun 1981, Jul 1981, Aug 1981, Sep 1981, Oct 1981, Nov 1981, Dec 1981 

Ideally I would like to convert this to a NetCDF file which has the following format to be read by a model: 理想情况下,我想将其转换为NetCDF文件,该文件具有以下格式,可供模型读取:

Dimensions:    (lat: 408, lon: 881, nb2: 2, time: 660)
Coordinates:
  * lon        (lon) float64 -44.81 -44.69 -44.56 -44.44 -44.31 -44.19 ...
  * lat        (lat) float64 21.81 21.94 22.06 22.19 22.31 22.44 22.56 22.69 ...
  * time       (time) datetime64[ns] 1951-01-16T12:00:00 1951-02-16T12:00:00 ...
Dimensions without coordinates: nb2
Data variables:
    time_bnds  (time, nb2) datetime64[ns] 1951-01-16T12:00:00 ...
    tas        (time, lat, lon) float64 nan nan nan nan nan nan nan nan nan ...

I tried to convert the Raster Brick extent to lat/lon using this method: 我尝试使用此方法将Raster Brick范围转换为lat / lon:

sputm <- SpatialPoints(test@extent@xmin, proj4string=CRS("+proj=utm +zone=29N +datum=WGS84"))

But this gives this error: 但这给出了这个错误:

Error in (function (classes, fdef, mtable)  : unable to find an inherited method for function ‘coordinates’ for signature ‘"numeric"’

EDIT: Also tried 编辑:也尝试过

crs(test) <- '+proj=merc +datum=WGS84'
x <- projectRaster(test, crs='+proj=longlat +datum=WGS84') 

writeRaster(x, "rstack2.nc", overwrite=TRUE, format="CDF",     varname="Temperature", varunit="degC", 
        longname="Temperature -- raster stack to netCDF", xname="Longitude",   yname="Latitude", zname="Time (Month)")

But when I examine this in panoply the lat and lon coordinates are all 0.0. 但是,当我全景查看时,纬度和经度坐标均为0.0。

I'm not sure where to go from here. 我不确定从这里去哪里。

As fas as I recognized Ireland, I looked at Ireland projections. 当我认识到爱尔兰时,我一直关注爱尔兰的预测。 I think this is the TM75 / Irish Grid. 我认为这是TM75 /爱尔兰网格。 I modified the resolution of your raster so that it is 2500m. 我修改了栅格的分辨率,使其为2500m。

library(raster)

r <- stack("~/Bureau/TavgM_1981")
xmax(r) <- xmin(r) + 2500 * ncol(r)
ymax(r) <- ymin(r) + 2500 * nrow(r)

crs(r) <- "+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +ellps=mod_airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +units=m +no_defs"

# Convert to degrees
x_wgs84 <- projectRaster(r, crs='+proj=longlat +datum=WGS84') 

writeRaster(x, "~/Bureau/TavgM_wgs84.tif", overwrite = TRUE)

You will see below the result of this resolution + projection modification compared to the target. 您将在下面看到与目标相比该分辨率+投影修改的结果。
We are not so far from reality but there is something bad in your original raster. 我们离现实不远,但是您原始的栅格中有一些不好的东西。 If this is (unfortunately) usual not to have the crs when somebody gives you a layer, this is not usual to miss the correct resolution. 如果在某人给您一个图层时这(不幸的是)通常不具有crs,则通常不会错过正确的分辨率。
As the raster you provide is saved as ".gri/.grd" file, this means that it has been produced with R. You should try to get the original R code that produced the file, instead of the final modified layer. 由于您提供的栅格将另存为“ .gri / .grd”文件,这意味着它是使用R生成的。您应该尝试获取生成该文件的原始R代码,而不是最终的修改层。

分辨率和crs修改后的爱尔兰栅格

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM