我希望其他地方也不会问同样的问题,因为即使这是一项基本的练习,我也无法在其他问题中找到它......
我有一个光栅,源自矢量的光栅化;在该光栅中,对应于多边形的像素被分配了一个数字(例如,属于多边形A的所有像素被分配了数字53;属于多边形H的像素被分配了数字102)。请注意原始矢量中的多边形没有ID代码(因此,多边形“A”或“H”是我现在发明的东西)。 这是我得到的光栅的结构:
> structure(lodi_C00)
class : RasterLayer
dimensions : 1994, 1932, 3852408 (nrow, ncol, ncell)
resolution : 30, 30 (x, y)
extent : 516000, 573960, 4990200, 5050020 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=utm +zone=32 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0
data source : C:\Users\Laura\Desktop\MSc thesis\Dati\3_Segmentation\Lodi_segmented\lodi_single_classes_rasterized\lodiC00.tif
names : lodiC00
values : 1, 152 (min, max)
attributes :
ID category
from: 0
to : 152 M158200079
现在我需要从此栅格中仅选择与某些多边形对应的像素,以便具有特定值的像素。我有一个我想要选择的像素值列表(有106个值):
> C00_trainingrows
[1] 152 62 74 40 102 36 14 78 79 31 35 12 9 137 7 8 43 101 52 133 59 123 23 28 49 93 11 63 72 125 1 69 86
[34] 100 112 145 128 135 32 99 34 44 61 66 47 50 131 129 95 108 76 38 109 39 64 37 53 122 57 21 55 111 113 33 91 77
[67] 132 51 88 10 13 107 24 65 105 60 87 71 147 149 17 139 25 120 124 114 27 45 103 6 84 29 144 141 22 26 5 16 75
[100] 2 41 42 126 118 54 110
所以,我希望有一个新的栅格,其中只保留值为“152”,“62”等的像素。
我知道当只选择一个值(例如152)时,这有效:
lodi_C00_training <- lodi_C00 == 152
writeRaster(lodi_C00_training, "lodi_C00_training", format="GTiff", progress="text", overwrite=TRUE)
但是,我需要拥有所有106个值。有关如何做的任何建议吗?
答案 0 :(得分:0)
如果你的光栅不是太大,你可以试试这个:
#Dummy data start
lodi_C00 <- raster(matrix(1:9))
C00_trainingrows <- c(1,5,9)
#copy your raster
lodi_C00_training <- lodi_C00
#set all pixels that are not contained in your vector to NA
lodi_C00_training[!(lodi_C00[] %in% C00_trainingrows)] <- NA
评论后编辑:
您可以尝试这样的事情:
#define function
#(setting C00_trainingsrows as a fixed paramater might not be the best practice)
selectPixels <- function(x) {
if(!is.na(x)) {
if(!(x %in% C00_trainingrows)){
x <- NA
}
}
return(x)
}
#Set up a cluster with two cores
beginCluster(2)
lodi_C00_training <- clusterR(lodi_C00,
fun=calc,
args=list(fun=selectPixels),
export='C00_trainingrows')
endCluster()