2016-07-27 6 views
3

ラスタ値をSpatialPointsに変更するには、単に[を使用します。変更された値(右)とSpatialPoints(左)とラスタと空間ポリゴンを使用してラスタ値を変更する

r1 <- r 
r1[rTpS] <- 99999 
plot(r1) 

ラスター: Raster with SpatialPoints (left) and raster with changed values (right)

r <- raster(system.file("external/test.grd", package="raster")) 
rTp <- rasterToPoints(r, spatial = T) 

set.seed(666) 
rTpS <- rTp[sample(1:length(rTp), 500),] 
plot(r) 
plot(rTpS, add = TRUE, pch = ".") 

次に、空間点の下にラスタ値は、次のように変更されます

したがって、ポリゴンは同じように動作すると仮定しました。したがって、このラスタデータセットからいくつかのポリゴンを生成します。

rst <- as.integer(stretch(r, 0, 10)) 
rTpol <- rasterToPolygons(rst, dissolve = T) 
rTpol <- rTpol[rTpol$layer > 3,] 

plot(r) 
plot(rTpol, add = T) 

rst[rTpol[,]] <- 100 
plot(rst) 

# also tried 
# rst[rTpol] <- 100 

しかし、私はポリゴンの一部SpatialPolygons、何とかID(か何か)以下のラスタ値を変更しようとします。しかし、それが妙に変更された値(右)とSpatialPolygons(左)とラスターと100

ラスターする必要があります:したがって Raster with SpatialPolygons (left) and raster with strangely changed values (right)

、私の質問は、ポリゴン内のラスタの値を変更する方法です。

答えて

2

最後に、私は自分自身で答えを見つけました。

機能rasterize()がこの問題の解決に役立ちます。

r <- raster(system.file("external/test.grd", package="raster")) 
rst <- as.integer(stretch(r, 0, 10)) 
plot(rst) 
rTpol <- rasterToPolygons(rst, dissolve = TRUE) 
rTpol <- rTpol[rTpol$layer > 3,] 
plot(rTpol) 

rpol <- rasterize(rTpol, rst, field = 100, update = TRUE) 
plot(rpol) 

rasterize()update = TRUEラスタをとり、すべてのセルは、フィールド値とポリゴンに対応WICH更新しながら、ポリゴンから発生rastercellsにfield =値を置きます。 enter image description here

+0

良い解決策ですが、あなたのオリジナルのソリューションは、よりエレガントだった---と働いている必要があること:

結果は次のようになります。このバグは、(今後リリース予定の)ラスターバージョン2.5-16で修正されました。 – RobertH

+0

@RobertH:ラスターパッケージへの更新がすでに進行中であるかどうか知っていますか? – loki

関連する問題