R 将光栅从投影坐标系转换为地理坐标系时最大限度地减少数据丢失的最佳方法

R 将光栅从投影坐标系转换为地理坐标系时最大限度地减少数据丢失的最佳方法,r,gis,raster,r-raster,rgdal,R,Gis,Raster,R Raster,Rgdal,我有一个全球范围的光栅文件,在PC中,分辨率大约为1°(范围为90到-60度纬度和180到-180度经度),我想以2°分辨率转换为GCS,但我使用的当前方法会导致数据失真。原始光栅包含分类值,但同样的问题也适用于连续值。我想知道是否有更好的办法 #create raster in PCS - CEA projection x <- raster(ncol=360, nrow=142, xmn=-17367529, xmx=17367529, ymn=-6356742, ymx=734838

我有一个全球范围的光栅文件,在PC中,分辨率大约为1°(范围为90到-60度纬度和180到-180度经度),我想以2°分辨率转换为GCS,但我使用的当前方法会导致数据失真。原始光栅包含分类值,但同样的问题也适用于连续值。我想知道是否有更好的办法

#create raster in PCS - CEA projection
x <- raster(ncol=360, nrow=142, xmn=-17367529, xmx=17367529, ymn=-6356742, ymx=7348382)
projection(x) <- "+proj=cea +lon_0=0 +lat_ts=30 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0"
values(x)=runif(51120, 1, 99)
# my target raster format
y <- raster(ncol=180, nrow=75, xmn=-180, xmx=180, ymn=-60, ymx=90)
projection(y) <- "+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0"
values(y)=runif(13500, 1, 99)
#downscale to match my target raster resolution
x2deg=raster::aggregate(x,fact=2)
#when I try to project I get the first error
x2deg.gcs = projectRaster(x2deg, y)
#在PC中创建光栅-CEA投影

x这在
terra

library(terra)
x <- rast(ncol=360, nrow=142, xmin=-17367529, xmax=17367529, ymin=-6356742, ymax=7348382)
crs(x) <- "+proj=cea +lon_0=0 +lat_ts=30 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs"
values(x) <- 1:ncell(x)

y <- rast(ncol=180, nrow=75, xmin=-180, xmax=180, ymin=-60, ymax=90)
crs(y) <- "+proj=longlat +datum=WGS84"

p <- project(x, y)
图书馆(terra)

在我花了几个小时之后,希曼教授来了,几秒钟内就解决了我的问题!:-)。很高兴了解这个新软件包!只是一个问题,如果我先做x=aggregate(x,fact=2),我注意到结果略有不同。这是明智的还是应该让project()处理所有转换?我同意聚合的想法。这就是光栅的作用。在
terra
中,GDAL-warp算法是在幕后使用的,我没有对它进行足够的实验,以了解它是否重要,以及它如何取决于所使用的方法(near,blinear)
library(terra)
x <- rast(ncol=360, nrow=142, xmin=-17367529, xmax=17367529, ymin=-6356742, ymax=7348382)
crs(x) <- "+proj=cea +lon_0=0 +lat_ts=30 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs"
values(x) <- 1:ncell(x)

y <- rast(ncol=180, nrow=75, xmin=-180, xmax=180, ymin=-60, ymax=90)
crs(y) <- "+proj=longlat +datum=WGS84"

p <- project(x, y)