## ----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")