Skip to content
Snippets Groups Projects
Select Git revision
  • 8d7934cf2fdef530e887a3f684cab0dda051138c
  • master default protected
  • beta
  • dev
  • andrewssobral-patch-1
  • update
  • thomas-fork
  • 2.0
  • v3.2.0
  • v3.1.0
  • v3.0
  • bgslib_py27_ocv3_win64
  • bgslib_java_2.0.0
  • bgslib_console_2.0.0
  • bgslib_matlab_win64_2.0.0
  • bgslib_qtgui_2.0.0
  • 2.0.0
  • bgs_console_2.0.0
  • bgs_matlab_win64_2.0.0
  • bgs_qtgui_2.0.0
  • v1.9.2_x86_mfc_gui
  • v1.9.2_x64_java_gui
  • v1.9.2_x86_java_gui
23 results

ct-examples.sublime-project

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    A98_PredictorsExtract.R 2.31 KiB
    
    PredExtr <- function(x.shp, myfunction=NA, output,  
                         toextract, typp=c("raster", "shp"), ncores, chunkn=1, chunk.i=NA){
      print("Load Packages")
      require(foreach)
      require(parallel)
      require(doParallel)
      require(raster)
      require(rgeos)
      require(rgdal) 
     
      print(paste("Loading", typp, "data :", toextract))
      print(paste("output will be:", output))
      if(typp=="raster"){ mypredictor <- raster(toextract)} else
        mypredictor <- readOGR(toextract)
      header.shp <-readOGR(x.shp)
      crs(mypredictor) <- crs(header.shp) #should be verified beforehand!
    
      ## Divide in chunks if requested
      if(chunkn>1 & !is.na(chunk.i)){
        print(paste("divide in chunks and run on chunk n.", chunk.i))
        indices <- 1:length(header.shp)
        chunks <- split(indices, sort(indices%%chunkn))
        header.shp <- header.shp[chunks[[chunk.i]],]
        } 
    
      # define ancillary functions
      robust.mean <- function(x){mean(x, rm.na=T)}
      robust.mode <- function(x){if(any(x!=0)) {
     	 a <- x[which(x!=0)] #exclude zero (i.e. NAs)
      	return(as.numeric(names(sort(table(a), decreasing=T))[1]))} else
    	    return(NA)                          }
    
      print("go parallel")
      cl <- makeForkCluster(ncores, outfile="" )
      registerDoParallel(cl)
    
      print("start main foreach loop")
      if(typp=="raster"){
      out <- foreach(i=1:length(header.shp), .packages=c('raster'), .combine=rbind) %dopar% { 
        tmp <- raster::extract(mypredictor, header.shp[i,], 
                             buffer=min(10000,  max(250, header.shp@data$loc.uncert[i])), fun=myfunction) 
        }
      write.csv(out, file = output)
      } else {
        out <- sp::over(x=header.shp, y=mypredictor) 
        toassign <- header.shp[which(is.na(out[,1])),]
        print(paste(length(toassign), "plots not matched directely - seek for NN"))
      if(length(toassign)>0){
        
        nearest <- foreach(i=1:length(toassign), .packages=c('raster'), .combine=rbind) %dopar% { 
          print(i)
          nearest.tmp <- tryCatch(geosphere::dist2Line(header.shp[i,], mypredictor),
                                  error = function(e){data.frame(distance=NA, lon=NA, lat=NA,ID=NA)}
                                  )
          #nearest.tmp <- geosphere::dist2Line(toassign[i,], mypredictor)
          return(nearest.tmp)
        }
        
    
        out[which(is.na(out[,1])),] <- mypredictor@data[nearest[,"ID"],]
       }
        write.csv(out, file=output)
      }
      stopCluster(cl)
      }