Search code examples
rrasterclip

R: Clip a shapefile boundary out of a generated image


I generated an image of ordinary kriged predictions. I have a shapefile of a boundary line and I'd like to crop the ordinary kriged predictions in the shape of that shapefile.

This is the code I use to generate the image: image(OK.pred,loc=grid,axes=F,useRaster=TRUE). I just want to clip an object out of the image -- when I plot them, they overlay perfectly.

It's almost identical to the issue here, https://gis.stackexchange.com/questions/167170/is-it-possible-to-clip-a-shapefile-to-an-image-in-r, but I'm relatively new to R and got totally lost with the netcdf file part.

I found a bunch of code on how to clip rasters, but I just can't figure out how to even save an image into a variable let alone transform it to a raster in order to clip it. Any help would be much appreciated!

 OK.pred<-krige.conv(gambling.geo,coords = gambling.geo$coords, data=gambling.geo$data, locations=grid,krige=krige.control(obj.model=gambling.vario.wls))

ordinarykrig = image(OK.pred,loc=grid,axes=F,useRaster=TRUE)

Macau <- readOGR("MAC_adm0.shp")

x <- crop(?...)

Solution

  • Taken from http://leg.ufpr.br/geoR/tutorials/kc2sp.R: You need to convert the kriging output to a Spatial object before you can pass it to mask(). The following should do it:

    OK.pred<-krige.conv(gambling.geo,coords = gambling.geo$coords, data=gambling.geo$data, locations=grid,krige=krige.control(obj.model=gambling.vario.wls))
    GT.s <- points2grid(SpatialPoints(as.matrix(grid)))
    reorder <- as.vector(matrix(1:nrow(grid), nc=slot(GT.s, "cells.dim")[2])[,slot(GT.s, "cells.dim")[2]:1])
    SGDF.s <- SpatialGridDataFrame(grid=GT.s, data=as.data.frame(OK.pred[1:2])[reorder,])
    r<-raster(SGDF.s)
    x<-mask(r, Macau)