-
Notifications
You must be signed in to change notification settings - Fork 21
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
5 changed files
with
346 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
--- | ||
title: "Geospatial Analysis with R" | ||
subtitle: Class 20 | ||
output: | ||
xaringan::moon_reader: | ||
lib_dir: libs | ||
css: ["default", "lucy", "middlebury-fonts", "themes/class18.css"] | ||
nature: | ||
highlightStyle: github | ||
highlightLines: true | ||
countIncrementalSlides: false | ||
--- | ||
|
||
--- | ||
|
||
## Today | ||
|
||
- `terra` (raster) intro | ||
- agg/disagg, masking | ||
- assigning values | ||
- zonal | ||
- focal | ||
- global | ||
- terrain | ||
|
||
--- | ||
- Load data | ||
```{r, eval=FALSE} | ||
library(geospaar) | ||
farmers <- system.file("extdata/farmer_spatial.csv", package = "geospaar") %>% | ||
read_csv() %>% | ||
st_as_sf(coords = c("x", "y")) | ||
districts <- st_read( | ||
system.file("extdata/districts.geojson", package = "geospaar") | ||
) | ||
roads <- read_sf(system.file("extdata/roads.geojson", package = "geospaar")) | ||
chirps <- terra::rast(system.file("extdata/chirps.tif", package = "geospaar")) | ||
``` | ||
|
||
--- | ||
```{r, eval=FALSE} | ||
districts <- districts %>% mutate(ID = 1:nrow(.)) | ||
distsr <- districts %>% | ||
rasterize(x = ., y = raintot, field = "ID") %>% | ||
print() | ||
chirpsz <- mask(chirps, districts) | ||
raintot <- app(chirpsz, sum) | ||
``` | ||
|
||
|
||
--- | ||
## Climate data summaries and zonal stats | ||
|
||
```{r, eval=FALSE} | ||
tmax <- geodata::worldclim_country("Zambia", var = "tmax", path = tempdir()) | ||
dt <- as.Date(gsub("Y", "", names(chirpsz)), format = "%y%j") | ||
dt <- lubridate::parse_date_time(gsub("Y", "", names(chirpsz)), orders = "yj") | ||
wk <- lubridate::week(dt) | ||
weekly_rainfall <- lapply(unique(wk), function(x) { | ||
which(wk == x) | ||
app(chirpsz[[which(wk == x)]], sum) | ||
}) %>% do.call(c, .) | ||
names(weekly_rainfall) <- paste0("wk", unique(wk)) | ||
rflim <- range(global(weekly_rainfall, range, na.rm = TRUE)) | ||
plot(weekly_rainfall, zlim = rflim) | ||
``` | ||
|
||
--- | ||
## Distance | ||
- plot distance from points | ||
- points must be in same projection as model raster | ||
```{r, message = F} | ||
set.seed(1) | ||
randsamp <- spatSample(raintot, size = 10, xy = TRUE, na.rm = TRUE) %>% | ||
st_as_sf(coords = c("x", "y"), crs = 4326) | ||
ptdistr <- distance(raintot, vect(randsamp)) | ||
ptdistrmsk <- mask(ptdistr, raintot) | ||
plot(ptdistrmsk) | ||
``` | ||
|
||
|
||
|
||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,252 @@ | ||
<!DOCTYPE html> | ||
<html lang="" xml:lang=""> | ||
<head> | ||
<title>Geospatial Analysis with R</title> | ||
<meta charset="utf-8" /> | ||
<script src="libs/header-attrs-2.25/header-attrs.js"></script> | ||
<link href="libs/remark-css-0.0.1/default.css" rel="stylesheet" /> | ||
<link href="libs/remark-css-0.0.1/lucy.css" rel="stylesheet" /> | ||
<link href="libs/remark-css-0.0.1/middlebury-fonts.css" rel="stylesheet" /> | ||
<link rel="stylesheet" href="themes/class18.css" type="text/css" /> | ||
</head> | ||
<body> | ||
<textarea id="source"> | ||
class: center, middle, inverse, title-slide | ||
|
||
.title[ | ||
# Geospatial Analysis with R | ||
] | ||
.subtitle[ | ||
## Class 20 | ||
] | ||
|
||
--- | ||
|
||
|
||
--- | ||
|
||
## Today | ||
|
||
- `terra` (raster) intro | ||
- agg/disagg, masking | ||
- assigning values | ||
- zonal | ||
- focal | ||
- global | ||
- terrain | ||
|
||
--- | ||
- Load data | ||
|
||
```r | ||
library(geospaar) | ||
farmers <- system.file("extdata/farmer_spatial.csv", package = "geospaar") %>% | ||
read_csv() %>% | ||
st_as_sf(coords = c("x", "y")) | ||
districts <- st_read( | ||
system.file("extdata/districts.geojson", package = "geospaar") | ||
) | ||
roads <- read_sf(system.file("extdata/roads.geojson", package = "geospaar")) | ||
|
||
chirps <- terra::rast(system.file("extdata/chirps.tif", package = "geospaar")) | ||
``` | ||
|
||
--- | ||
|
||
```r | ||
districts <- districts %>% mutate(ID = 1:nrow(.)) | ||
distsr <- districts %>% | ||
rasterize(x = ., y = raintot, field = "ID") %>% | ||
print() | ||
|
||
chirpsz <- mask(chirps, districts) | ||
raintot <- app(chirpsz, sum) | ||
``` | ||
|
||
|
||
--- | ||
## Climate data summaries and zonal stats | ||
|
||
|
||
```r | ||
tmax <- geodata::worldclim_country("Zambia", var = "tmax", path = tempdir()) | ||
dt <- as.Date(gsub("Y", "", names(chirpsz)), format = "%y%j") | ||
dt <- lubridate::parse_date_time(gsub("Y", "", names(chirpsz)), orders = "yj") | ||
wk <- lubridate::week(dt) | ||
weekly_rainfall <- lapply(unique(wk), function(x) { | ||
which(wk == x) | ||
app(chirpsz[[which(wk == x)]], sum) | ||
}) %>% do.call(c, .) | ||
names(weekly_rainfall) <- paste0("wk", unique(wk)) | ||
|
||
rflim <- range(global(weekly_rainfall, range, na.rm = TRUE)) | ||
plot(weekly_rainfall, zlim = rflim) | ||
``` | ||
|
||
--- | ||
## Distance | ||
- plot distance from points | ||
- points must be in same projection as model raster | ||
|
||
```r | ||
set.seed(1) | ||
randsamp <- spatSample(raintot, size = 10, xy = TRUE, na.rm = TRUE) %>% | ||
st_as_sf(coords = c("x", "y"), crs = 4326) | ||
|
||
ptdistr <- distance(raintot, vect(randsamp)) | ||
``` | ||
|
||
``` | ||
## | ||
|---------|---------|---------|---------| | ||
========================================= | ||
|
||
``` | ||
|
||
```r | ||
ptdistrmsk <- mask(ptdistr, raintot) | ||
plot(ptdistrmsk) | ||
``` | ||
|
||
![](/home/rstudio/geospaar/docs/class21_files/figure-html/unnamed-chunk-4-1.png)<!-- --> | ||
|
||
|
||
|
||
|
||
|
||
</textarea> | ||
<style data-target="print-only">@media screen {.remark-slide-container{display:block;}.remark-slide-scaler{box-shadow:none;}}</style> | ||
<script src="https://remarkjs.com/downloads/remark-latest.min.js"></script> | ||
<script>var slideshow = remark.create({ | ||
"highlightStyle": "github", | ||
"highlightLines": true, | ||
"countIncrementalSlides": false | ||
}); | ||
if (window.HTMLWidgets) slideshow.on('afterShowSlide', function (slide) { | ||
window.dispatchEvent(new Event('resize')); | ||
}); | ||
(function(d) { | ||
var s = d.createElement("style"), r = d.querySelector(".remark-slide-scaler"); | ||
if (!r) return; | ||
s.type = "text/css"; s.innerHTML = "@page {size: " + r.style.width + " " + r.style.height +"; }"; | ||
d.head.appendChild(s); | ||
})(document); | ||
|
||
(function(d) { | ||
var el = d.getElementsByClassName("remark-slides-area"); | ||
if (!el) return; | ||
var slide, slides = slideshow.getSlides(), els = el[0].children; | ||
for (var i = 1; i < slides.length; i++) { | ||
slide = slides[i]; | ||
if (slide.properties.continued === "true" || slide.properties.count === "false") { | ||
els[i - 1].className += ' has-continuation'; | ||
} | ||
} | ||
var s = d.createElement("style"); | ||
s.type = "text/css"; s.innerHTML = "@media print { .has-continuation { display: none; } }"; | ||
d.head.appendChild(s); | ||
})(document); | ||
// delete the temporary CSS (for displaying all slides initially) when the user | ||
// starts to view slides | ||
(function() { | ||
var deleted = false; | ||
slideshow.on('beforeShowSlide', function(slide) { | ||
if (deleted) return; | ||
var sheets = document.styleSheets, node; | ||
for (var i = 0; i < sheets.length; i++) { | ||
node = sheets[i].ownerNode; | ||
if (node.dataset["target"] !== "print-only") continue; | ||
node.parentNode.removeChild(node); | ||
} | ||
deleted = true; | ||
}); | ||
})(); | ||
// add `data-at-shortcutkeys` attribute to <body> to resolve conflicts with JAWS | ||
// screen reader (see PR #262) | ||
(function(d) { | ||
let res = {}; | ||
d.querySelectorAll('.remark-help-content table tr').forEach(tr => { | ||
const t = tr.querySelector('td:nth-child(2)').innerText; | ||
tr.querySelectorAll('td:first-child .key').forEach(key => { | ||
const k = key.innerText; | ||
if (/^[a-z]$/.test(k)) res[k] = t; // must be a single letter (key) | ||
}); | ||
}); | ||
d.body.setAttribute('data-at-shortcutkeys', JSON.stringify(res)); | ||
})(document); | ||
(function() { | ||
"use strict" | ||
// Replace <script> tags in slides area to make them executable | ||
var scripts = document.querySelectorAll( | ||
'.remark-slides-area .remark-slide-container script' | ||
); | ||
if (!scripts.length) return; | ||
for (var i = 0; i < scripts.length; i++) { | ||
var s = document.createElement('script'); | ||
var code = document.createTextNode(scripts[i].textContent); | ||
s.appendChild(code); | ||
var scriptAttrs = scripts[i].attributes; | ||
for (var j = 0; j < scriptAttrs.length; j++) { | ||
s.setAttribute(scriptAttrs[j].name, scriptAttrs[j].value); | ||
} | ||
scripts[i].parentElement.replaceChild(s, scripts[i]); | ||
} | ||
})(); | ||
(function() { | ||
var links = document.getElementsByTagName('a'); | ||
for (var i = 0; i < links.length; i++) { | ||
if (/^(https?:)?\/\//.test(links[i].getAttribute('href'))) { | ||
links[i].target = '_blank'; | ||
} | ||
} | ||
})(); | ||
// adds .remark-code-has-line-highlighted class to <pre> parent elements | ||
// of code chunks containing highlighted lines with class .remark-code-line-highlighted | ||
(function(d) { | ||
const hlines = d.querySelectorAll('.remark-code-line-highlighted'); | ||
const preParents = []; | ||
const findPreParent = function(line, p = 0) { | ||
if (p > 1) return null; // traverse up no further than grandparent | ||
const el = line.parentElement; | ||
return el.tagName === "PRE" ? el : findPreParent(el, ++p); | ||
}; | ||
|
||
for (let line of hlines) { | ||
let pre = findPreParent(line); | ||
if (pre && !preParents.includes(pre)) preParents.push(pre); | ||
} | ||
preParents.forEach(p => p.classList.add("remark-code-has-line-highlighted")); | ||
})(document);</script> | ||
|
||
<script> | ||
slideshow._releaseMath = function(el) { | ||
var i, text, code, codes = el.getElementsByTagName('code'); | ||
for (i = 0; i < codes.length;) { | ||
code = codes[i]; | ||
if (code.parentNode.tagName !== 'PRE' && code.childElementCount === 0) { | ||
text = code.textContent; | ||
if (/^\\\((.|\s)+\\\)$/.test(text) || /^\\\[(.|\s)+\\\]$/.test(text) || | ||
/^\$\$(.|\s)+\$\$$/.test(text) || | ||
/^\\begin\{([^}]+)\}(.|\s)+\\end\{[^}]+\}$/.test(text)) { | ||
code.outerHTML = code.innerHTML; // remove <code></code> | ||
continue; | ||
} | ||
} | ||
i++; | ||
} | ||
}; | ||
slideshow._releaseMath(document); | ||
</script> | ||
<!-- dynamically load mathjax for compatibility with self-contained --> | ||
<script> | ||
(function () { | ||
var script = document.createElement('script'); | ||
script.type = 'text/javascript'; | ||
script.src = 'https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-MML-AM_CHTML'; | ||
if (location.protocol !== 'file:' && /^https?:/.test(script.src)) | ||
script.src = script.src.replace(/^https?:/, ''); | ||
document.getElementsByTagName('head')[0].appendChild(script); | ||
})(); | ||
</script> | ||
</body> | ||
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters