1

202 行 201 列のラスター マップがあります。このマップには、ピクセル値が 0 のグリッドがいくつかあります。すべてのピクセル値 0 グリッドの座標を返す関数を書きたいです。どうすればよいでしょうか。ループとwhileループですが、常にTRUE/FALSEと表示されますが、ここに私のサンプルコードが必要です

library(raster)
library(rgdal)
library(maptools)
library(sp)


setwd("E:/Landsat-data-NASA atm-corrected/sample_day1")
restdir2 <- ("E:/Landsat-data-NASA atm-corrected/sample_day1")
  n3 <- list.files(restdir2, pattern="*band4_clip_1.tif", full.names=TRUE)
  n4 <- list.files(restdir2, pattern="*cloud_qa_clip_1.tif", full.names=TRUE)
  n5 <- list.files(restdir2, pattern="*cloud.tif", full.names=TRUE)

create<- function(x,y)
{
 layer <- raster(n4)
 layer2 <- raster(n3)
   for(c in 1:x)
  {
    for(r in 1:y)
   {      
       nl<- layer2
       if(layer[c,r]==0)
       return layer[c,r]
   }
  }
}
create (10,10)
4

1 に答える 1

1

ここに2つの(非常に似た)アプローチがあります

library(raster)
# set up example data
r <- raster(nrow=18, ncol=36)
set.seed(0)
r[] <- round(runif(ncell(r)) * 10 - 5)

# approach 1, for a single layer
p <- rasterToPoints(r, fun=function(x){x == 0})

# approach 2, also works for multiple layers
# first remove all non zero cells
z <- subs(r, data.frame(0, 1))
p <- rasterToPoints(z)

# results
plot(r)
points(p[,1:2])

同じ空間パラメーター (範囲と解像度) を持つ複数のレイヤーがある場合

# create example data 
x1 <- setValues(r, round(runif(ncell(r)) * 10 - 5))
x2 <- setValues(r, round(runif(ncell(r)) * 10 - 5))
x3 <- setValues(r, round(runif(ncell(r)) * 10 - 5))

# combine layers
s <- stack(x1, x2, x3)

z <- subs(r, data.frame(0, 1))
p <- rasterToPoints(z)
于 2015-04-21T00:52:49.773 に答える