Skip to content
Snippets Groups Projects
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)
  }