Из extract
help:
Ячейка покрыта, если ее центр находится внутри многоугольника (но см. Параметр весов для рассмотрения частично покрытых ячеек и аргумент small для получения значений для маленьких многоугольниковв любом случае).
Следовательно, вы можете использовать это, чтобы иметь количество ячеек:
data <- extract(raster, polygons, weights = T, na.rm = F)[[1]]
nrow(data)
#[1] 18
Где data
:
value weight
[1,] 8 0.003610108
[2,] 6 0.025270758
[3,] 0 0.010830325
[4,] 7 0.104693141
[5,] 0 0.066787004
[6,] 0 0.088447653
[7,] 0 0.001805054
[8,] 0 0.104693141
[9,] 0 0.010830325
[10,] 0 0.093862816
[11,] 0 0.030685921
[12,] 0 0.063176895
[13,] 0 0.057761733
[14,] 0 0.063176895
[15,] 7 0.003610108
[16,] 7 0.102888087
[17,] 0 0.093862816
[18,] 0 0.074007220
Комуиметь количество ячеек, которые пересекаются и меньше чем 1:
sum(data[, 1] < 1)
#[1] 13
РЕДАКТИРОВАТЬ
В случае нескольких полигонов, вы должны сначала растворить ваши полигоныиспользуя rgeos::gUnaryUnion
:
library(rgeos)
polygons$id <- 1
polygons <- gUnaryUnion(polygons, id = polygons$id)
# As suggested by @RobertHijmans, you can also use `raster::aggregate`
# polygons <- raster::aggregate(polygons, by = "id")
plot(raster)
plot(polygons, add = T)