## ---- echo = FALSE------------------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  eval = Sys.getenv("PRISM_AUTHOR") == "true"
)

# knitr hook to truncate long output. See:
# https://stackoverflow.com/q/23114654/3362993
hook_output <- knitr::knit_hooks$get("output")
knitr::knit_hooks$set(output = function(x, options) {
  if (!is.null(n <- options$out.lines)) {
    x <- unlist(strsplit(x, "\n"))
    if (length(x) > n) {
      # truncate the output
      x <- c(head(x, n), "....\n")
    }
    x <- paste(x, collapse = "\n")
  }
  hook_output(x, options)
})

## ----eval=FALSE---------------------------------------------------------------
#  install.packages("prism")

## ----start, eval=FALSE--------------------------------------------------------
#  # install.packages("devtools")
#  library(devtools)
#  install_github("ropensci/prism")

## ----prism setup--------------------------------------------------------------
#  library(prism)
#  prism_set_dl_dir("~/prismtmp")

## ----get normals,results=FALSE, eval=FALSE------------------------------------
#  # Download the January - June 30-year averages at 4km resolution
#  get_prism_normals(type="tmean", resolution = "4km", mon = 1:6, keepZip = FALSE)
#  
#  # Download the 30-year annual average precip and annual average temperature
#  get_prism_normals("ppt", "4km", annual = TRUE, keepZip = FALSE)
#  get_prism_normals("tmean", "4km", annual = TRUE, keepZip = FALSE)

## ----get daily monthly, message=FALSE, results=FALSE, eval=FALSE--------------
#  get_prism_dailys(
#    type = "tmean",
#    minDate = "2013-06-01",
#    maxDate = "2013-06-14",
#    keepZip = FALSE
#  )
#  get_prism_monthlys(type = "tmean", year = 1982:2014, mon = 1, keepZip = FALSE)
#  get_prism_annual("ppt", years = 2000:2015, keepZip = FALSE)

## ----listingFiles, out.lines=10-----------------------------------------------
#  ## Truncated to keep file list short
#  prism_archive_ls()

## ----moreListing, out.lines=5-------------------------------------------------
#  ## Truncated to keep file list short
#  pd_to_file(prism_archive_ls())
#  
#  pd_get_name(prism_archive_ls())

## -----------------------------------------------------------------------------
#  # we know we have downloaded June 2013 daily data, so lets search for those
#  prism_archive_subset("tmean", "daily", mon = 6)
#  
#  # or we can look for days between June 7 and June 10
#  prism_archive_subset(
#    "tmean", "daily", minDate = "2013-06-07", maxDate = "2013-06-10"
#  )

## ----quick_plot,fig.height=5,fig.width=7--------------------------------------
#  # Plot the January 30-year average temperatures
#  # grab only the first value, just in case multiple values are returned
#  jmean <- prism_archive_subset(
#    "tmean", "monthly normals", mon = 1, resolution = "4km"
#  )
#  pd_image(jmean)

## ----raster_math,fig.height=5,fig.width=7-------------------------------------
#  library(raster)
#  # knowing the name of the files you are after allows you to find them in the
#  # list of all files that exist
#  # jnorm_name <- "PRISM_tmean_30yr_normal_4kmM2_01_bil"
#  # j2013_name <- "PRISM_tmean_stable_4kmM3_201301_bil"
#  # but we will use prism_archive_subset() to find the files we need
#  
#  jnorm <- prism_archive_subset(
#    "tmean", "monthly normals", mon = 1, resolution = "4km"
#  )
#  j2013 <- prism_archive_subset("tmean", "monthly", years = 2013, mon = 1)
#  
#  # raster needs a full path, not the "short" prism data name
#  jnorm <- pd_to_file(jnorm)
#  j2013 <- pd_to_file(j2013)
#  
#  ## Now we'll load the rasters.
#  jnorm_rast <- raster(jnorm)
#  j2013_rast <- raster(j2013)
#  
#  # Now we can do simple subtraction to get the anomaly by subtracting 2014
#  # from the 30 year normal map
#  anomCalc <- function(x, y) {
#    return(x - y)
#  }
#  
#  anom_rast <- raster::overlay(j2013_rast,jnorm_rast,fun = anomCalc)
#  
#  plot(anom_rast)

## ----plot_Boulder,fig.height=5,fig.width=7, results=FALSE---------------------
#  library(ggplot2)
#  # data already exist in the prism dl dir
#  boulder <- c(-105.2797, 40.0176)
#  
#  # prism_archive_subset() will return prism data that matches the specified
#  # variable, time step, years, months, days, etc.
#  to_slice <- prism_archive_subset("tmean", "monthly", mon = 1)
#  p <- pd_plot_slice(to_slice, boulder)
#  
#  # add a linear average and title
#  p +
#    stat_smooth(method="lm", se = FALSE) +
#    theme_bw() +
#    ggtitle("Average January temperature in Boulder, CO 1982-2014")

## ----leaflet,eval=F-----------------------------------------------------------
#  library(leaflet)
#  library(raster)
#  library(prism)
#  
#  # 30-year normal average temperature have already been downloaded for
#  norm <- prism_archive_subset(
#    "tmean", "annual normals", resolution = "4km"
#  )
#  rast <- raster(pd_to_file(norm))
#  
#  # Create color palette and plot
#  pal <- colorNumeric(
#    c("#0000FF", "#FFFF00", "#FF0000"),
#    values(rast),
#    na.color = "transparent"
#  )
#  
#  leaflet() %>%
#    addTiles(
#      urlTemplate = 'http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}'
#    ) %>%
#    addRasterImage(rast, colors = pal, opacity=.65) %>%
#    addLegend(pal = pal, values = values(rast), title = "Deg C")

