2017-05-17 15 views
3

私はイタリアの上でthis rasterをトリミングしようとしていますが、出力が境界に沿っていくつかのセルを見逃しているようです。下の図の赤で強調表示されている部分を参照してください。 enter image description here境界線に沿ってポリゴンを保持しているR作図ラスター

どのように境界を越えているすべてのセルを保持できますか?

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) 

答えて

0

あなたがイタリアと交差する全てのラスタセルを識別し、NAに残り、すなわち非交差ピクセルを設定することができました。 cellFromPolygon(..., weights = TRUE)を介してそれぞれの重みを持つセルを取得することを忘れないでください。そうでなければ、イタリアを中心とするセルだけが返されます(?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

ここでそれを行うための一つの方法だ:

以下は私のスクリプトです。 gdalUtils::gdal_rasterizeのバイナリマスクラスタを作成し、at=TRUEを使用して、値1がイタリアのポリゴンがタッチされたすべてのセルに焼き付くようにします。 gdal_rasterizeはディスク上のファイルを参照するので、最初にOGR対応ファイルにITを書き出してください。

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

関連する問題