さまざまな主題図のマスターグリッドとして空間グリッドが必要です。すべてのNAピクセルを破棄するラスターから空間グリッドを作成するにはどうすればよいですか?
さまざまな主題図のマスターグリッドとして空間グリッドが必要です。すべてのNAピクセルを破棄するラスターから空間グリッドを作成するにはどうすればよいですか?
回答:
以下を使用して、ラスター内のセルのすべての非NA座標を取得できます。
r = raster(matrix(runif(20),5,4))
r[r>.5]=NA
coordinates(r)[!is.na(values(r)),]
x y
[1,] 0.375 0.7
[2,] 0.125 0.5
[3,] 0.375 0.5
[4,] 0.625 0.5
[5,] 0.875 0.5
[6,] 0.125 0.3
[7,] 0.375 0.3
[8,] 0.625 0.3
[9,] 0.375 0.1
[10,] 0.875 0.1
それらはNAではない細胞です。その後、おそらくこれらをSpatialPixelsにフィードできます。
SpatialPixels(SpatialPoints(coordinates(r)[!is.na(values(r)),]))
Object of class SpatialPixels
Grid topology:
cellcentre.offset cellsize cells.dim
x 0.125 0.25 4
y 0.100 0.20 4
SpatialPoints:
x y
[1,] 0.375 0.7
[2,] 0.125 0.5
[3,] 0.375 0.5
[4,] 0.625 0.5
[5,] 0.875 0.5
[6,] 0.125 0.3
[7,] 0.375 0.3
[8,] 0.625 0.3
[9,] 0.375 0.1
[10,] 0.875 0.1
Coordinate Reference System (CRS) arguments: NA
個人的にはグリッド上のものは何でもラスターとして保持します。
私はそれがあなたが何を望んでいるのかまだ完全にはわかりません- SpatialGrid
オブジェクトは完全な長方形グリッドを定義しているので、NAピクセルがないものは意味がありません。
RasterLayerをSpatial *オブジェクト(グリッドまたはピクセル)に変換するには、強制関数「as」を使用できます。
library(raster)
r <- raster(matrix(runif(20),5,4))
r[r>.5] <- NA
g <- as(r, 'SpatialGridDataFrame')
p <- as(r, 'SpatialPixels')
plot(r)
points(p)
あなたの2つの要件は異なるものについてのようです:
1)ある種の信頼できるラスターグリッドテンプレート。
2)不足しているセルを明示的に格納しないスパースグリッド。
sp :: GridTopologyは最初のグリッドを提供します。これは、左下のセル座標(cellcentre.offset)、セル間隔(cellsize)、およびグリッドのサイズ(cells.dim)に基づくグリッドの単なる説明です。
sp :: SpatialPixelsDataFrameクラスを使用すると、疎グリッドを格納できますが、それだけで「テンプレート」よりもはるかに多くを格納します。また、すべての座標を明示的に格納します。これは2つのジョブを実行するためです。1つはグリッドからの元の座標を保持し、わずかに不規則になる可能性があります。2つは有効な値を持つセルのみを保存できます。(おそらく*これらの2つの目標は分離されているはずですが、それは別の話です)。
私はラスターパッケージがGridTopologyに明確に類似しているとは思いませんが、コンポーネントを手に入れて「独自にロール」することができます。
library(raster)
r1 <- raster(nrows=108, ncols=21, xmn=0, xmx=10)
## "cellsize"
res(r1)
## [1] 0.4761905 1.6666667
## extreme cell corners (just a different convention to sp's cellcentre)
extent(r1)
class : Extent
xmin : 0
xmax : 10
ymin : -90
ymax : 90
## we can also use bbox to get the same thing
bbox(r1)
min max
s1 0 10
s2 -90 90
## grid dimensions (including number of attributes/layers as 3rd "dim")
dim(r1)
## [1] 108 21 1
これらをすべてリンクすると、ラスターからspに移動できます。
GridTopology(bbox(r1)[,1] + res(r1)/2, res(r1), dim(r1)[2:1])
(寸法を逆にする方法に注意してください)。もう1つの簡単な方法は、SpatialGridに強制変換してspのgetGridTopologyを使用することですが、途中で座標が生成されるため、これはコストが高くなります。
getGridTopology(as(r1, "SpatialGrid"))
ラスターの「トポロジー」のこれら3つの部分はすべてが必要というわけではありません。いくつかは冗長ですが、他の方法ですべてを1つのオブジェクトとしてキャプチャする方法はありません。ただし、上で作成されたラスターは「空」であり、 GridTopologyがspに対して行うジョブ。それがどれほど「空」であるかについての詳細はわかりませんが、「データ」スロットを明示的に格納することはなく、値が含まれる場合よりも小さくなります。一般に、ラスターパッケージはメモリ使用量を最小限に抑えるために最善を尽くします。そのため、実際には「スパース」であることを心配する必要はありません。
それはもう少し説明するのに役立つかもしれませんが、私はSpacedmanの答えを重ね合わせていることを知っていますが、まだあなたが質問で何を意味しているのかまだはっきりしていません。