2017-05-17 6 views
3

J'essaie de recadrer this raster sur l'Italie mais la sortie semble manquer certaines des cellules le long de la frontière. Voir les zones surlignées en rouge dans l'image ci-dessous: enter image description hereR raster de culture en utilisant des polygones gardant les cellules le long de la frontière

Comment puis-je conserver toutes les cellules qui traversent les frontières?

ci-dessous est mon script:

library(raster) 

# Load data 
x <- raster("x.nc") 
IT <- getData(name = "GADM", country = "Italy", level = 0) 

# Mask and crop 
x_masked <- mask(x, IT) 
x_masked_cropped <- crop(x_masked, IT) 

# Plot 
plot(x_masked_cropped) 
plot(IT, add = T) 

Répondre

0

On peut identifier toutes les cellules de trame qui se croisent l'Italie et définir les restants, à savoir les pixels non sécants à NA. Assurez-vous de récupérer les cellules avec leurs poids respectifs via cellFromPolygon(..., weights = TRUE) - sinon, seules les cellules ayant leur centre en Italie seront renvoyées (voir aussi ?raster::extract).

## identify cells covering italy and set all remaining pixels to NA 
cls <- cellFromPolygon(x, IT, weights = TRUE)[[1]][, "cell"] 
x[][-cls] <- NA 

plot(trim(x)) 
plot(IT, add = TRUE) 

enter image description here

2

Voici une façon de le faire. Nous créons un masque binaire raster avec gdalUtils::gdal_rasterize, en utilisant at=TRUE pour nous assurer que la valeur 1 est gravée dans toutes les cellules touchées par le polygone d'Italie. gdal_rasterize fait référence aux fichiers sur le disque, donc écrivez d'abord IT dans un fichier pris en charge par OGR.

library(gdalUtils) 
library(rgdal) 
x_crop <- crop(x, IT) 
writeOGR(IT, tempdir(), f <- basename(tempfile()), 'ESRI Shapefile') 
gdal_rasterize(sprintf('%s/%s.shp', tempdir(), f), 
       f2 <- tempfile(fileext='.tif'), at=T, 
       tr=res(x_crop), te=c(bbox(x_crop)), burn=1, 
       init=0, a_nodata=0, ot='Byte') 

plot(x_crop*raster(f2)) # multiply the raster by 1 or NA 
plot(IT, add=TRUE) 

enter image description here