Как растеризовать геометрию SF плитка за плиткой?

То, что я ищу, - это способ растеризации (или ускорения) геометрии в каждой плитке определенной степени шаг за шагом и соединения частей растеризованной геометрии со всеми растровыми объектами.

## create sample data

# create a frame
library(sf)
ob = st_sf(st_sfc(st_polygon(list(rbind(c(0,0), c(0,9), c(6,9), c(6,0), c(0,0)))))
# create tiles
library(GSIF)
tl <- getSpatialTiles(as(ob, 'Spatial'), block.x=3, overlap.percent=2)
plot(tl)
# create sample polygons
g <- st_sfc(st_point(c(1,2)), st_point(c(5,6)), st_point(c(2,4)), st_point(c(3,3)), st_point(c(3,4)), st_point(c(4,5)))
g.b <- st_buffer(g,0.6)
p <- st_sf(value = ceiling(10*runif(6)),
           geometry = st_sfc(g.b))
plot(p, add=TRUE)

Думаю, обрезка полигонов (или частей полигонов), которые находятся внутри каждого тайла, работает нормально. Моя фактическая цель - обработать плитку данных за плиткой. Похоже, следующий цикл делает это, а также соединяет части полигонов с целыми полигонами. Что ж, выход (cr) такой же, как ввод (p)... Я подумал, что этот шаг может быть необходим для растеризации полученных (частей) полигонов на следующем шаге. Я не ожидал, что полигоны будут соединены. Я пытался построить цикл на основе промежуточного результата, поэтому добавляются следующие строки:

# crop polygons (or parts) for each tile
result <- p
for(i in 1:length(tl)) {cr <- rbind(result, st_crop(p, tl[i]))}
cr <- cr[-7,]
library(scales)
plot(st_geometry(cr), col=alpha("white", 0.5), add=TRUE)

Однако я изо всех сил пытаюсь растеризовать (промежуточные) результаты.


person ilex    schedule 12.05.2020    source источник


Ответы (1)


Попробуй это:

myF <- function(i){return(st_crop(p, tl[i]))}
cr <- do.call(rbind, lapply(1:length(tl), myF))
person bevingtona    schedule 06.06.2020