I have a matrix data with spatial coordinates and one variable. The spatial resolution is 1000 meters.
> 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 ...
I want to convert it into raster format.
> 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
I used the following code to do it. But the resolution I get is not the same with that I have. Any better way to get the same resolution with my real data?
> 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)
Try reading the help for raster. When creating a raster from a matrix, the sense of rows and columns isn’t what you think it is. You were feeding it a 1241×710 matrix but taking the max and min from the wrong vectors.
Try the following:
Nice square pixels. Now create your raster:
Totally NON-square pixels. And if you look carefully, the matrix is rotated 90 degrees from the image plot. Or transposed or something.
Solution: just create the raster from the x,y,z list:
Square pixels, same way round as image plot, and resolution is now what you expect: