ラスターから空間グリッドを作成する方法は?


9

さまざまな主題図のマスターグリッドとして空間グリッドが必要です。すべてのNAピクセルを破棄するラスターから空間グリッドを作成するにはどうすればよいですか?


6
ここにスクラップを投げてください。ラスターを作成するための小さなコードと、それに対して何を期待していますか?
Spacedman

回答:


14

以下を使用して、ラスター内のセルのすべての非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ピクセルがないものは意味がありません。


ありがとうメイト、私も何をしたいのかわからない。さまざまな空間点データから同一のラスターマップ(解像度、座標、CRSなど)を生成するワークフローを開発しようとしています。ラスタ化は、空間点散乱のためにオプションではありません。iwdまたは同様のものを使用する必要があります。そうです、グリッドは長方形です。マスターテンプレートとして必要なのは、おそらくSpatialPointsDataFrameです。グリッド化できます。S.
Janbob Squarebrains 2012

おそらくマスターラスタ(ha!)が必要であり、その後、それに続くすべてのグリッドを同時に作成します。
レーダー

2
同意した。グリッド化されている場合、ほとんどの場合ラスターが答えです。それか、Rで約20ページのApplied Spatial Data Analysisを調べて、SpatialPixelsの方法を理解します。今日、私はその選択を博士課程の学生に与えました。彼は...賢く選んだ!
Spacedman

20

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)

7

あなたの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の答えを重ね合わせていることを知っていますが、まだあなたが質問で何を意味しているのかまだはっきりしていません。

  • (間違いなく、スパースセルは明示的な座標ではなくインデックスを格納するだけで格納でき、元々「わずかに不規則な」セル座標は、本当に必要な場合は属性として格納できます。spもラスターも不規則なラスターをまったく扱いません。単純な直線的なケースすらありません-これはほとんどのGISツールに準拠していますが、NetCDFなどの形式ではかなり一般的であり、Rの古き良きグラフィックス:: image関数で処理されるため、残念です(ただし、最近のrasterImageオプションが使用されている場合は除きます)。 。)

私が消化する必要がある非常に有益なステートメントをありがとう。うまくいけば、私の問題を解決したり、より明確な質問を投稿したりできます!
Janbob Squarebrains

また、@ Spacedman:質問の背景をここのフォーラムで
Janbob Squarebrains
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.