Как выполнить фокусную операцию (среднее) на растре, используя окно 3х3 в R?У меня есть значения lat / long. - PullRequest
0 голосов
/ 17 мая 2018

У меня есть растровые и лат / длинные значения, я хочу выполнить фокусную операцию с этими точками, используя окно 3x3 / ядро.Я новичок в R.

1 Ответ

0 голосов
/ 19 мая 2018

Вот рабочий процесс для вычисления среднего значения растра в зонах 3x3 с центром в определенных координатах широта / долгота.

Растеризация точек и расширение полученного растра для создания зон 3х3

library(mmand)
library(raster)

# rasterize points based on lat/lon coordinates
z <- rasterize(pts[,2:3], r, field = pts$id)

# dilate z using a 3x3 box
kern <- shapeKernel(c(3,3), type="box")
z[,] <- dilate(as.matrix(z), kern)

plot(z)

enter image description here

Вычислить среднее значение r в каждой зоне

# raster::zonal function (zonal statistics) is used 
# -Inf correspond to NA values and should not be taken into account
# you can change "mean" by the stats you would like to compute
zonal(r, z, fun = "mean")

#     zone     mean
#[1,] -Inf 5.563607
#[2,]    1 5.000000
#[3,]    2 3.444444
#[4,]    3 5.222222

Пример данных

library(raster)
set.seed(1)
# Generate raster of random values
r <- raster(crs = CRS("+proj=robin +datum=WGS84"), resolution = c(10, 10))
r[] <- round(runif(ncell(r), 1, 10))
# Generate data frame with lat/lon coordinates
pts <- data.frame(id = 1:3, lon = c(-100, 40, 120), lat = c(-45, 5, 35))

plot(r)
points(pts$lon, pts$lat, pch = 20, cex = 2)

enter image description here

...