Something went wrong on our end
-
Francesco Sabatini authoredFrancesco Sabatini authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
A97_EcoregionsExtract.R 1.35 KiB
library(foreach)
library(parallel)
library(doParallel)
library(raster)
library(rgeos)
library(rgdal)
library(sp)
library(geosphere)
print("Packages loaded")
PredExtr <- function(points, toextract, output, chunkn, ncores){
print("Loading data")
print(paste("Chunk no.", chunkn))
print(toextract)
mypredictor <- readOGR(toextract)
mypoints <- readOGR(points)
indices <- 1:length(mypoints)
chunks <- split(indices, sort(indices%%99))
print(paste("Working on", paste0(head(chunks[[chunkn]]), collapse=" "), "...", paste0(tail(chunks[[chunkn]]), collapse=" " )))
print("go parallel")
cl <- makeForkCluster(ncores, outfile="" )
registerDoParallel(cl)
print("start main foreach loop")
if(!identical(crs(mypredictor), crs(mypoints))) {mypredictor <- spTransform(mypredictor, crs(mypoints))}
nearestPredictor <- foreach(i=chunks[[chunkn]], .packages=c('raster'), .combine=rbind) %dopar% {
nearestPredictor.tmp <- tryCatch(data.frame(mypoints[i,"PlotID"],
geosphere::dist2Line(mypoints[i,], mypredictor)),
error = function(e){data.frame(mypoints[i,"PlotID"], distance=NA, lon=NA, lat=NA, ID=NA)}
)
return(nearestPredictor.tmp)
print(paste("plot no.", i, "done"))
}
print(paste("printing to output", output))
write.csv(nearestPredictor, file = output)
}