Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

c4 review #675

Merged
merged 108 commits into from
Dec 13, 2021
Merged
Show file tree
Hide file tree
Changes from 100 commits
Commits
Show all changes
108 commits
Select commit Hold shift + click to select a range
28a0b64
Split-out pkg loading and reading for #669
Robinlovelace Nov 6, 2021
6c5d3c3
Refactor index.Rmd text about bookdown, update links
Robinlovelace Nov 8, 2021
4f98482
Update ex location
Robinlovelace Nov 9, 2021
d1f8097
Update ex location
Robinlovelace Nov 9, 2021
400daec
Define spatial ops upfront
Robinlovelace Nov 11, 2021
0e4672c
Update prose in Section 4.1
Robinlovelace Nov 11, 2021
17990b1
Define map algebra
Robinlovelace Nov 12, 2021
ac9bfa3
Update map algebra section
Robinlovelace Nov 12, 2021
aadc73e
Shorten and simplify description of spatial vs attribute operations
Robinlovelace Nov 12, 2021
4ae179b
Minor tweak to c4
Robinlovelace Nov 12, 2021
55f20af
It uses the terra not raster package
Robinlovelace Nov 12, 2021
8eb32b6
Introduce terra pkg in context of raster in c2
Robinlovelace Nov 12, 2021
61c04f4
Cross reference c1
Robinlovelace Nov 12, 2021
942bba3
Reword 4.2.1, make it clearer (hopefully)
Robinlovelace Nov 13, 2021
613fe32
Complete review of Section 4.2.1
Robinlovelace Nov 13, 2021
eba5e53
Improve segway to topological relations section
Robinlovelace Nov 13, 2021
95e5a86
Update with reference for #677
Robinlovelace Nov 13, 2021
3b7a803
Merge branch 'c4-v2-updates-rl' of github.com:Robinlovelace/geocompr …
Robinlovelace Nov 13, 2021
5ab7ab6
Add new refs and update bib
Robinlovelace Nov 13, 2021
98abe14
Add new references on algebraic topology
Robinlovelace Nov 13, 2021
eb51533
Update text with refs for #677
Robinlovelace Nov 13, 2021
de750fc
Test ggplot2 code for #677
Robinlovelace Nov 13, 2021
2011877
Add placeholder section on DE-9IM #677
Robinlovelace Nov 13, 2021
cf85720
Tweak comment and replace code with link to terra issue in c2
Robinlovelace Nov 14, 2021
0bb2df3
Test code for #677
Robinlovelace Nov 14, 2021
b1c2c4e
Add start fun for #677
Robinlovelace Nov 15, 2021
af95b09
MVP for de_9im fun
Robinlovelace Nov 15, 2021
552474a
Move test code to function script, fix build
Robinlovelace Nov 15, 2021
c931039
Working de_9im function
Robinlovelace Nov 15, 2021
fcf6bf0
Update code, fix build mkII
Robinlovelace Nov 15, 2021
d771041
Progress on #677
Robinlovelace Nov 15, 2021
5a7002a
Require sf
Robinlovelace Nov 15, 2021
76499a3
New fig 4.2 for #677
Robinlovelace Nov 15, 2021
9286ab9
Fix polygons, improve vis for #677
Robinlovelace Nov 15, 2021
22cbb41
Finish updating s. 4.2.2, close #677
Robinlovelace Nov 15, 2021
55e40d4
Add chunk to get around failing terra code
Robinlovelace Nov 16, 2021
df4b7cc
Fix references in c4
Robinlovelace Nov 16, 2021
cc53365
Comment out experimental new de-9im section for now...
Robinlovelace Nov 16, 2021
c4a62c3
Split paragraph in s. 4.2.2 in 2
Robinlovelace Nov 16, 2021
0302b07
Update text in 4.2.2, improve figure 4.2 caption
Robinlovelace Nov 16, 2021
b314c83
Break-up geometry creation code chunk
Robinlovelace Nov 16, 2021
87eccc4
Finish review of Section 4.2.2
Robinlovelace Nov 16, 2021
876e4ac
Split-out pkg loading and reading for #669
Robinlovelace Nov 6, 2021
490e37a
Refactor index.Rmd text about bookdown, update links
Robinlovelace Nov 8, 2021
5e7611d
Define spatial ops upfront
Robinlovelace Nov 11, 2021
70140cc
Update prose in Section 4.1
Robinlovelace Nov 11, 2021
8f8dfe0
Define map algebra
Robinlovelace Nov 12, 2021
13272f5
Update map algebra section
Robinlovelace Nov 12, 2021
a4f3a56
Shorten and simplify description of spatial vs attribute operations
Robinlovelace Nov 12, 2021
0061610
Minor tweak to c4
Robinlovelace Nov 12, 2021
40d7f49
It uses the terra not raster package
Robinlovelace Nov 12, 2021
cebae2c
Introduce terra pkg in context of raster in c2
Robinlovelace Nov 12, 2021
26bc961
Cross reference c1
Robinlovelace Nov 12, 2021
627214c
Reword 4.2.1, make it clearer (hopefully)
Robinlovelace Nov 13, 2021
d00f116
Complete review of Section 4.2.1
Robinlovelace Nov 13, 2021
f4974ec
Improve segway to topological relations section
Robinlovelace Nov 13, 2021
788081a
Update with reference for #677
Robinlovelace Nov 13, 2021
dead3a1
Add new refs and update bib
Robinlovelace Nov 13, 2021
bc0288b
Add new references on algebraic topology
Robinlovelace Nov 13, 2021
7546fdc
Update text with refs for #677
Robinlovelace Nov 13, 2021
0548e7e
Test ggplot2 code for #677
Robinlovelace Nov 13, 2021
2c72f4a
Add placeholder section on DE-9IM #677
Robinlovelace Nov 13, 2021
2095564
Tweak comment and replace code with link to terra issue in c2
Robinlovelace Nov 14, 2021
886f98a
Test code for #677
Robinlovelace Nov 14, 2021
ee22ec2
Add start fun for #677
Robinlovelace Nov 15, 2021
3f3206e
MVP for de_9im fun
Robinlovelace Nov 15, 2021
596aa44
Move test code to function script, fix build
Robinlovelace Nov 15, 2021
8f13921
Working de_9im function
Robinlovelace Nov 15, 2021
4569a2a
Update code, fix build mkII
Robinlovelace Nov 15, 2021
2fe1345
Progress on #677
Robinlovelace Nov 15, 2021
29e4587
Require sf
Robinlovelace Nov 15, 2021
20c292d
New fig 4.2 for #677
Robinlovelace Nov 15, 2021
90f5f2b
Fix polygons, improve vis for #677
Robinlovelace Nov 15, 2021
60481d7
Finish updating s. 4.2.2, close #677
Robinlovelace Nov 15, 2021
2d21ff8
Add chunk to get around failing terra code
Robinlovelace Nov 16, 2021
d5cd6c9
Fix references in c4
Robinlovelace Nov 16, 2021
d305f94
Comment out experimental new de-9im section for now...
Robinlovelace Nov 16, 2021
8950306
Split paragraph in s. 4.2.2 in 2
Robinlovelace Nov 16, 2021
6c58bd9
Update text in 4.2.2, improve figure 4.2 caption
Robinlovelace Nov 16, 2021
262c158
Break-up geometry creation code chunk
Robinlovelace Nov 16, 2021
4fe30d5
Finish review of Section 4.2.2
Robinlovelace Nov 16, 2021
a93c16b
Update bib
Robinlovelace Dec 3, 2021
2769f73
Merge with main
Robinlovelace Dec 3, 2021
10f9d65
Merge
Robinlovelace Dec 3, 2021
4760195
Tweak prose, see https://github.com/Robinlovelace/geocompr/pull/686/c…
Robinlovelace Dec 3, 2021
db7daee
Refactor code + prose in 4.2.3
Robinlovelace Dec 9, 2021
d8aad30
Complete review of 4.2.3
Robinlovelace Dec 9, 2021
471defa
Add idea
Robinlovelace Dec 9, 2021
7ecb0de
Complete review of Section 4.2.4
Robinlovelace Dec 9, 2021
bd857de
Review section on spatial aggregation
Robinlovelace Dec 9, 2021
59639bc
Rename spatia-aggr section
Robinlovelace Dec 9, 2021
1d28020
Create new section on incongruent zones, they deserve one!
Robinlovelace Dec 9, 2021
6e7f825
Remove unclear explanation of st_interpolate_aw()
Robinlovelace Dec 9, 2021
1232ac2
Complete review of new section on incongruent data
Robinlovelace Dec 9, 2021
ca83435
Rename + label incongruent section
Robinlovelace Dec 9, 2021
8618b4c
Refactor prose in raster section
Robinlovelace Dec 9, 2021
2f256c1
Evaluate zonal fun
Robinlovelace Dec 9, 2021
887d73d
Global object rename w. fd:
Robinlovelace Dec 9, 2021
fdb74cf
Merge branch 'main' into c4-v2-updates-rl
Robinlovelace Dec 9, 2021
8ca4363
Source local script for CI
Robinlovelace Dec 9, 2021
92fc311
Demonstrate st_filter, close #688
Robinlovelace Dec 13, 2021
a50f479
Improve description of st_filter
Robinlovelace Dec 13, 2021
dc2725e
Comment out link to tidyverse-pitfalls vignette
Robinlovelace Dec 13, 2021
ce9cb74
Shorten sentence
Robinlovelace Dec 13, 2021
5ff0674
Use full epsg code
Robinlovelace Dec 13, 2021
bf7572c
Drop sentence on history of map algebra (!)
Robinlovelace Dec 13, 2021
9ff09a1
Remove double is
Robinlovelace Dec 13, 2021
70104db
Replace as.raster() with raster() etc
Robinlovelace Dec 13, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 14 additions & 4 deletions 02-spatial-data.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -717,11 +717,20 @@ We also encourage you to read @pebesma_spatial_2022 for the most comprehensive i

### An introduction to terra

The **terra** package supports raster objects in R.
It provides an extensive set of functions to create, read, export, manipulate and process raster datasets.
Aside from general raster data manipulation, **terra** provides many low-level functions that can form the basis to develop more advanced raster functionality.
The **terra** package supports raster objects in R.
Like its predecessor **raster** (created by the same developer, Robert Hijmans), it provides an extensive set of functions to create, read, export, manipulate and process raster datasets.
**terra**'s functionality is largely the same as the more mature **raster** package, but there are some differences: **terra** functions are usually more computationally efficient than **raster** equivalents.
<!-- todo: add evidence (RL 2021-11) -->
On the other hand, the **raster** class system is popular and used by many other packages; as with **sf** and **sp**, the good news is you can seamlessly translate between the two types of object to ensure backwards compatibility with older scripts and packages, for example, with the functions `as.raster(my_rast)` (see the previous chapter for more on the evolution of R packages for working with geographic data).
Robinlovelace marked this conversation as resolved.
Show resolved Hide resolved

```{r, echo=FALSE, eval=FALSE}
# # test raster/terra conversions
# See https://github.com/rspatial/terra/issues/399
```

In addition to functions for raster data manipulation, **terra** provides many low-level functions that can form a foundation for developing new tools for working with raster datasets.
\index{terra (package)|see {terra}}
**terra** also lets you work on large raster datasets that are too large to fit into the main memory.
**terra** also lets you work on large raster datasets that are too large to fit into the main memory.
In this case, **terra** provides the possibility to divide the raster into smaller chunks, and processes these iteratively instead of loading the whole raster file into RAM.

For the illustration of **terra** concepts, we will use datasets from the **spDataLarge**.
Expand All @@ -732,6 +741,7 @@ First, let's create a `SpatRaster` object named `my_rast`:
```{r 02-spatial-data-37, message=FALSE}
raster_filepath = system.file("raster/srtm.tif", package = "spDataLarge")
my_rast = rast(raster_filepath)
class(my_rast)
```

Typing the name of the raster into the console, will print out the raster header (dimensions, resolution, extent, CRS) and some additional information (class, data source, summary of the raster values):
Expand Down
444 changes: 282 additions & 162 deletions 04-spatial-operations.Rmd

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion 07-read-write-plot.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ Various 'geoportals' (web services providing geospatial datasets such as [Data.g
\index{geoportals}
Some global geoportals overcome this issue.
The [GEOSS portal](http://www.geoportal.org/) and the [Copernicus Open Access Hub](https://scihub.copernicus.eu/), for example, contain many raster datasets with global coverage.
A wealth of vector datasets can be accessed from the National Aeronautics and Space Administration agency's (NASA) [SEDAC](http://sedac.ciesin.columbia.edu/) portal and the European Union's [INSPIRE geoportal](http://inspire-geoportal.ec.europa.eu/), with global and regional coverage.
A wealth of vector datasets can be accessed from the [SEDAC](http://sedac.ciesin.columbia.edu/) portal run by the National Aeronautics and Space Administration (NASA) and the European Union's [INSPIRE geoportal](http://inspire-geoportal.ec.europa.eu/), with global and regional coverage.

Most geoportals provide a graphical interface allowing datasets to be queried based on characteristics such as spatial and temporal extent, the United States Geological Services' [EarthExplorer](https://earthexplorer.usgs.gov/) being a prime example.
*Exploring* datasets interactively on a browser is an effective way of understanding available layers.
Expand Down
14 changes: 7 additions & 7 deletions code/04-spatial-join.R
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@ library(tmap)

if(!exists("random_joined")) {
set.seed(2018)
bb_world = st_bbox(world)
bb = st_bbox(world)
random_df = tibble::tibble(
x = runif(n = 10, min = bb_world[1], max = bb_world[3]),
y = runif(n = 10, min = bb_world[2], max = bb_world[4])
x = runif(n = 10, min = bb[1], max = bb[3]),
y = runif(n = 10, min = bb[2], max = bb[4])
)
random_points = st_as_sf(random_df, coords = c("x", "y")) %>%
st_set_crs(4326)
Expand All @@ -29,26 +29,26 @@ random_joined$name_long = as.character(random_joined$name_long)
jm0 = tm_shape(world) + tm_borders(lwd = 0.2) + tm_format("World")

jm1 = jm0 +
tm_shape(shp = random_points, bbox = bb_world) +
tm_shape(shp = random_points, bbox = bb) +
tm_symbols(col = "black", shape = 4, border.lwd = 2) +
tm_layout(scale = 1, legend.bg.color = "white", legend.bg.alpha = 0.3, legend.position = c("right", "bottom"))

jm2 = jm0 +
tm_shape(world_random, bbox = bb_world) +
tm_shape(world_random, bbox = bb) +
tm_fill(col = "name_long", palette = "Dark2") +
tm_layout(legend.show = FALSE)
#tm_borders(col = "name_long", lwd = 4) + # issue with tmap: no variable border
# tm_layout(scale = 1, legend.bg.color = "white", legend.bg.alpha = 0.3, legend.position = c("right", "bottom"))

jm3 = jm0 +
tm_shape(shp = random_joined, bbox = bb_world) +
tm_shape(shp = random_joined, bbox = bb) +
tm_symbols(col = "name_long", shape = 4, border.lwd = 2, palette = "Dark2") +
tm_layout(legend.show = FALSE)
# +
# tm_layout(scale = 1, legend.bg.color = "white", legend.bg.alpha = 0.3, legend.position = c("right", "bottom"))

jm4 = jm0 +
tm_shape(shp = random_joined, bbox = bb_world) +
tm_shape(shp = random_joined, bbox = bb) +
tm_symbols(col = "name_long", shape = 4, border.lwd = 2, palette = "Dark2") +
tm_layout(legend.only = TRUE)

Expand Down
6 changes: 3 additions & 3 deletions code/chapters/04-spatial-operations.R
Original file line number Diff line number Diff line change
Expand Up @@ -117,10 +117,10 @@ lengths(sel) > 0

## ----04-spatial-operations-19--------------------------------------------
set.seed(2018) # set seed for reproducibility
(bb_world = st_bbox(world)) # the world's bounds
(bb = st_bbox(world)) # the world's bounds
random_df = tibble(
x = runif(n = 10, min = bb_world[1], max = bb_world[3]),
y = runif(n = 10, min = bb_world[2], max = bb_world[4])
x = runif(n = 10, min = bb[1], max = bb[3]),
y = runif(n = 10, min = bb[2], max = bb[4])
)
random_points = random_df %>%
st_as_sf(coords = c("x", "y")) %>% # set coordinates
Expand Down
82 changes: 82 additions & 0 deletions code/de_9im.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
#' This function visualises sf objects and returns info on the
#' types of spatial relationship there is between them
#'
#' Context: [robinlovelace/geocompr#677](https://github.com/Robinlovelace/geocompr/issues/677)
#'
#' @examples
#' library(sf)
#' x = st_sfc(st_polygon(list(rbind(c(0, 0), c(1, 0), c(1, 1), c(0, 0)))))
#' y = st_sfc(st_polygon(list(rbind(c(0, 0), c(0, 1), c(1, 1), c(0, 0)))))
#' de_9im(x, y)
#' p3 = st_sfc(st_polygon(list(rbind(c(0.7, 0.3), c(0.7, 0.95), c(0.9, 0.95), c(0.7, 0.3)))))
#' p4 = st_sfc(st_polygon(list(rbind(c(0.6, 0.1), c(0.7, 0.5), c(0.9, 0.5), c(0.6, 0.1)))))
#' p5 = st_sfc(st_polygon(list(rbind(c(0, 0.2), c(0, 1), c(0.9, 1), c(0, 0.2)))))
#' de_9im(x, p3)
de_9im = function(x,
y,
object_names = c("x", "y"),
plot = TRUE,
funs = list(
"st_intersects",
"st_disjoint",
"st_touches",
"st_crosses",
"st_within",
"st_contains",
"st_contains_properly",
"st_overlaps",
"st_equals",
"st_covers",
"st_covered_by"
# ,
# "st_equals_exact" # requuires par argument
),
include_relate = TRUE,
sparse = FALSE,
output = "character",
collapse = " ✓\n"
) {
require("sf")
if (is(x, "sfc") && is(y, "sfc")) {
x = st_sf(data.frame(Object = object_names[1]), geometry = x)
y = st_sf(data.frame(Object = object_names[2]), geometry = y)
}
xy = rbind(x, y)
funs_matched = lapply(funs, match.fun)
res = lapply(seq(length(funs)), function(i) {
funs_matched[[i]](x, y, sparse = sparse)
})
res = unlist(res)
if(output == "character") {
res = unlist(funs)[res]
}
if(include_relate) {
relation = sf::st_relate(x, y)
relate_text = paste0(" \nDE-9IM string: \n", relation)
res = c(res, relate_text)
}
if(plot) {
res_text = paste(res, collapse = collapse)
message("Object x has the following spatial relations to y: ", res_text)
res = de_9im_plot(xy, label = res_text)
}
res
}

de_9im_plot = function(xy, label = "test", alpha = 0.5, show.legend = FALSE, x = 0.1, y = 0.95, theme = ggplot2::theme_void()) {
require("ggplot2", quietly = TRUE)
# browser()
ggplot(xy) + geom_sf(aes(fill = Object), alpha = alpha, show.legend = show.legend) +
annotate("text", x = 0.1, y = 0.95, label = label, hjust = "left", vjust = "top") +
theme
}

# # Test code to functionalize:
# theme_set(new = theme_void())
# g1 = ggplot(ps1) + geom_sf(aes(fill = Object), alpha = 0.5, show.legend = FALSE)
# # g1 + annotate("text", x = 0.3, y = 0.9, label = "st_intersects(Polygon1, Polygon2)")
# g1 + annotate("text", x = 0.1, y = 0.95, label = "intersects TRUE\ndisjoint FALSE\ntouches TRUE\n", hjust = "left", vjust = "top")
# # Try annotating only which type of relations apply
# # g1 + annotate("text", x = 0.1, y = 0.95, label = "Relations: intersects, touches", hjust = "left", vjust = "top")
# g1an = g1 +
#
71 changes: 5 additions & 66 deletions geocompr.bib
Original file line number Diff line number Diff line change
Expand Up @@ -428,7 +428,7 @@ @article{clementini_comparison_1995
number = {3},
pages = {149--178},
issn = {1069-0115},
doi = {10/ddtnhx},
doi = {10.1016/1069-0115(94)00033-X},
url = {https://www.sciencedirect.com/science/article/pii/106901159400033X},
urldate = {2021-11-13},
langid = {english}
Expand Down Expand Up @@ -531,14 +531,6 @@ @article{douglas_algorithms_1973
keywords = {\#nosource}
}

@manual{dunnington_ggspatial_2021,
Robinlovelace marked this conversation as resolved.
Show resolved Hide resolved
type = {manual},
title = {Ggspatial: Spatial Data Framework for Ggplot2},
author = {Dunnington, Dewey},
date = {2021},
url = {https://CRAN.R-project.org/package=ggspatial}
}

@article{eddelbuettel_extending_2018,
title = {Extending {{R}} with {{C}}++: A {{Brief Introduction}} to {{Rcpp}}},
shorttitle = {Extending {{R}} with {{C}}++},
Expand All @@ -561,8 +553,7 @@ @inproceedings{egenhofer_mathematical_1990
booktitle = {Proc. the Fourth International Symposium on Spatial Data Handing},
author = {Egenhofer, Max and Herring, John},
date = {1990},
pages = {803--813},
keywords = {⛔ No DOI found}
pages = {803--813}
}

@article{essd-11-647-2019,
Expand Down Expand Up @@ -624,14 +615,6 @@ @book{gillespie_efficient_2016
keywords = {\#nosource}
}

@manual{giraud_mapsf_2021,
type = {manual},
title = {Mapsf: Thematic Cartography},
author = {Giraud, Timothée},
date = {2021},
url = {https://CRAN.R-project.org/package=mapsf}
}

@article{goetz_evaluating_2015,
title = {Evaluating Machine Learning and Statistical Prediction Techniques for Landslide Susceptibility Modeling},
author = {Goetz, J.N. and Brenning, A. and Petschko, H. and Leopold, P.},
Expand Down Expand Up @@ -757,14 +740,6 @@ @book{hijmans_geosphere_2016
keywords = {\#nosource}
}

@manual{hijmans_terra_2021,
type = {manual},
title = {Terra: Spatial Data Analysis},
author = {Hijmans, Robert J.},
date = {2021},
url = {https://rspatial.org/terra/}
}

@book{hollander_transport_2016,
title = {Transport {{Modelling}} for a {{Complete Beginner}}},
author = {Hollander, Yaron},
Expand Down Expand Up @@ -1251,14 +1226,6 @@ @article{moreno-monroy_public_2017
keywords = {\#nosource,Accessibility,Inequality,Latin America,Public transport,Schools}
}

@manual{morganwall_rayshader_2021,
type = {manual},
title = {Rayshader: Create Maps and Visualize Data in {{2D}} and {{3D}}},
author = {Morgan-Wall, Tyler},
date = {2021},
url = {https://CRAN.R-project.org/package=rayshader}
}

@article{muenchow_geomorphic_2012,
title = {Geomorphic Process Rates of Landslides along a Humidity Gradient in the Tropical {{Andes}}},
author = {Muenchow, Jannes and Brenning, Alexander and Richter, Michael},
Expand Down Expand Up @@ -1498,23 +1465,8 @@ @article{pebesma_simple_2018
@book{pebesma_spatial_2022,
title = {Spatial {{Data Science}} with Applications in {{R}}},
author = {Pebesma, Edzer and Bivand, Roger},
date = {2022}
}

@manual{pebesma_stars_2021,
type = {manual},
title = {Stars: Spatiotemporal Arrays, Raster and Vector Data Cubes},
author = {Pebesma, Edzer},
date = {2021},
url = {https://CRAN.R-project.org/package=stars}
}

@manual{pedersen_gganimate_2020,
type = {manual},
title = {Gganimate: A Grammar of Animated Graphics},
author = {Pedersen, Thomas Lin and Robinson, David},
date = {2020},
url = {https://CRAN.R-project.org/package=gganimate}
date = {2022},
url = {https://r-spatial.org/book}
}

@book{perpinan_rastervis_2016,
Expand Down Expand Up @@ -1601,19 +1553,6 @@ @book{rodrigue_geography_2013
pagetotal = {432}
}

@article{Roussel2020,
title = {{{lidR}}: An r Package for Analysis of Airborne Laser Scanning ({{ALS}}) Data},
author = {Roussel, Jean-Romain and Auty, David and Coops, Nicholas C. and Tompalski, Piotr and Goodbody, Tristan R.H. and Meador, Andrew Sánchez and Bourdon, Jean-François and de Boissieu, Florian and Achim, Alexis},
options = {useprefix=true},
date = {2020-12},
journaltitle = {Remote Sensing of Environment},
volume = {251},
pages = {112061},
publisher = {{Elsevier BV}},
doi = {10/ghddxb},
url = {https://doi.org/10.1016/j.rse.2020.112061}
}

@inproceedings{rowlingson_rasp:_2003,
title = {Rasp: A {{Package}} for {{Spatial Statistics}}},
booktitle = {Proceedings of the 3rd {{International Workshop}} on {{Distributed Statistical Computing}}},
Expand Down Expand Up @@ -1679,7 +1618,7 @@ @article{shen_classification_2018
number = {2},
pages = {514--541},
issn = {1467-9671},
doi = {10/gnhcx9},
doi = {10.1111/tgis.12328},
url = {https://onlinelibrary.wiley.com/doi/abs/10.1111/tgis.12328},
urldate = {2021-11-13},
langid = {english},
Expand Down
9 changes: 4 additions & 5 deletions index.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,11 @@ This is the online home of *Geocomputation with R*, a book on geographic data an
<a href="https://www.routledge.com/9781138304512"><img src="images/cover.png" width="250" height="375" alt="The geocompr book cover" align="right" style="margin: 0 1em 0 1em" /></a>

**Note**: The first edition of the book has been published by CRC Press in the [R Series](https://www.routledge.com/Chapman--HallCRC-The-R-Series/book-series/CRCTHERSER).
You can buy the book from [CRC Press](https://www.routledge.com/9781138304512), or [Amazon](https://www.amazon.com/Geocomputation-R-Robin-Lovelace-dp-0367670577/dp/0367670577/), and see the archived first edition on the open source book platform [bookdown.org](https://bookdown.org/robinlovelace/geocompr/).
You can buy the book from [CRC Press](https://www.routledge.com/9781138304512), or [Amazon](https://www.amazon.com/Geocomputation-R-Robin-Lovelace-dp-0367670577/dp/0367670577/), and see the archived **First Edition** hosted on [bookdown.org](https://bookdown.org/robinlovelace/geocompr/).

Inspired by [**bookdown**](https://github.com/rstudio/bookdown) and the Free and Open Source Software for Geospatial ([FOSS4G](https://foss4g.org/)) movement, this book is open source.
This ensures its contents are reproducible and publicly accessible for people worldwide.

The online version of the book is hosted at [geocompr.robinlovelace.net](https://geocompr.robinlovelace.net) and kept up-to-date by [GitHub Actions](https://github.com/Robinlovelace/geocompr/actions), which provides information on its 'build status' as follows:
Inspired by [**bookdown**](https://bookdown.org/) and the Free and Open Source Software for Geospatial ([FOSS4G](https://foss4g.org/)) movement, the code and prose underlying this book is open source, ensuring it's reproducible, accessible and modifiable (e.g. in case you find an inevitable typo) for the benefit of people worldwide.
The online version of the book is hosted at [geocompr.robinlovelace.net](https://geocompr.robinlovelace.net) and kept up-to-date by [GitHub Actions](https://github.com/Robinlovelace/geocompr/actions).
Its current 'build status' as follows:

[![Actions](https://github.com/Robinlovelace/geocompr/workflows/Render/badge.svg)](https://github.com/Robinlovelace/geocompr/actions)
```
Expand Down