Я хотел бы извлечь пространственные данные в буфере 10 км вокруг 30 000 объектов класса SpatialLines и рассчитать долю каждого типа земного покрова вокруг буферизованных линий. В первый раз я использовал функцию crop
для обрезки растра. Затем я использовал функцию extract
(пакетный растр) для расчета доли 10 типов растительного покрова. Вот мой код:
lapply(1:nrow(tab_lines), FUN=function(k){
Первый шаг: построить буфер в 10 км вокруг линии
buf_line <- gBuffer(seg_line[k], width=10000) ## seg_line = Lines objects
Второй шаг: извлечь из растра типы земного покрова в буфере
ha <-extract(x=data_raster,y=buf_line)
Третий шаг: рассчитать соотношение 10 типов растительного покрова
Доля каждого типа земного покрова должна быть указана в столбцах (один столбец = один тип земного покрова).
ha_1 <-length(ha[[1]][ha[[1]]==1])/length(ha[[1]])
ha_2 <-length(ha[[1]][ha[[1]]==2])/length(ha[[1]])
ha_3 <-length(ha[[1]][ha[[1]]==3])/length(ha[[1]])
ha_4 <-length(ha[[1]][ha[[1]]==4])/length(ha[[1]])
ha_5 <-length(ha[[1]][ha[[1]]==5])/length(ha[[1]])
ha_6 <-length(ha[[1]][ha[[1]]==6])/length(ha[[1]])
ha_7 <-length(ha[[1]][ha[[1]]==7])/length(ha[[1]])
ha_8 <-length(ha[[1]][ha[[1]]==8])/length(ha[[1]])
ha_9 <-length(ha[[1]][ha[[1]]==9])/length(ha[[1]])
ha_10 <-length(ha[[1]][ha[[1]]==10])/length(ha[[1]])
return(cbind(ha_1, ha_2, ha_3, ha_4, ha_5, ha_6, ha_7, ha_8, ha_9, ha_10))
})
Как ускорить время обработки 30 000 пространственных линий? Существуют ли какие-либо другие пакеты в R, которые могут обеспечить более быструю обработку такого типа извлечения?