1

私はリモート センシングに基づいてラスター ファイルを扱っています。圧縮されたサンプル ファイルについては、彼女を参照してください:

さらに分析するために、値が -999 (つまり水) のセルを NA に変更したいと思います。私はもう試した:

for (i in 1:length(nlist)){
  r=raster(nlist[i])
  calc( r , function(x) { x[ x == -999 ] <- NA; return(x) } ,overwrite=T, filename=paste(names(r),"NA_edited"), format="GTiff")
}

f2 <- function(x) {
  v <- getValues(x)
  v[v<0]<-NA
  x <- setValues(x, v)
  return(x)
}

for (i in 1:length(nlist)){
  r=raster(nlist[i])
  r=f2(r)
  writeRaster(r,filename=paste(names(r),"NA_edited"), format="GTiff",overwrite=T)
}

ここで、nlist はファイルの場所のベクトルです (つまり、list.files())。

-999 を取り除き、NA 値を作成しますが、何らかの理由で他の値も変更します。すべての値がわずかに高くなるように見えます。たとえば、1 つのレイヤーの最大値が 160 から 177 になります。

何らかの補間が行われているのでしょうか、それとも私が見逃したモジョが行われているのでしょうか? などのサンプル ラスターではこれを再現できませんraster(system.file("external/test.grd", package="raster"))。ファイルのフォーマットに関係があるのではないかと思うのはなぜですか?

乾杯!

4

1 に答える 1

2

rasterパッケージを使用しているため、手動で -999 の値を に置き換えるのではなく、関数を使用してラスターの値NAvalueを指定してみてください。NANA

によると?NAvalue

NAvalue は、NA 値をディスク (「ラスター」タイプのファイル) に書き込むために使用される値を返します。Raster* オブジェクトの NA 値を設定すると、ファイルから値を読み取るときに、この値は NA として解釈されます。すでにメモリにある値は影響を受けません。

NA 値がゼロより小さい場合、その数値以下のすべての値が NA に設定されます。

ヘルプ ファイルの例:

r1 <- raster(system.file("external/rlogo.grd", package="raster"))
r2 <- r1
NAvalue(r2)
NAvalue(r2) <- 255
#plot(r1)
#plot(r2)

あなたの問題については、ラスターをロードして(たとえば、r <- raster(file))、関数を使用するNAvalue(r) <- -999と、ラスター内のすべての値rvalues <= -999asで指定する必要がありますNA

于 2013-11-08T19:12:17.097 に答える