Как вырезать / обрезать / замаскировать результат автозамены с помощью полигона?

Я занят разработкой модуля, который реализует autoKrige (библиотеку automap) для данных образцов почвы с размером ячейки 20x20 м. Как только кригинг будет завершен, я хотел бы обрезать / замаскировать результат кригинга с границей поля.

Проблема с кадрированием / маскированием заключается в том, что (из-за ячеек 20x20) граница поля дает эффект "шага". То, что я ищу, - это гладкая граница (прорезание клеток).

Ниже приведен код для генерации двух сценариев, описанных выше:

library(sp)
library(rgeos)

#create polygon
r1 <- cbind(c(641777, 642290, 642276, 641794), c(7036885, 7036743, 7036154, 7036146))
r2 <- cbind(c(642320, 642478, 642494, 642314), c(7036732, 7036699, 7036296, 7036290))
sr1 <- Polygons(list(Polygon(r1)),"r1")
sr2 <- Polygons(list(Polygon(r2)),"r2")
boundary.sp <- SpatialPolygons(list(sr1,sr2))
boundary.sp@proj4string <- CRS('+proj=utm +zone=35 +south +datum=WGS84 +units=m +no_defs')

#create bounding box grid
bbox <- bbox(boundary.sp)
boundary.grid <- expand.grid(x = seq(from = bbox[1], to = bbox[3], by = 20), y = seq(from = bbox[2], to = bbox[4], by = 20))
coordinates(boundary.grid) <- ~x + y
gridded(boundary.grid) <- TRUE
boundary.grid@proj4string <- boundary.sp@proj4string

#create SpatialPixels grid
boundary.grid.stepped <- boundary.grid[!is.na(over(boundary.grid, boundary.sp)),]
plot(boundary.grid.stepped)

#cut grid with polygon to create SpatialPolygons grid
boundary.poly.grid <- as.SpatialPolygons.GridTopology(getGridTopology(boundary.grid), proj4string = CRS('+proj=utm +zone=35 +south +datum=WGS84 +units=m +no_defs'))
boundary.grid.smooth <- gIntersection(boundary.poly.grid, boundary.sp, byid=TRUE)
plot(boundary.grid.smooth)

В настоящее время вышеуказанная сетка (border.grid.stepped) передается как параметр 'new_data' при вызове autoKrige.

Какой подход лучше и как мне его реализовать:

1) Подготовьте целевую сетку заранее и используйте ее как 'new_data' или,

2) Есть ли кригинг на ограничивающей рамке сетки и затем вырезать / обрезать / маскировать?

1 ответ

Я бы сказал, сделать сетку непосредственно на целевой сетке, передавая его new_data, Результат кригинга зависит только от входных данных, поэтому я подозреваю, что есть небольшая разница между кадрированием / вычислением и вычислением / кадрированием.

Другие вопросы по тегам