0

の複数の属性を「ラスタライズ」する必要がありますSpatialPolygonsDataframe。次に、各ラスター レイヤーの値に、指定されたベクター (「gp」など) の値を掛けます。wrld_simpl最初からデータセットを使用していmaptoolsます。wrld_simpl には POP2005 という属性があり、年 (2010:2100) の推定人口に対応する属性をさらに追加します。各属性を手動でラスタライズし、新しい値を個別に計算してから、これらすべての手順を何度も繰り返す必要がないように、ループまたは関数を作成しようとしています。

data(wrld_simpl)  
gp <- seq(1,246)  

myraster <- raster(nrow = 572, ncol = 1440, xmn = -180, xmx = 180, ymn= -58, ymx = 85)  

rasterize() 関数では、spatialPolygonsDataframe から特定の属性を選択できないため、代わりに raster:::.polygonsToRaster() を使用して (まったく同じことを行います)、属性をラスター レイヤーに変換しました。

rastergp <- raster:::.polygonsToRaster(wrld_simpl, myraster, field = wrld_simpl$POP2005)  
stackraster <- stack(rastergp, gp)  
estimation <- calc(stackraster, fun = function(x) x[1]*x[2])  

続行する方法について何か提案はありますか? どうもありがとう!

4

1 に答える 1

3

うーん、何をしようとしているのかを説明するために、スクリプトを最小限に削減する必要があります。そこには、関連性がなく、気を散らし、私たちがそれを理解するのを妨げているものがいくつかあります.

あなたがやろうとしていると思うこと (文書化されていない隠し関数 raster:::.polygonsToRaster を使用するとわかりにくい) は、位置のグリッドでポリゴンの属性の値を取得することですか? これを行うには、(ラスターではなく) ポイントのグリッドをポリゴンに重ねます。

ここでは、より小さいグリッドで実行します。解像度には 100 倍の時間がかかります。

 > myraster <- raster(nrow = 57, ncol = 144, xmn = -180, xmx = 180, ymn= -58, ymx = 85)
 > pts = SpatialPoints(xyFromCell(myraster,1:prod(dim(myraster))),proj4string=CRS(proj4string(wrld_simpl)))
 > overGrid = pts %over% wrld_simpl

これで、overGrid は、すべてのグリッド ポイントで wlrd_simpl からの値を持つ単なる標準データ フレームになります。ラスターと同じ順序です。したがって:

> POP2010 = myraster
> POP2010[] = overGrid$POP2010
> plot(POP2010)

POP2010 ラスターをマッピングします。比較:

> spplot(wrld_simpl,"POP2010")

これで、すべてのオーバーレイ ビジネスが完了しました。その後、overGrid の列からスタックを作成できます。

于 2012-07-23T16:41:50.753 に答える