Skip to content

Commit

Permalink
Class 21 slides
Browse files Browse the repository at this point in the history
  • Loading branch information
ldemaz committed Apr 3, 2024
1 parent e056aca commit 597848b
Show file tree
Hide file tree
Showing 5 changed files with 346 additions and 2 deletions.
89 changes: 89 additions & 0 deletions docs/class21.Rmd
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)
```





252 changes: 252 additions & 0 deletions docs/class21.html
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 &lt;- system.file("extdata/farmer_spatial.csv", package = "geospaar") %&gt;%
read_csv() %&gt;%
st_as_sf(coords = c("x", "y"))
districts &lt;- st_read(
system.file("extdata/districts.geojson", package = "geospaar")
)
roads &lt;- read_sf(system.file("extdata/roads.geojson", package = "geospaar"))

chirps &lt;- terra::rast(system.file("extdata/chirps.tif", package = "geospaar"))
```

---

```r
districts &lt;- districts %&gt;% mutate(ID = 1:nrow(.))
distsr &lt;- districts %&gt;%
rasterize(x = ., y = raintot, field = "ID") %&gt;%
print()

chirpsz &lt;- mask(chirps, districts)
raintot &lt;- app(chirpsz, sum)
```


---
## Climate data summaries and zonal stats


```r
tmax &lt;- geodata::worldclim_country("Zambia", var = "tmax", path = tempdir())
dt &lt;- as.Date(gsub("Y", "", names(chirpsz)), format = "%y%j")
dt &lt;- lubridate::parse_date_time(gsub("Y", "", names(chirpsz)), orders = "yj")
wk &lt;- lubridate::week(dt)
weekly_rainfall &lt;- lapply(unique(wk), function(x) {
which(wk == x)
app(chirpsz[[which(wk == x)]], sum)
}) %&gt;% do.call(c, .)
names(weekly_rainfall) &lt;- paste0("wk", unique(wk))

rflim &lt;- 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 &lt;- spatSample(raintot, size = 10, xy = TRUE, na.rm = TRUE) %&gt;%
st_as_sf(coords = c("x", "y"), crs = 4326)

ptdistr &lt;- distance(raintot, vect(randsamp))
```

```
##
|---------|---------|---------|---------|
=========================================

```

```r
ptdistrmsk &lt;- mask(ptdistr, raintot)
plot(ptdistrmsk)
```

![](/home/rstudio/geospaar/docs/class21_files/figure-html/unnamed-chunk-4-1.png)&lt;!-- --&gt;





</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>
1 change: 1 addition & 0 deletions docs/index.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ The class materials were designed by Lyndon Estes and Lei Song.

### Week 12 (April 1, 3)
- [Class 20 slides](class20.html)
- [Class 21 slides](class21.html)
- Assignment 5 (Unit 2 Module 2)

### Week 13-15 (April 8, 11, 15, 17, 22, 24, 29)
Expand Down
3 changes: 2 additions & 1 deletion docs/index.html

Large diffs are not rendered by default.

3 changes: 2 additions & 1 deletion docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

## Spring 2024

Updated on: 2024-04-01
Updated on: 2024-04-03

<center>

Expand Down Expand Up @@ -112,6 +112,7 @@ The class materials were designed by Lyndon Estes and Lei Song.
### Week 12 (April 1, 3)

- [Class 20 slides](class20.html)
- [Class 21 slides](class21.html)
- Assignment 5 (Unit 2 Module 2)

### Week 13-15 (April 8, 11, 15, 17, 22, 24, 29)
Expand Down

0 comments on commit 597848b

Please sign in to comment.