【问题标题】:Why the values of my raster map change when I project it to a new CRS (projectRaster function in R)?为什么当我将栅格地图投影到新的 CRS(R 中的 projectRaster 函数)时,栅格地图的值会发生变化?
【发布时间】:2013-03-16 02:51:46
【问题描述】:

我需要将 latlong 地图投影到方位角等距投影。

map_proj<-projectRaster(map, crs="+proj=aeqd +lon_0=48+lat_0=18")

在我的原始地图中,我有这些值

class       : RasterLayer 
dimensions  : 1713, 2185, 3742905  (nrow, ncol, ncell)
resolution  : 0.008335028, 0.00833354  (x, y)
extent      : 39.06984, 57.28187, -25.93814, -11.66279  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0 
data source : /Users/Oritteropus/Desktop/Progetti/maps/mada_rast2 
names       : mada_rast2 
values      : 0, 255  (min, max)

unique(map)
 [1]  0  1  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 24 25 26 27 28
[24] 29 30 31 32 33 34 35 36 37 38 39 40

在我的投影地图中,我现在有以下值

class       : RasterLayer 
dimensions  : 1990, 2254, 4485460  (nrow, ncol, ncell)
resolution  : 1000, 1000  (x, y)
extent      : 4026994, 6280994, -3379165, -1389165  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=aeqd +lon_0=0+lat_0=0 +ellps=WGS84 
data source : in memory
names       : mada_rast2 
values      : -0.1498806, 40  (min, max)

head(unique(map_proj))

[1] -1.498806e-01 -8.050509e-02  0.000000e+00  1.164434e-05  3.575309e-05
[6]  5.233506e-05

我需要保持相同的价值观。有人可以解释一下发生了什么或我哪里错了吗? 谢谢

【问题讨论】:

    标签: r projection raster


    【解决方案1】:

    这是因为重新投影栅格需要一定量的像元变形,并且必须在值之间进行插值。如果要保持相同的值,则必须更改插值方法。改用最近的邻居...

    map_proj<-projectRaster(map, crs="+proj=aeqd +lon_0=48+lat_0=18" , method = "ngb" )
    

    来自raster:::projectRaster 帮助页面的数据示例:

    r <- raster(xmn=-110, xmx=-90, ymn=40, ymx=60, ncols=40, nrows=40)
    r <- setValues(r, 1:ncell(r))
    newproj <- "+proj=lcc +lat_1=48 +lat_2=33 +lon_0=-100 +ellps=WGS84"
    
    # Default reproject uses bilinear interpolation
    r_bl <- projectRaster( r , crs = newproj )
    r_nn <- projectRaster( r , crs = newproj , method = "ngb" )
    
    range(values(r) , na.rm = T) 
    #[1]    1 1600
    range(values(r_bl) , na.rm = T )
    #[1]   -7.671638 1612.968493
    range(values(r_nn) , na.rm = T )
    #[1]    1 1600
    

    当然,您仍在将值投影到新单元格,因此您可能会得到一些 NA。简而言之,双线性插值对连续变量有意义,而最近邻对分类变量有意义。

    【讨论】:

    • 好的,谢谢!现在它是有道理的,在我的例子中使用 ngb 是可以的,因为地图代表分类变量。
    猜你喜欢
    • 2020-08-03
    • 2021-08-07
    • 2021-07-05
    • 1970-01-01
    • 1970-01-01
    • 2021-09-08
    • 2016-10-24
    • 2020-06-27
    • 2014-05-30
    相关资源
    最近更新 更多