R/getData.R

Defines functions getData .nchar .download .ISO ccodes .IFNCODE ifncodes .getCountry .getDataPath .GADM .cmip5 .worldclim .raster .SRTM .IFN .SER .SERAR .RFN

Documented in .cmip5 .download .GADM .getCountry getData .getDataPath .IFN .IFNCODE .ISO .nchar .raster .RFN .SER .SERAR .SRTM .worldclim

#' Telecharge les donnees brutes GADM, SRTM, Altitude, Worldclim, CMIP5, Countries, IFN, SER, SERAR
#'
#' @description La fonction permet de telecharger les donnees brutes IFN.
#'
#' @return La fonction renvoie un SpatialPointDataFrame contenant les placettes IFN arbres avec l'ensemble des
#' attributs descriptifs des placettes IFN.
#'
#' @author Pascal Obstetar
#'
#' @details 'alt' ; les donnees sont aggregees a partir des donnees SRTM 90 m de resolution entre les latitudes
#' -60 et 60. 'GADM' est la base de donnees des limites administratives des pays. 'worldclim' est la base de
#' donnees climatiques interpoles. 'SRTM' est la base de donnees CGIAR-SRTM (90 m resolution). 'countries'
#' sont les polygones des pays a haute resolution.
#'
#' Si \code{name} est 'alt' ou 'GADM' vous devez specifier l'argument 'country='. Countries sont donnes par leur
#' code ISO a 3 lettres. Utiliser getData('ISO3') pour visualiser les codes. Dans le cas de GADM vous devez specifier
#' le niveau de subdivision du pays (0=pays, 1=premier niveau de subdivision). Dans le cas de alt vous pouvez specifier
#' l'argument 'mask' a FALSE. Si il est a la valeur TRUE les pays voisins sont instancies a NA. Par exemple :
#'
#' \code{getData('GADM', country='FRA', level=1)}
#'
#' \code{getData('alt', country='FRA', mask=TRUE)}
#'
#' Si \code{name} est 'SRTM' vous devez specifier les arguments 'lon' et 'lat' (longitude et latitude).
#' Ce sont les coordonnees entieres de la zone SRTM que vous desirez.
#'
#' \code{getData('SRTM', lon=5, lat=45)}
#'
#' Si \code{name='worldclim'} vous devez specifier les arguments \code{var}, et une resolution \code{res}.
#' Les variables valides sont 'tmin', 'tmax', 'prec' et 'bio'. Les resolutions valides sont 0.5, 2.5, 5,
#' et 10 (en degres minutes). Dans le cas \code{res=0.5}, vous devez specifier l'argument \code{lon}
#' et \code{lat} ; pour les basses resolutions les variables globales sont telechargees.
#' Dans tous les cas, 12 (mois) fichiers sont charges pour chaque variable excepte pour la variable 'bio'
#' qui contient 19 fichiers.
#'
#' \code{getData('worldclim', var='tmin', res=0.5, lon=5, lat=45)}
#'
#' \code{getData('worldclim', var='bio', res=10)}
#'
#' Pour obtenir les previsions futures climatiques (CMIP5), vous devez specifier les arguments \code{var}
#' et \code{res}. Seules les resolutions 2.5, 5, et 10 sont utilisees.
#' En option, vous devez renseigner \code{model}, \code{rcp} et \code{year}.
#' Par exemple :
#'
#' \code{getData('CMIP5', var='tmin', res=10, rcp=85, model='AC', year=70)}
#'
#' function (var, model, rcp, year, res, lon, lat, path, download = TRUE)
#'
#' 'model' est une des valeurs entre 'AC', 'BC', 'CC', 'CE', 'CN', 'GF', 'GD', 'GS', 'HD', 'HG', 'HE',
#' 'IN', 'IP', 'MI', 'MR', 'MC', 'MP', 'MG', ou 'NO'.
#'
#' 'rcp' est une des valeurs entre 26, 45, 60, ou 85.
#'
#' 'year' est une des valeurs entre 50 ou 70
#'
#' Toutes les combinaisons ne sont pas correctes. Voir www.worldclim.org pour plus de details.
#'
#' @references Pour l'IFN, SER et SERAR voir : \url{http://www.ign.fr/} -
#' Pour les donnees GADM : \url{http://www.gadm.org/} -
#' Pour les donnees SRTM : \url{http://srtm.csi.cgiar.org/SELECTION/inputCoord.asp} -
#' Pour les donnees worldclim : \url{http://worldclim.org/version2} -
#' Pour les donnees CMIP5 : \url{https://esgf-node.llnl.gov/search/cmip5/}
#'
#' @param name = name
#' @param download = download
#' @param path = path
#' @param ... = another arguments
#'
#' @export getData
#'
#' @examples
#' \dontrun{
#' ## Exemple 1
#' # Chargement de toutes les donnees brutes IFN dans le repertoire IFN
#' # cree a la racine du repertoire de sauvegarde
#' # toto renvoie TRUE si la sauvegarde se deroule correctement
#' toto <- getData(name='IFN', download = T, annee=2006)
#' }
#'
getData <- function(name = "GADM", download = TRUE, path = "", ...) {
  path <- .getDataPath(path)
  if (name == "GADM") {
    .GADM(..., download = download, path = path, version = 3.6)
  } else if (name == "SRTM") {
    .SRTM(..., download = download, path = path)
  } else if (name == "alt") {
    .raster(..., name = name, download = download, path = path)
  } else if (name == "worldclim") {
    .worldclim(..., download = download, path = path)
  } else if (name == "CMIP5") {
    .cmip5(..., download = download, path = path)
  } else if (name == "ISO3") {
    ccodes()[, c(2, 1)]
  } else if (name == "IFNCODE") {
    ifncodes()
  } else if (name == "SER") {
    .SER(..., download = download, path = path)
  } else if (name == "SERAR") {
    .SERAR(..., download = download, path = path)
  } else if (name == "RFN") {
    .RFN(..., download = download, path = path)
  } else if (name == "IFN") {
    .IFN(..., download = download, path = path)
  } else {
    stop(name, " not recognized as a valid name.")
  }
}

#' .nchar
#'
#' @param x
#'
#' @return
#'
.nchar <- function(x) {
  x[is.na(x)] <- ""
  sapply(strsplit(x, NULL), length)
}

#' .download
#'
#' @param aurl = aurl
#' @param filename = filename
#'
#' @return = file
#'
.download <- function(aurl, filename) {
  fn <- paste(tempfile(), ".download", sep = "")
  res <- utils::download.file(url = aurl, destfile = fn, method = "auto", quiet = FALSE, mode = "wb", cacheOK = TRUE)
  if (res == 0) {
    w <- getOption("warn")
    on.exit(options(warn = w))
    options(warn = -1)
    if (!file.rename(fn, filename)) {
      file.copy(fn, filename)
      file.remove(fn)
    }
  } else {
    stop("could not download the file")
  }
}

#' .ISO
#'
#' @return = ISO
#'
#' @examples
#' \dontrun{
#' getData('ISO3')
#' }
#'
.ISO <- function() {
  ccodes()
}

ccodes <- function() {
  path <- system.file(package = "gftools")
  readRDS(file.path(path, "extdata/countries.rds"))
}

#' .IFNCODE
#'
#' @return La liste des codes utilises a l'IFN
#'
#' @examples
#' \dontrun{
#' getData('IFNCODE')
#' }
#'
.IFNCODE <- function() {
  ifncodes()
}

ifncodes <- function() {
  path <- system.file(package = "gftools")
  readRDS(file.path(path, "extdata/ifncodes.rds"))
}

#' .getCountry
#'
#' @param country
#'
.getCountry <- function(country = "") {
  country <- toupper(raster::trim(country[1]))
  cs <- ccodes()
  cs <- sapply(cs, toupper)
  cs <- data.frame(cs, stringsAsFactors = FALSE)
  nc <- .nchar(country)
  if (nc == 3) {
    if (country %in% cs$ISO3) {
      return(country)
    } else {
      stop("unknown country ISO3")
    }
  } else if (nc == 2) {
    if (country %in% cs$ISO2) {
      i <- which(country == cs$ISO2)
      return(cs$ISO3[i])
    } else {
      stop("unknown country ISO2")
    }
  } else if (country %in% cs[, 1]) {
    i <- which(country == cs[, 1])
    return(cs$ISO3[i])
  } else if (country %in% cs[, 4]) {
    i <- which(country == cs[, 4])
    return(cs$ISO3[i])
  } else if (country %in% cs[, 5]) {
    i <- which(country == cs[, 5])
    return(cs$ISO3[i])
  } else {
    stop("provide a valid name name or 3 letter ISO country code; you can get a list with \"getData('ISO3')\"")
  }
}

#' .getDataPath
#'
#' @param path = path
#'
#' @export
#'
.getDataPath <- function(path) {
  path <- raster::trim(path)
  if (path == "") {
    path <- getwd()
  } else {
    if (substr(path, .nchar(path) - 1, .nchar(path)) == "//") {
      p <- substr(path, 1, .nchar(path) - 2)
    } else if (substr(path, .nchar(path), .nchar(path)) == "/" | substr(path, .nchar(path), .nchar(path)) == "\\") {
      p <- substr(path, 1, .nchar(path) - 1)
    } else {
      p <- path
    }
    if (!file.exists(p) & !file.exists(path)) {
      stop("path does not exist: ", path)
    }
  }
  if (substr(path, .nchar(path), .nchar(path)) != "/" & substr(path, .nchar(path), .nchar(path)) != "\\") {
    path <- paste(path, "/", sep = "")
  }
  return(path)
}

#' .GADM
#'
#' @param country = country
#' @param level = level
#' @param download = download
#' @param path = path
#' @param version = version
#'
#' @return = files
#'
#' @examples
#' \dontrun{
#' fr <- gftools::getData('GADM', country='FRA', level=0)
#' plot(res["GID_0"])
#' }
#'
.GADM <- function(country, level, download, path, version) {
  country <- .getCountry(country)
  if (missing(level)) {
    stop("provide a \"level=\" argument; levels can be 0, 1, 2 for most countries, and higher for some")
  }
  filename <- paste0(path, "gadm36_", country, "_", level, "_sf.rds")
  if (!file.exists(filename)) {
    if (download) {
      baseurl <- paste0("https://biogeo.ucdavis.edu/data/gadm", version)
      theurl <- paste0(baseurl, "/Rsf/gadm36_", country, "_", level, "_sf.rds")
      .download(theurl, filename)
    } else {
      message("File not available locally. Use 'download = TRUE'")
    }
  }
  if (file.exists(filename)) {
    readRDS(filename)
    return(data)
  } else {
    return(NULL)
  }
}

#' .cmip5
#'
#' @param var = var
#' @param model = model
#' @param rcp = rcp
#' @param year = year
#' @param res = res
#' @param lon = lon
#' @param lat = lat
#' @param path = path
#' @param download = download
#'
.cmip5 <- function(var, model, rcp, year, res, lon, lat, path, download = TRUE) {
  if (!res %in% c(0.5, 2.5, 5, 10)) {
    stop("resolution should be one of: 2.5, 5, 10")
  }
  if (res == 2.5) {
    res <- "2_5m"
  } else if (res == 0.5) {
    res <- "30s"
  } else {
    res <- paste(res, "m", sep = "")
  }
  var <- tolower(var[1])
  vars <- c("tmin", "tmax", "prec", "bio")
  stopifnot(var %in% vars)
  var <- c("tn", "tx", "pr", "bi")[match(var, vars)]
  model <- toupper(model)
  models <- c("AC", "BC", "CC", "CE", "CN", "GF", "GD", "GS", "HD", "HG", "HE", "IN", "IP", "MI", "MR", "MC", "MP", "MG", "NO")
  stopifnot(model %in% models)
  rcps <- c(26, 45, 60, 85)
  stopifnot(rcp %in% rcps)
  stopifnot(year %in% c(50, 70))
  m <- matrix(c(
    0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1,
    1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
  ), ncol = 4)
  i <- m[which(model == models), which(rcp == rcps)]
  if (!i) {
    warning("this combination of rcp and model is not available")
    return(invisible(NULL))
  }
  path <- paste(path, "/cmip5/", res, "/", sep = "")
  dir.create(path, recursive = TRUE, showWarnings = FALSE)
  zip <- tolower(paste(model, rcp, var, year, ".zip", sep = ""))
  theurl <- paste("http://biogeo.ucdavis.edu/data/climate/cmip5/", res, "/", zip, sep = "")
  zipfile <- paste(path, zip, sep = "")
  if (var == "bi") {
    n <- 19
  } else {
    n <- 12
  }
  tifs <- paste(raster::extension(zip, ""), 1:n, ".tif", sep = "")
  files <- paste(path, tifs, sep = "")
  fc <- sum(file.exists(files))
  if (fc < n) {
    if (!file.exists(zipfile)) {
      if (download) {
        .download(theurl, zipfile)
      } else {
        stop("File not available locally. Use 'download = TRUE'")
      }
    }
    utils::unzip(zipfile, exdir = dirname(zipfile))
  }
  raster::stack(paste(path, tifs, sep = ""))
}

#' .worldclim
#'
#' @param var = var
#' @param res = res
#' @param lon = lon
#' @param lat = lat
#' @param path = path
#' @param download = dowload
#'
#' @return = shapefile
#'
#' @examples
#' \dontrun{
#' wc <- getData('worldclim', var='tmin', res=0.5, lon=5, lat=45)
#' plot(wc)
#' bb <- getData('worldclim', var='bio', res=10)
#' plot(bb)
#' }
#'
.worldclim <- function(var, res, lon, lat, path, download = TRUE) {
  if (!res %in% c(0.5, 2.5, 5, 10)) {
    stop("resolution should be one of: 0.5, 2.5, 5, 10")
  }
  if (res == 2.5) {
    res <- "2-5"
  }
  stopifnot(var %in% c("tmean", "tmin", "tmax", "prec", "bio", "alt"))
  path <- paste(path, "wc", res, "/", sep = "")
  dir.create(path, showWarnings = FALSE)
  if (res == 0.5) {
    lon <- min(180, max(-180, lon))
    lat <- min(90, max(-60, lat))
    rs <- raster::raster(nrows = 5, ncols = 12, xmn = -180, xmx = 180, ymn = -60, ymx = 90)
    row <- raster::rowFromY(rs, lat) - 1
    col <- raster::colFromX(rs, lon) - 1
    rc <- paste(row, col, sep = "")
    zip <- paste(var, "_", rc, ".zip", sep = "")
    zipfile <- paste(path, zip, sep = "")
    if (var == "alt") {
      bilfiles <- paste(var, "_", rc, ".bil", sep = "")
      hdrfiles <- paste(var, "_", rc, ".hdr", sep = "")
    } else if (var != "bio") {
      bilfiles <- paste(var, 1:12, "_", rc, ".bil", sep = "")
      hdrfiles <- paste(var, 1:12, "_", rc, ".hdr", sep = "")
    } else {
      bilfiles <- paste(var, 1:19, "_", rc, ".bil", sep = "")
      hdrfiles <- paste(var, 1:19, "_", rc, ".hdr", sep = "")
    }
    theurl <- paste("http://biogeo.ucdavis.edu/data/climate/worldclim/1_4/tiles/cur/", zip, sep = "")
  } else {
    zip <- paste(var, "_", res, "m_bil.zip", sep = "")
    zipfile <- paste(path, zip, sep = "")
    if (var == "alt") {
      bilfiles <- paste(var, ".bil", sep = "")
      hdrfiles <- paste(var, ".hdr", sep = "")
    } else if (var != "bio") {
      bilfiles <- paste(var, 1:12, ".bil", sep = "")
      hdrfiles <- paste(var, 1:12, ".hdr", sep = "")
    } else {
      bilfiles <- paste(var, 1:19, ".bil", sep = "")
      hdrfiles <- paste(var, 1:19, ".hdr", sep = "")
    }
    theurl <- paste("http://biogeo.ucdavis.edu/data/climate/worldclim/1_4/grid/cur/", zip, sep = "")
  }
  files <- c(paste(path, bilfiles, sep = ""), paste(path, hdrfiles, sep = ""))
  fc <- sum(file.exists(files))
  if (fc < length(files)) {
    if (!file.exists(zipfile)) {
      if (download) {
        .download(theurl, zipfile)
        if (!file.exists(zipfile)) {
          message("\n Could not download file -- perhaps it does not exist")
        }
      } else {
        stop("File not available locally. Use 'download = TRUE'")
      }
    }
    utils::unzip(zipfile, exdir = dirname(zipfile))
    for (h in paste(path, hdrfiles, sep = "")) {
      x <- readLines(h)
      x <- c(x[1:14], "PIXELTYPE     SIGNEDINT", x[15:length(x)])
      writeLines(x, h)
    }
  }
  if (var == "alt") {
    st <- raster::raster(paste(path, bilfiles, sep = ""))
  } else {
    st <- raster::stack(paste(path, bilfiles, sep = ""))
  }
  raster::projection(st) <- "+proj=longlat +datum=WGS84"
  return(st)
}

#' .raster
#'
#' @param country = country
#' @param name = name
#' @param mask = mask
#' @param path = path
#' @param download = download
#' @param keepzip = keepzip
#'
.raster <- function(country, name, mask = TRUE, path, download, keepzip = FALSE, ...) {
  country <- .getCountry(country)
  path <- .getDataPath(path)
  if (mask) {
    mskname <- "_msk_"
    mskpath <- "msk_"
  } else {
    mskname <- "_"
    mskpath <- ""
  }
  filename <- paste(path, country, mskname, name, ".grd", sep = "")
  if (!file.exists(filename)) {
    zipfilename <- filename
    raster::extension(zipfilename) <- ".zip"
    if (!file.exists(zipfilename)) {
      if (download) {
        theurl <- paste("http://biogeo.ucdavis.edu/data/diva/", mskpath, name, "/", country, mskname, name, ".zip", sep = "")
        .download(theurl, zipfilename)
        if (!file.exists(zipfilename)) {
          message("\nCould not download file -- perhaps it does not exist")
        }
      } else {
        stop("File not available locally. Use 'download = TRUE'")
      }
    }
    ff <- utils::unzip(zipfilename, exdir = dirname(zipfilename))
    if (!keepzip) {
      file.remove(zipfilename)
    }
  }
  if (file.exists(filename)) {
    rs <- raster::raster(filename)
  } else {
    f <- ff[substr(ff, .nchar(ff) - 3, .nchar(ff)) == ".grd"]
    if (length(f) == 0) {
      warning("something went wrong")
      return(NULL)
    } else if (length(f) == 1) {
      rs <- raster(f)
    } else {
      rs <- sapply(f, raster::raster)
      message("returning a list of RasterLayer objects")
      return(rs)
    }
  }
  raster::projection(rs) <- "+proj=longlat +datum=WGS84"
  return(rs)
}

#' .SRTM
#'
#' @param lon = lon
#' @param lat = lat
#' @param download = download
#' @param path = path
#'
#' @return = shapefile
#'
#' @examples
#' \dontrun{
#' srtm <- gftools::getData('SRTM', lon=5, lat=45)
#' plot(srtm)
#' }
#'
.SRTM <- function(lon, lat, download, path) {
  stopifnot(lon >= -180 & lon <= 180)
  stopifnot(lat >= -60 & lat <= 60)
  rs <- raster::raster(nrows = 24, ncols = 72, xmn = -180, xmx = 180, ymn = -60, ymx = 60)
  rowTile <- raster::rowFromY(rs, lat)
  colTile <- raster::colFromX(rs, lon)
  if (rowTile < 10) {
    rowTile <- paste("0", rowTile, sep = "")
  }
  if (colTile < 10) {
    colTile <- paste("0", colTile, sep = "")
  }

  f <- paste("srtm_", colTile, "_", rowTile, sep = "")
  zipfilename <- paste(path, "/", f, ".zip", sep = "")
  tiffilename <- paste(path, "/", f, ".tif", sep = "")
  if (!file.exists(tiffilename)) {
    if (!file.exists(zipfilename)) {
      if (download) {
        theurl <- paste("ftp://srtm.csi.cgiar.org/SRTM_V41/SRTM_Data_GeoTiff/", f, ".zip", sep = "")
        test <- try(.download(theurl, zipfilename), silent = TRUE)
        if (class(test) == "try-error") {
          theurl <- paste("http://srtm.csi.cgiar.org/SRT-ZIP/SRTM_V41/SRTM_Data_GeoTiff/", f, ".ZIP", sep = "")
          test <- try(.download(theurl, zipfilename), silent = TRUE)
          if (class(test) == "try-error") {
            theurl <- paste("http://srtm.csi.cgiar.org/SRT-ZIP/SRTM_V41/SRTM_Mask_GeoTiff/", f, ".ZIP", sep = "")
            .download(theurl, zipfilename)
          }
        }
      } else {
        stop("file not available locally, use download=TRUE")
      }
    }
    if (file.exists(zipfilename)) {
      utils::unzip(zipfilename, exdir = dirname(zipfilename))
      file.remove(zipfilename)
    }
  }
  if (file.exists(tiffilename)) {
    rs <- raster::raster(tiffilename)
    raster::projection(rs) <- "+proj=longlat +datum=WGS84"
    return(rs)
  }
}

#' .IFN
#'
#' @param download = download
#' @param path = path
#' @param annee = annee
#'
#' @return = zipfile
#'
#' @examples
#' \dontrun{
#' ifn <- getData(name='IFN', annee = 2005)
#' }
#'
.IFN <- function(download, path, annee = 2005) {
  mois <- c("-8", "-8", "-8", "-9", "-7", "-6", "-5", "-4", "-3", "-2", "-4", "")
  f <- paste0(annee, mois[annee - 2004])
  zipfilename <- paste0(path, "/IFN/", f, ".zip")
  if (!file.exists(zipfilename)) {
    dir.create(paste0(path, "/IFN"), recursive = TRUE, showWarnings = FALSE)
    if (download) {
      theurl <- paste("http://inventaire-forestier.ign.fr/IMG/zip/", f, ".zip", sep = "")
      .download(theurl, zipfilename)
    } else {
      message("file not available locally, use download=TRUE")
    }
  }
  message(paste(zipfilename, "is downloaded!"))
}

#' .SER
#'
#' @param download = download
#' @param path = path
#'
#' @return = shapefile
#'
#' @examples
#' \dontrun{
#' ser <- gftools::getData(name='SER')
#' plot(ser)
#' }
#'
.SER <- function(download, path) {
  zipfilename <- paste0(path, "/SER/ser_l93.zip")
  if (!file.exists(zipfilename)) {
    dir.create(paste0(path, "/SER"), recursive = TRUE, showWarnings = FALSE)
    if (download) {
      theurl <- "http://inventaire-forestier.ign.fr/IMG/zip/ser_l93-2.zip"
      .download(theurl, zipfilename)
    } else {
      stop("file not available locally, use download=TRUE")
    }
  }
  if (file.exists(zipfilename)) {
    utils::unzip(zipfilename, exdir = dirname(zipfilename))
    file.remove(zipfilename)
    sh <- st_read(paste0(path, "/SER/ser_l93_new.shp"), quiet = TRUE)
    sh <- st_transform(sh, crs = 2154)
    return(sh)
  }
}

#' .SERAR
#'
#' @param download = download
#' @param path = path
#'
#' @return = shapefile
#'
#' @examples
#' \dontrun{
#' serar <- gftools::getData(name='SERAR')
#' plot(serar)
#' }
#'
.SERAR <- function(download, path) {
  zipfilename <- paste0(path, "/SERAR/ser_ar_l93.zip")
  if (!file.exists(zipfilename)) {
    dir.create(paste0(path, "/SERAR"), recursive = TRUE, showWarnings = FALSE)
    if (download) {
      theurl <- "http://inventaire-forestier.ign.fr/IMG/zip/ser_ar_l93.zip"
      .download(theurl, zipfilename)
    } else {
      stop("file not available locally, use download=TRUE")
    }
  }
  if (file.exists(zipfilename)) {
    utils::unzip(zipfilename, exdir = dirname(zipfilename))
    file.remove(zipfilename)
    sh <- st_read(paste0(path, "/SERAR/ser_ar_l93.shp"), quiet = TRUE)
    sh <- st_transform(sh, crs = 2154)
    return(sh)
  }
}

#' .RFN
#'
#' @param download = download
#' @param path = path
#'
#' @return = RFN data
#'
#' @examples
#' \dontrun{
#' rfn <- gftools::getData(name='RFN')
#' plot(rfn)
#' }
#'
.RFN <- function(download, path) {
  zipfilename <- paste0(path, "/RFN/rn250_l93_shp-2.zip")
  if (!file.exists(zipfilename)) {
    dir.create(paste0(path, "/RFN"), recursive = TRUE, showWarnings = FALSE)
    if (download) {
      theurl <- "http://inventaire-forestier.ign.fr/IMG/zip/rn250_l93_shp-2.zip"
      .download(theurl, zipfilename)
    } else {
      stop("file not available locally, use download=TRUE")
    }
  }
  if (file.exists(zipfilename)) {
    utils::unzip(zipfilename, exdir = dirname(zipfilename))
    file.remove(zipfilename)
    sh <- st_read(paste0(path, "/RFN/rnifn250_l93.shp"), quiet = TRUE)
    sh <- st_transform(sh, crs = 2154)
    return(sh)
  }
}
pobsteta/gftools documentation built on March 28, 2020, 8:25 p.m.