在R中将矩阵转换为栅格

Jia*_*ang 7 r raster spatial matrix

我有一个带空间坐标和一个变量的矩阵数据.空间分辨率为1000米.

> str(dat1)
> List of 3
> $ x: num [1:710] 302340 303340 304340 305340 306340 ...
> $ y: num [1:1241] 5431470 5432470 5433470 5434470 5435470 ...
> $ z: num [1:710, 1:1241] 225 225 225 225 225 ...
Run Code Online (Sandbox Code Playgroud)

我想将其转换为栅格格式.

> dat1$x[1:10]
> [1] 302339.6 303339.6 304339.6 305339.6 306339.6 307339.6 308339.6 309339.6 310339.6 311339.6
> dat1$y[1:10]
>  [1] 5431470 5432470 5433470 5434470 5435470 5436470 5437470 5438470 5439470 5440470
Run Code Online (Sandbox Code Playgroud)

我使用以下代码来完成它.但我得到的决议与我的决议不一样.有没有更好的方法来获得与我的真实数据相同的分辨率?

> r <-raster(
             dat1$z,
             xmn=range(dat1$x)[1], xmx=range(dat1$x)[2],
             ymn=range(dat1$y)[1], ymx=range(dat1$y)[2], 
             crs=CRS("+proj=utm +zone=11 +datum=NAD83")
            )
> r

class       : RasterLayer 
dimensions  : 710, 1241, 881110  (nrow, ncol, ncell)
resolution  : 571.3135, 1746.479  (x, y)
extent      : 302339.6, 1011340, 5431470, 6671470  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=utm +zone=11 +datum=NAD83 
data source : in memory
names       : layer 
values      : 13.65059, 248.6229  (min, max)
Run Code Online (Sandbox Code Playgroud)

Spa*_*man 17

尝试阅读栅格帮助.从矩阵创建栅格时,行和列的感觉不是您想象的那样.你给它喂了一个1241x710的矩阵,但从错误的向量中取出最大值和最小值.

请尝试以下方法:

> # small version of your test set
> dat1=list()
> dat1$x=seq(302339.6,by=1000,len=71)
> dat1$y=seq(5431470,by=1000,len=124)
> dat1$z=matrix(runif(71*124),71,124)
> str(dat1)
List of 3
 $ x: num [1:71] 302340 303340 304340 305340 306340 ...
 $ y: num [1:124] 5431470 5432470 5433470 5434470 5435470 ...
 $ z: num [1:71, 1:124] 0.765 0.79 0.185 0.461 0.421 ...
> image(dat1,asp=1)
Run Code Online (Sandbox Code Playgroud)

漂亮的方形像素.现在创建你的栅格:

r <-raster(
             dat1$z,
             xmn=range(dat1$x)[1], xmx=range(dat1$x)[2],
             ymn=range(dat1$y)[1], ymx=range(dat1$y)[2], 
             crs=CRS("+proj=utm +zone=11 +datum=NAD83")
            )
plot(r)
Run Code Online (Sandbox Code Playgroud)

完全非方形像素.如果仔细观察,矩阵会从图像图中旋转90度.或转置或其他东西.

解决方案:只需从x,y,z列表创建栅格:

 > r=raster(dat1);plot(r)
Run Code Online (Sandbox Code Playgroud)

方形像素,与图像绘制相同,分辨率现在是您所期望的:

> r
class       : RasterLayer 
dimensions  : 124, 71, 8804  (nrow, ncol, ncell)
resolution  : 1000, 1000  (x, y)
extent      : 301839.6, 372839.6, 5430970, 5554970  (xmin, xmax, ymin, ymax)
coord. ref. : NA 
data source : in memory
names       : layer 
values      : 7.738103e-05, 0.9995497  (min, max)
Run Code Online (Sandbox Code Playgroud)

  • 由于我刚刚花了4个小时,我会补充这个答案.什么Spacedman的意思是当他说"行和列的感觉不是你认为的"时,他的意思是光栅层按行排列,即左右,上下,而矩阵按列组织,即上下,左右.所以在这种情况下,dat1 [15]会给你一个不同于r [15]的结果.我个人认为在光栅手册中没有明确说明这一点. (6认同)