diff --git a/02-data-structures.md b/02-data-structures.md index 0a72b983..950480a5 100644 --- a/02-data-structures.md +++ b/02-data-structures.md @@ -70,7 +70,7 @@ numeric_vector <- c(2, 6, 3) numeric_vector ``` -```{.output} +```output [1] 2 6 3 ``` @@ -80,7 +80,7 @@ character_vector <- c('Amsterdam', 'London', 'Delft') character_vector ``` -```{.output} +```output [1] "Amsterdam" "London" "Delft" ``` @@ -90,7 +90,7 @@ logical_vector <- c(TRUE, FALSE, TRUE) logical_vector ``` -```{.output} +```output [1] TRUE FALSE TRUE ``` @@ -104,7 +104,7 @@ ab_vector <- c('a', 'b') ab_vector ``` -```{.output} +```output [1] "a" "b" ``` @@ -113,7 +113,7 @@ abcd_vector <- c(ab_vector, 'c', 'd') abcd_vector ``` -```{.output} +```output [1] "a" "b" "c" "d" ``` @@ -151,7 +151,7 @@ First, let's try to calculate mean for the values in this vector mean(with_na) # mean() function cannot interpret the missing values ``` -```{.output} +```output [1] NA ``` @@ -161,7 +161,7 @@ mean(with_na) # mean() function cannot interpret the missing values mean(with_na, na.rm = T) ``` -```{.output} +```output [1] 1.6 ``` @@ -175,7 +175,7 @@ with `is.na()` function. is.na(with_na) # This will produce a vector of logical values, ``` -```{.output} +```output [1] FALSE FALSE FALSE FALSE TRUE FALSE TRUE ``` @@ -186,7 +186,7 @@ is.na(with_na) # This will produce a vector of logical values, !is.na(with_na) # The ! operator means negation, i.e. not is.na(with_na) ``` -```{.output} +```output [1] TRUE TRUE TRUE TRUE FALSE TRUE FALSE ``` @@ -202,7 +202,7 @@ without_na <- with_na[ !is.na(with_na) ] # this notation will return only without_na ``` -```{.output} +```output [1] 1 2 1 1 3 ``` @@ -229,7 +229,7 @@ nordic_str <- c('Norway', 'Sweden', 'Norway', 'Denmark', 'Sweden') nordic_str # regular character vectors printed out ``` -```{.output} +```output [1] "Norway" "Sweden" "Norway" "Denmark" "Sweden" ``` @@ -239,7 +239,7 @@ nordic_cat <- factor(nordic_str) nordic_cat # With factors, R prints out additional information - 'Levels' ``` -```{.output} +```output [1] Norway Sweden Norway Denmark Sweden Levels: Denmark Norway Sweden ``` @@ -255,7 +255,7 @@ You can inspect and adapt levels of the factor. levels(nordic_cat) # returns all levels of a factor vector. ``` -```{.output} +```output [1] "Denmark" "Norway" "Sweden" ``` @@ -263,7 +263,7 @@ levels(nordic_cat) # returns all levels of a factor vector. nlevels(nordic_cat) # returns number of levels in a vector ``` -```{.output} +```output [1] 3 ``` @@ -295,7 +295,7 @@ nordic_cat <- factor( nordic_cat ``` -```{.output} +```output [1] Norway Sweden Norway Denmark Sweden Levels: Norway Denmark Sweden ``` @@ -320,7 +320,7 @@ nordic_cat <- fct_relevel( nordic_cat ``` -```{.output} +```output [1] Norway Sweden Norway Denmark Sweden Levels: Norway Denmark Sweden ``` @@ -336,7 +336,7 @@ You can also see the structure in the environment tab of RStudio. str(nordic_cat) ``` -```{.output} +```output Factor w/ 3 levels "Norway","Denmark",..: 1 3 1 2 3 ``` @@ -355,7 +355,7 @@ outside of this set, it will become an unknown/missing value detonated by nordic_str ``` -```{.output} +```output [1] "Norway" "Sweden" "Norway" "Denmark" "Sweden" ``` @@ -370,7 +370,7 @@ nordic_cat2 <- factor( nordic_cat2 ``` -```{.output} +```output [1] Norway Norway Denmark Levels: Norway Denmark ``` diff --git a/03-explore-data.md b/03-explore-data.md index 64d7a2c6..bd4cdfa3 100644 --- a/03-explore-data.md +++ b/03-explore-data.md @@ -68,7 +68,7 @@ It is important to see if all the variables (columns) have the data type that we str(gapminder) ``` -```{.output} +```output 'data.frame': 1704 obs. of 6 variables: $ country : chr "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" ... $ year : int 1952 1957 1962 1967 1972 1977 1982 1987 1992 1997 ... @@ -92,7 +92,7 @@ There are multiple ways to explore a data set. Here are just a few examples: head(gapminder) # shows first 6 rows of the data set ``` -```{.output} +```output country year pop continent lifeExp gdpPercap 1 Afghanistan 1952 8425333 Asia 28.801 779.4453 2 Afghanistan 1957 9240934 Asia 30.332 820.8530 @@ -106,7 +106,7 @@ head(gapminder) # shows first 6 rows of the data set summary(gapminder) # basic statistical information about each column. ``` -```{.output} +```output country year pop continent Length:1704 Min. :1952 Min. :6.001e+04 Length:1704 Class :character 1st Qu.:1966 1st Qu.:2.794e+06 Class :character @@ -129,7 +129,7 @@ summary(gapminder) # basic statistical information about each column. nrow(gapminder) # returns number of rows in a dataset ``` -```{.output} +```output [1] 1704 ``` @@ -137,7 +137,7 @@ nrow(gapminder) # returns number of rows in a dataset ncol(gapminder) # returns number of columns in a dataset ``` -```{.output} +```output [1] 6 ``` @@ -155,7 +155,7 @@ country_vec <- gapminder$country head(country_vec) ``` -```{.output} +```output [1] "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" [6] "Afghanistan" ``` @@ -176,7 +176,7 @@ year_country_gdp <- select(gapminder, year, country, gdpPercap) head(year_country_gdp) ``` -```{.output} +```output year country gdpPercap 1 1952 Afghanistan 779.4453 2 1957 Afghanistan 820.8530 @@ -203,7 +203,7 @@ year_country_gdp <- gapminder %>% head(year_country_gdp) ``` -```{.output} +```output year country gdpPercap 1 1952 Afghanistan 779.4453 2 1957 Afghanistan 820.8530 @@ -230,7 +230,7 @@ year_country_gdp_euro <- gapminder %>% head(year_country_gdp_euro) ``` -```{.output} +```output year country gdpPercap 1 2002 Afghanistan 726.7341 2 2007 Afghanistan 974.5803 @@ -258,7 +258,7 @@ year_country_gdp_eurasia <- gapminder %>% nrow(year_country_gdp_eurasia) ``` -```{.output} +```output [1] 756 ``` @@ -276,7 +276,7 @@ gapminder %>% # select the dataset summarize(avg_gdpPercap = mean(gdpPercap)) # create basic stats ``` -```{.output} +```output # A tibble: 5 × 2 continent avg_gdpPercap @@ -306,7 +306,7 @@ gapminder %>% avg_lifeExp == max(avg_lifeExp)) ``` -```{.output} +```output # A tibble: 2 × 2 country avg_lifeExp @@ -328,7 +328,7 @@ gapminder %>% summarize(avg_gdpPercap = mean(gdpPercap)) ``` -```{.output} +```output # A tibble: 60 × 3 # Groups: continent [5] continent year avg_gdpPercap @@ -370,7 +370,7 @@ gapminder %>% count() ``` -```{.output} +```output # A tibble: 5 × 2 # Groups: continent [5] continent n @@ -395,7 +395,7 @@ gapminder_gdp <- gapminder %>% head(gapminder_gdp) ``` -```{.output} +```output country year pop continent lifeExp gdpPercap gdpBillion 1 Afghanistan 1952 8425333 Asia 28.801 779.4453 6.567086 2 Afghanistan 1957 9240934 Asia 30.332 820.8530 7.585449 diff --git a/09-open-and-plot-vector-layers.md b/09-open-and-plot-vector-layers.md index 63ef3fb6..9c66fa32 100644 --- a/09-open-and-plot-vector-layers.md +++ b/09-open-and-plot-vector-layers.md @@ -85,7 +85,7 @@ The `st_geometry_type()` function, for instance, gives us information about the st_geometry_type(boundary_Delft) ``` -```{.output} +```output [1] POLYGON 18 Levels: GEOMETRY POINT LINESTRING POLYGON MULTIPOINT ... TRIANGLE ``` @@ -97,7 +97,7 @@ The `st_crs()` function returns the coordinate reference system (CRS) used by th st_crs(boundary_Delft) ``` -```{.output} +```output Coordinate Reference System: User input: WGS 84 wkt: @@ -133,7 +133,7 @@ The `st_bbox()` function shows the extent of the layer. As `WGS 84` is a **geogr st_bbox(boundary_Delft) ``` -```{.output} +```output xmin ymin xmax ymax 4.320218 51.966316 4.407911 52.032599 ``` @@ -147,7 +147,7 @@ boundary_Delft <- st_transform(boundary_Delft, 28992) st_crs(boundary_Delft)$Name ``` -```{.output} +```output [1] "Amersfoort / RD New" ``` @@ -155,7 +155,7 @@ st_crs(boundary_Delft)$Name st_crs(boundary_Delft)$epsg ``` -```{.output} +```output [1] 28992 ``` @@ -166,7 +166,7 @@ Notice that the bounding box is measured in meters after the transformation. st_bbox(boundary_Delft) ``` -```{.output} +```output xmin ymin xmax ymax 81743.00 442446.21 87703.78 449847.95 ``` @@ -175,7 +175,7 @@ st_bbox(boundary_Delft) st_crs(boundary_Delft)$units_gdal ``` -```{.output} +```output [1] "metre" ``` @@ -186,7 +186,7 @@ We confirm the transformation by examining the reprojected shapefile. boundary_Delft ``` -```{.output} +```output Simple feature collection with 1 feature and 1 field Geometry type: POLYGON Dimension: XY @@ -244,7 +244,7 @@ We can check the type of type of geometry with the `st_geometry_type()` function st_geometry_type(lines_Delft)[1] ``` -```{.output} +```output [1] LINESTRING 18 Levels: GEOMETRY POINT LINESTRING POLYGON MULTIPOINT ... TRIANGLE ``` @@ -253,7 +253,7 @@ st_geometry_type(lines_Delft)[1] st_geometry_type(points_Delft)[2] ``` -```{.output} +```output [1] POINT 18 Levels: GEOMETRY POINT LINESTRING POLYGON MULTIPOINT ... TRIANGLE ``` @@ -265,7 +265,7 @@ st_geometry_type(points_Delft)[2] st_crs(lines_Delft)$epsg ``` -```{.output} +```output [1] 28992 ``` @@ -273,7 +273,7 @@ st_crs(lines_Delft)$epsg st_crs(points_Delft)$epsg ``` -```{.output} +```output [1] 28992 ``` @@ -284,7 +284,7 @@ When looking at the bounding boxes with the `st_bbox()` function, we see the spa st_bbox(lines_Delft) ``` -```{.output} +```output xmin ymin xmax ymax 81759.58 441223.13 89081.41 449845.81 ``` @@ -293,7 +293,7 @@ st_bbox(lines_Delft) st_bbox(points_Delft) ``` -```{.output} +```output xmin ymin xmax ymax 81863.21 442621.15 87370.15 449345.08 ``` diff --git a/10-explore-and-plot-by-vector-layer-attributes.md b/10-explore-and-plot-by-vector-layer-attributes.md index 315ae90a..36fdb584 100644 --- a/10-explore-and-plot-by-vector-layer-attributes.md +++ b/10-explore-and-plot-by-vector-layer-attributes.md @@ -34,7 +34,7 @@ Let's have a look at the content of the loaded data, starting with `lines_Delft` lines_Delft ``` -```{.output} +```output Simple feature collection with 11244 features and 2 fields Geometry type: LINESTRING Dimension: XY @@ -61,7 +61,7 @@ This means that we can examine and manipulate them as data frames. For instance, ncol(lines_Delft) ``` -```{.output} +```output [1] 3 ``` @@ -72,7 +72,7 @@ In the case of `point_Delft` those columns are `"osm_id"`, `"highway"` and `"geo names(lines_Delft) ``` -```{.output} +```output [1] "osm_id" "highway" "geometry" ``` @@ -92,7 +92,7 @@ We can also preview the content of the object by looking at the first 6 rows wit head (lines_Delft) ``` -```{.output} +```output Simple feature collection with 6 features and 2 fields Geometry type: LINESTRING Dimension: XY @@ -119,7 +119,7 @@ We can see the contents of the `highway` field of our lines feature: head(lines_Delft$highway, 10) ``` -```{.output} +```output [1] "cycleway" "cycleway" "cycleway" "footway" "footway" "footway" [7] "service" "steps" "footway" "footway" ``` @@ -131,7 +131,7 @@ To see only unique values within the `highway` field, we can use the `unique()` unique(lines_Delft$highway) ``` -```{.output} +```output [1] "cycleway" "footway" "service" "steps" [5] "residential" "unclassified" "construction" "secondary" [9] "busway" "living_street" "motorway_link" "tertiary" @@ -150,7 +150,7 @@ R is also able to handle categorical variables called factors. With factors, we levels(factor(lines_Delft$highway)) ``` -```{.output} +```output [1] "bridleway" "busway" "construction" "cycleway" [5] "footway" "living_street" "motorway" "motorway_link" [9] "path" "pedestrian" "platform" "primary" @@ -185,7 +185,7 @@ Explore the attributes associated with the `point_Delft` spatial object. ncol(point_Delft) ``` -```{.output} +```output [1] 3 ``` @@ -198,7 +198,7 @@ Using the `head()` function which displays 6 rows by default, we only see two va head(point_Delft) ``` -```{.output} +```output Simple feature collection with 6 features and 2 fields Geometry type: POINT Dimension: XY @@ -220,7 +220,7 @@ We can increase the number of rows with the n argument (e.g., `head(n = 10)` to head(point_Delft, 10) ``` -```{.output} +```output Simple feature collection with 10 features and 2 fields Geometry type: POINT Dimension: XY @@ -250,7 +250,7 @@ We have our answer (`sports_centre` is the third value), but in general this is head(na.omit(point_Delft$leisure)) # this is better ``` -```{.output} +```output [1] "picnic_table" "marina" "marina" "sports_centre" [5] "sports_centre" "playground" ``` @@ -262,7 +262,7 @@ To show only unique values, we can use the `levels()` function on a factor to on head(levels(factor(point_Delft$leisure)), n = 3) ``` -```{.output} +```output [1] "dance" "dog_park" "escape_game" ``` @@ -277,7 +277,7 @@ head(levels(factor(point_Delft$leisure)), n = 3) names(point_Delft) ``` -```{.output} +```output [1] "osm_id" "leisure" "geometry" ``` @@ -303,7 +303,7 @@ Our subsetting operation reduces the number of features from 11244 to 1397. nrow(lines_Delft) ``` -```{.output} +```output [1] 11244 ``` @@ -311,7 +311,7 @@ nrow(lines_Delft) nrow(cycleway_Delft) ``` -```{.output} +```output [1] 1397 ``` @@ -326,7 +326,7 @@ cycleway_Delft %>% summarise(total_length = sum(length)) ``` -```{.output} +```output Simple feature collection with 1 feature and 1 field Geometry type: MULTILINESTRING Dimension: XY @@ -374,7 +374,7 @@ Challenge: Now with motorways (and pedestrian streets) unique(lines_Delft$highway) ``` -```{.output} +```output [1] "cycleway" "footway" "service" "steps" [5] "residential" "unclassified" "construction" "secondary" [9] "busway" "living_street" "motorway_link" "tertiary" @@ -393,7 +393,7 @@ motorway_Delft <- lines_Delft %>% motorway_Delft ``` -```{.output} +```output Simple feature collection with 48 features and 2 fields Geometry type: LINESTRING Dimension: XY @@ -430,7 +430,7 @@ motorway_Delft_length <- motorway_Delft %>% nrow(motorway_Delft) ``` -```{.output} +```output [1] 48 ``` @@ -462,7 +462,7 @@ pedestrian_Delft %>% summarise(total_length = sum(length)) ``` -```{.output} +```output Simple feature collection with 1 feature and 1 field Geometry type: MULTILINESTRING Dimension: XY @@ -476,7 +476,7 @@ Projected CRS: Amersfoort / RD New nrow(pedestrian_Delft) ``` -```{.output} +```output [1] 234 ``` @@ -506,7 +506,7 @@ Let's say that we want to color different road types with different colors and t unique(lines_Delft$highway) ``` -```{.output} +```output [1] "cycleway" "footway" "service" "steps" [5] "residential" "unclassified" "construction" "secondary" [9] "busway" "living_street" "motorway_link" "tertiary" @@ -597,7 +597,7 @@ Let’s create another plot where we show the different line types with the foll levels(factor(lines_Delft_selection$highway)) ``` -```{.output} +```output [1] "motorway" "primary" "secondary" "cycleway" ``` @@ -681,7 +681,7 @@ Create a plot that emphasizes only roads where bicycles are allowed. To emphasiz class(lines_Delft_selection$highway) ``` -```{.output} +```output [1] "factor" ``` @@ -690,7 +690,7 @@ class(lines_Delft_selection$highway) levels(factor(lines_Delft$highway)) ``` -```{.output} +```output [1] "bridleway" "busway" "construction" "cycleway" [5] "footway" "living_street" "motorway" "motorway_link" [9] "path" "pedestrian" "platform" "primary" @@ -743,7 +743,7 @@ Create a map of the municipal boundaries in the Netherlands using the data locat municipal_boundaries_NL <- st_read("data/nl-gemeenten.shp") ``` -```{.output} +```output Reading layer `nl-gemeenten' from data source `/home/runner/work/r-geospatial-urban/r-geospatial-urban/site/built/data/nl-gemeenten.shp' using driver `ESRI Shapefile' @@ -759,7 +759,7 @@ Projected CRS: Amersfoort / RD New str(municipal_boundaries_NL) ``` -```{.output} +```output Classes 'sf' and 'data.frame': 344 obs. of 7 variables: $ identifica: chr "GM0014" "GM0034" "GM0037" "GM0047" ... $ naam : chr "Groningen" "Almere" "Stadskanaal" "Veendam" ... @@ -780,7 +780,7 @@ Classes 'sf' and 'data.frame': 344 obs. of 7 variables: levels(factor(municipal_boundaries_NL$ligtInPr_1)) ``` -```{.output} +```output [1] "Drenthe" "Flevoland" "Fryslân" "Gelderland" [5] "Groningen" "Limburg" "Noord-Brabant" "Noord-Holland" [9] "Overijssel" "Utrecht" "Zeeland" "Zuid-Holland" diff --git a/11-plot-multiple-shape-files.md b/11-plot-multiple-shape-files.md index 64c2014b..314f01f7 100644 --- a/11-plot-multiple-shape-files.md +++ b/11-plot-multiple-shape-files.md @@ -148,7 +148,7 @@ leisure_locations_selection <- st_read("data/delft-leisure.shp") %>% filter(leisure %in% c("playground", "picnic_table")) ``` -```{.output} +```output Reading layer `delft-leisure' from data source `/home/runner/work/r-geospatial-urban/r-geospatial-urban/site/built/data/delft-leisure.shp' using driver `ESRI Shapefile' @@ -164,7 +164,7 @@ Projected CRS: Amersfoort / RD New levels(factor(leisure_locations_selection$leisure)) ``` -```{.output} +```output [1] "picnic_table" "playground" ``` diff --git a/12-handling-spatial-projection-and-crs.md b/12-handling-spatial-projection-and-crs.md index 02c28b58..d2c6ec71 100644 --- a/12-handling-spatial-projection-and-crs.md +++ b/12-handling-spatial-projection-and-crs.md @@ -28,7 +28,7 @@ After completing this episode, participants should be able to… municipal_boundary_NL <- st_read("data/nl-gemeenten.shp") ``` -```{.output} +```output Reading layer `nl-gemeenten' from data source `/home/runner/work/r-geospatial-urban/r-geospatial-urban/site/built/data/nl-gemeenten.shp' using driver `ESRI Shapefile' @@ -56,7 +56,7 @@ We can add a country boundary layer to make it look nicer. If we specify a thick country_boundary_NL <- st_read("data/nl-boundary.shp") ``` -```{.output} +```output Reading layer `nl-boundary' from data source `/home/runner/work/r-geospatial-urban/r-geospatial-urban/site/built/data/nl-boundary.shp' using driver `ESRI Shapefile' @@ -95,7 +95,7 @@ ggplot() + st_crs(municipal_boundary_NL)$epsg ``` -```{.output} +```output [1] 28992 ``` @@ -104,7 +104,7 @@ st_crs(municipal_boundary_NL)$epsg st_crs(country_boundary_NL)$epsg ``` -```{.output} +```output [1] 28992 ``` @@ -113,7 +113,7 @@ st_crs(country_boundary_NL)$epsg boundary_Delft <- st_read("data/delft-boundary.shp") ``` -```{.output} +```output Reading layer `delft-boundary' from data source `/home/runner/work/r-geospatial-urban/r-geospatial-urban/site/built/data/delft-boundary.shp' using driver `ESRI Shapefile' @@ -128,7 +128,7 @@ Geodetic CRS: WGS 84 st_crs(boundary_Delft)$epsg ``` -```{.output} +```output [1] 4326 ``` diff --git a/13-intro-to-raster-data.md b/13-intro-to-raster-data.md index 755e1f92..c66e492a 100644 --- a/13-intro-to-raster-data.md +++ b/13-intro-to-raster-data.md @@ -62,7 +62,7 @@ We will be working with a series of GeoTIFF files in this lesson. The GeoTIFF fo describe("data/tud-dsm-5m.tif") ``` -```{.output} +```output [1] "Driver: GTiff/GeoTIFF" [2] "Files: data/tud-dsm-5m.tif" [3] "Size is 722, 386" @@ -139,7 +139,7 @@ DSM_TUD <- rast("data/tud-dsm-5m.tif") DSM_TUD ``` -```{.output} +```output class : SpatRaster dimensions : 386, 722, 1 (nrow, ncol, nlyr) resolution : 5, 5 (x, y) @@ -155,11 +155,11 @@ The information above includes a report on dimension, resolution, extent and CRS summary(DSM_TUD) ``` -```{.warning} +```warning Warning: [summary] used a sample ``` -```{.output} +```output tud.dsm.5m Min. :-5.2235 1st Qu.:-0.7007 @@ -176,7 +176,7 @@ This output gives us information about the range of values in the DSM. We can se summary(values(DSM_TUD)) ``` -```{.output} +```output tud-dsm-5m Min. :-5.3907 1st Qu.:-0.7008 @@ -202,7 +202,7 @@ Now when we view the structure of our data, we will see a standard data frame fo str(DSM_TUD_df) ``` -```{.output} +```output 'data.frame': 278692 obs. of 3 variables: $ x : num 83568 83572 83578 83582 83588 ... $ y : num 447178 447178 447178 447178 447178 ... @@ -249,7 +249,7 @@ We can view the CRS string associated with our R object using the `crs()` functi crs(DSM_TUD, proj = TRUE) ``` -```{.output} +```output [1] "+proj=sterea +lat_0=52.1561605555556 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +ellps=bessel +units=m +no_defs" ``` @@ -281,7 +281,7 @@ Raster statistics are often calculated and embedded in a GeoTIFF for us. We can minmax(DSM_TUD) ``` -```{.output} +```output tud-dsm-5m min Inf max -Inf @@ -303,7 +303,7 @@ DSM_TUD <- setMinMax(DSM_TUD) min(values(DSM_TUD)) ``` -```{.output} +```output [1] -5.39069 ``` @@ -312,7 +312,7 @@ min(values(DSM_TUD)) max(values(DSM_TUD)) ``` -```{.output} +```output [1] 92.08102 ``` @@ -334,7 +334,7 @@ A raster dataset can contain one or more bands. We can view the number of bands nlyr(DSM_TUD) ``` -```{.output} +```output [1] 1 ``` This dataset has only 1 band. However, raster data can also be multi-band, meaning that one raster file contains data for more than one variable or time period for each cell. We will discuss multi-band raster data in a [later episode](../episodes/17-work-with-multi-band-rasters.Rmd). @@ -353,7 +353,7 @@ ggplot() + geom_histogram(data = DSM_TUD_df, aes(`tud-dsm-5m`)) ``` -```{.output} +```output `stat_bin()` using `bins = 30`. Pick better value with `binwidth`. ``` @@ -397,7 +397,7 @@ Note that this file is a hillshade raster. We will learn about hillshades in the describe("data/tud-dsm-5m-hill.tif") ``` -```{.output} +```output [1] "Driver: GTiff/GeoTIFF" [2] "Files: data/tud-dsm-5m-hill.tif" [3] "Size is 722, 386" diff --git a/14-plot-raster-data.md b/14-plot-raster-data.md index 606c791c..168f9421 100644 --- a/14-plot-raster-data.md +++ b/14-plot-raster-data.md @@ -53,7 +53,7 @@ To see the cut-off values for the groups, we can ask for the levels of `fct_elev levels(DSM_TUD_df$fct_elevation) ``` -```{.output} +```output [1] "(-5.49,27.1]" "(27.1,59.6]" "(59.6,92.2]" ``` @@ -64,7 +64,7 @@ DSM_TUD_df %>% count(fct_elevation) ``` -```{.output} +```output fct_elevation n 1 (-5.49,27.1] 277100 2 (27.1,59.6] 1469 @@ -83,7 +83,7 @@ DSM_TUD_df <- DSM_TUD_df %>% levels(DSM_TUD_df$fct_elevation_cb) ``` -```{.output} +```output [1] "(-10,0]" "(0,5]" "(5,100]" ``` @@ -113,7 +113,7 @@ DSM_TUD_df %>% count(fct_elevation_cb) ``` -```{.output} +```output fct_elevation_cb n 1 (-10,0] 113877 2 (0,5] 101446 @@ -136,7 +136,7 @@ The plot above uses the default colours inside `ggplot2` for raster objects. We terrain.colors(3) ``` -```{.output} +```output [1] "#00A600" "#ECB176" "#F2F2F2" ``` @@ -201,7 +201,7 @@ DSM_TUD_df <- DSM_TUD_df %>% levels(DSM_TUD_df$fct_elevation_6) ``` -```{.output} +```output [1] "(-5.49,10.9]" "(10.9,27.1]" "(27.1,43.3]" "(43.3,59.6]" "(59.6,75.8]" [6] "(75.8,92.2]" ``` diff --git a/15-reproject-raster-data.md b/15-reproject-raster-data.md index 5c14c068..51140727 100644 --- a/15-reproject-raster-data.md +++ b/15-reproject-raster-data.md @@ -124,7 +124,7 @@ View the CRS for each of these two datasets. What projection does each use? crs(DTM_TUD, parse = TRUE) ``` -```{.output} +```output [1] "PROJCRS[\"Amersfoort / RD New\"," [2] " BASEGEOGCRS[\"Amersfoort\"," [3] " DATUM[\"Amersfoort\"," @@ -170,7 +170,7 @@ crs(DTM_TUD, parse = TRUE) crs(DTM_hill_TUD, parse = TRUE) ``` -```{.output} +```output [1] "GEOGCRS[\"WGS 84\"," [2] " DATUM[\"World Geodetic System 1984\"," [3] " ELLIPSOID[\"WGS 84\",6378137,298.257223563," @@ -228,7 +228,7 @@ Now we can compare the CRS of our original DTM hillshade and our new DTM hillsha crs(DTM_hill_EPSG28992_TUD, parse = TRUE) ``` -```{.output} +```output [1] "PROJCRS[\"Amersfoort / RD New\"," [2] " BASEGEOGCRS[\"Amersfoort\"," [3] " DATUM[\"Amersfoort\"," @@ -273,7 +273,7 @@ crs(DTM_hill_EPSG28992_TUD, parse = TRUE) crs(DTM_hill_TUD, parse = TRUE) ``` -```{.output} +```output [1] "GEOGCRS[\"WGS 84\"," [2] " DATUM[\"World Geodetic System 1984\"," [3] " ELLIPSOID[\"WGS 84\",6378137,298.257223563," @@ -296,7 +296,7 @@ We can also compare the extent of the two objects. ext(DTM_hill_EPSG28992_TUD) ``` -```{.output} +```output SpatExtent : 83537.3768729672, 87200.5199626113, 445202.584641046, 447230.395994242 (xmin, xmax, ymin, ymax) ``` @@ -304,7 +304,7 @@ SpatExtent : 83537.3768729672, 87200.5199626113, 445202.584641046, 447230.395994 ext(DTM_hill_TUD) ``` -```{.output} +```output SpatExtent : 4.34674898644234, 4.39970436836596, 51.9910492930106, 52.0088368700157 (xmin, xmax, ymin, ymax) ``` @@ -317,7 +317,7 @@ Let’s next have a look at the resolution of our reprojected hillshade versus o res(DTM_hill_EPSG28992_TUD) ``` -```{.output} +```output [1] 5.03179 5.03179 ``` @@ -326,7 +326,7 @@ res(DTM_hill_EPSG28992_TUD) res(DTM_TUD) ``` -```{.output} +```output [1] 5 5 ``` @@ -344,7 +344,7 @@ Now both our resolutions and our CRSs match, so we can plot these two data sets res(DTM_hill_EPSG28992_TUD) ``` -```{.output} +```output [1] 5 5 ``` @@ -352,7 +352,7 @@ res(DTM_hill_EPSG28992_TUD) res(DTM_TUD) ``` -```{.output} +```output [1] 5 5 ``` diff --git a/16-raster-calculations.md b/16-raster-calculations.md index b2ed9b34..b4efc434 100644 --- a/16-raster-calculations.md +++ b/16-raster-calculations.md @@ -49,7 +49,7 @@ We use the `describe()` function to view information about the DTM and DSM data describe("data/tud-dtm-5m.tif") ``` -```{.output} +```output [1] "Driver: GTiff/GeoTIFF" [2] "Files: data/tud-dtm-5m.tif" [3] "Size is 722, 386" @@ -112,7 +112,7 @@ describe("data/tud-dtm-5m.tif") describe("data/tud-dsm-5m.tif") ``` -```{.output} +```output [1] "Driver: GTiff/GeoTIFF" [2] "Files: data/tud-dsm-5m.tif" [3] "Size is 722, 386" @@ -247,7 +247,7 @@ It’s often a good idea to explore the range of values in a raster dataset just min(CHM_TUD_df$`tud-dsm-5m`, na.rm = TRUE) ``` -```{.output} +```output [1] -3.638057 ``` @@ -255,7 +255,7 @@ min(CHM_TUD_df$`tud-dsm-5m`, na.rm = TRUE) max(CHM_TUD_df$`tud-dsm-5m`, na.rm = TRUE) ``` -```{.output} +```output [1] 92.08102 ``` diff --git a/17-work-with-multi-band-rasters.md b/17-work-with-multi-band-rasters.md index e06ec549..854d3bf4 100644 --- a/17-work-with-multi-band-rasters.md +++ b/17-work-with-multi-band-rasters.md @@ -101,7 +101,7 @@ Let’s preview the attributes of our stack object: RGB_stack_TUD ``` -```{.output} +```output class : SpatRaster dimensions : 4988, 4866, 3 (nrow, ncol, nlyr) resolution : 0.08, 0.08 (x, y) @@ -117,7 +117,7 @@ We can view the attributes of each band in the stack in a single output. For exa RGB_stack_TUD[[2]] ``` -```{.output} +```output class : SpatRaster dimensions : 4988, 4866, 1 (nrow, ncol, nlyr) resolution : 0.08, 0.08 (x, y) @@ -139,7 +139,7 @@ Each band in our RasterStack gets its own column in the data frame. Thus we have str(RGB_stack_TUD_df) ``` -```{.output} +```output 'data.frame': 24271608 obs. of 5 variables: $ x : num 85272 85272 85272 85272 85272 ... $ y : num 446694 446694 446694 446694 446694 ... diff --git a/18-import-and-visualise-osm-data.md b/18-import-and-visualise-osm-data.md index f6c16946..8f9d27e4 100644 --- a/18-import-and-visualise-osm-data.md +++ b/18-import-and-visualise-osm-data.md @@ -46,7 +46,7 @@ assign("has_internet_via_proxy", TRUE, environment(curl::has_internet)) ### Bounding box -The first thing to do is to define the area within which you want to retrieve data, aka the *bounding box*. This can be defined easily using a place name and the package `nominatimlite` to access the free Nominatim API provided by OpenStreetMap. +The first thing to do is to define the area within which you want to retrieve data, aka the *bounding box*. This can be defined easily using a place name to access the free Nominatim API provided by OpenStreetMap. We are going to look at *Brielle* together. @@ -61,17 +61,19 @@ We first geocode our spatial text search and extract the corresponding polygon ( ```r -#install.packages("nominatimlite") -library(nominatimlite) +bb <- getbb("Brielle") +``` + +```error +Error in getbb("Brielle"): could not find function "getbb" +``` -nominatim_polygon <- geo_lite_sf(address = "Brielle", points_only = FALSE) -bb <- st_bbox(nominatim_polygon) +```r bb ``` -```{.output} - xmin ymin xmax ymax - 4.135294 51.883500 4.229222 51.931410 +```error +Error in eval(expr, envir, enclos): object 'bb' not found ``` ```r @@ -102,18 +104,23 @@ For example: Brielle (Netherlands) and Brielle (New Jersey) ![Brielle, New Jersey](fig/Brielle_NJ.jpeg "Brielle, New Jersey"){width=40%} -By default, `geo_lite_sf()` from the `nominatimlite` package returns the first item. This means that regardless of the number of returned locations with the given name, the function will return a bounding box and it might be that we are not looking for the first item. We should therefore try to be as unambiguous as possible by adding a country code or district name. +By default, `getbb()` from the `osmdata` package returns the first item. This means that regardless of the number of returned locations with the given name, the function will return a bounding box and it might be that we are not looking for the first item. We should therefore try to be as unambiguous as possible by adding a country code or district name. ```r -nominatim_polygon <- geo_lite_sf(address = "Brielle, NL", points_only = FALSE) -bb <- st_bbox(nominatim_polygon) +bb <- getbb("Brielle, NL") +``` + +```error +Error in getbb("Brielle, NL"): could not find function "getbb" +``` + +```r bb ``` -```{.output} - xmin ymin xmax ymax - 4.135294 51.883500 4.229222 51.931410 +```error +Error in eval(expr, envir, enclos): object 'bb' not found ``` @@ -159,6 +166,10 @@ x <- opq(bbox = bb) %>% osmdata_sf() ``` +```error +Error in eval(expr, envir, enclos): object 'bb' not found +``` + ### Structure of objects @@ -172,78 +183,8 @@ What is this `x` object made of? It is a data frame of all the buildings contain str(x$osm_polygons) ``` -```{.output} -Classes 'sf' and 'data.frame': 10625 obs. of 62 variables: - $ osm_id : chr "40267783" "40267787" "40267791" "40267800" ... - $ name : chr NA "F-51" "F-61" "F-7" ... - $ addr:city : chr NA NA NA NA ... - $ addr:housename : chr NA NA NA NA ... - $ addr:housenumber : chr NA NA NA NA ... - $ addr:postcode : chr NA NA NA NA ... - $ addr:street : chr NA NA NA NA ... - $ alt_name : chr NA NA NA NA ... - $ amenity : chr NA NA NA NA ... - $ architect : chr NA NA NA NA ... - $ bridge:support : chr NA NA NA NA ... - $ building : chr "yes" "yes" "yes" "yes" ... - $ building:levels : chr NA NA NA NA ... - $ building:material : chr NA NA NA NA ... - $ building:name : chr NA NA NA NA ... - $ camp_site : chr NA NA NA NA ... - $ capacity : chr NA NA NA NA ... - $ colour : chr NA NA NA NA ... - $ construction : chr NA NA NA NA ... - $ content : chr NA NA NA NA ... - $ cuisine : chr NA NA NA NA ... - $ dance:teaching : chr NA NA NA NA ... - $ denomination : chr NA NA NA NA ... - $ description : chr NA NA NA NA ... - $ diameter : chr NA NA NA NA ... - $ fixme : chr NA NA NA NA ... - $ golf : chr NA NA NA NA ... - $ height : chr NA NA NA NA ... - $ heritage : chr NA NA NA NA ... - $ heritage:operator : chr NA NA NA NA ... - $ historic : chr NA NA NA NA ... - $ image : chr NA NA NA NA ... - $ layer : chr NA NA NA NA ... - $ leisure : chr NA NA NA NA ... - $ level : chr NA NA NA NA ... - $ location : chr NA NA NA NA ... - $ man_made : chr "storage_tank" "storage_tank" "storage_tank" "storage_tank" ... - $ material : chr NA NA NA NA ... - $ natural : chr NA NA NA NA ... - $ note : chr NA NA NA NA ... - $ old_name : chr NA NA NA NA ... - $ operator : chr NA NA NA NA ... - $ operator:wikidata : chr NA NA NA NA ... - $ power : chr NA NA NA NA ... - $ ref : chr NA NA NA NA ... - $ ref:bag : chr NA NA NA NA ... - $ ref:bag:old : chr NA NA NA NA ... - $ ref:rce : chr NA NA NA NA ... - $ religion : chr NA NA NA NA ... - $ roof:levels : chr NA NA NA NA ... - $ roof:shape : chr NA NA NA NA ... - $ seamark:shoreline_construction:category : chr NA NA NA NA ... - $ seamark:shoreline_construction:water_level: chr NA NA NA NA ... - $ seamark:type : chr NA NA NA NA ... - $ source : chr NA NA NA NA ... - $ source:date : chr NA NA NA NA ... - $ start_date : chr NA NA NA NA ... - $ tourism : chr NA NA NA NA ... - $ website : chr NA NA NA NA ... - $ wikidata : chr NA NA NA NA ... - $ wikipedia : chr NA NA NA NA ... - $ geometry :sfc_POLYGON of length 10625; first list element: List of 1 - ..$ : num [1:14, 1:2] 4.22 4.22 4.22 4.22 4.22 ... - .. ..- attr(*, "dimnames")=List of 2 - .. .. ..$ : chr [1:14] "485609017" "485609009" "485609011" "485609018" ... - .. .. ..$ : chr [1:2] "lon" "lat" - ..- attr(*, "class")= chr [1:3] "XY" "POLYGON" "sfg" - - attr(*, "sf_column")= chr "geometry" - - attr(*, "agr")= Factor w/ 3 levels "constant","aggregate",..: NA NA NA NA NA NA NA NA NA NA ... - ..- attr(*, "names")= chr [1:61] "osm_id" "name" "addr:city" "addr:housename" ... +```error +Error in eval(expr, envir, enclos): object 'x' not found ``` @@ -264,6 +205,10 @@ buildings <- x$osm_polygons %>% st_transform(.,crs=28992) ``` +```error +Error in eval(expr, envir, enclos): object 'x' not found +``` + :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: instructor If this does not work for some reason, the `buildings` can be found in the data folder: "episodes/data/dataBrielle.shp". @@ -281,8 +226,21 @@ Then we use the `ggplot()` function to visualise the buildings by age. The speci ```r start_date <- as.numeric(buildings$start_date) +``` + +```error +Error in eval(expr, envir, enclos): object 'buildings' not found +``` + +```r buildings$build_date <- if_else(start_date < 1900, 1900, start_date) +``` +```error +Error in eval(expr, envir, enclos): object 'start_date' not found +``` + +```r ggplot(data = buildings) + geom_sf(aes(fill = build_date, colour=build_date)) + scale_fill_viridis_c(option = "viridis")+ @@ -290,7 +248,9 @@ buildings$build_date <- if_else(start_date < 1900, 1900, start_date) coord_sf(datum = st_crs(28992)) ``` - +```error +Error in eval(expr, envir, enclos): object 'buildings' not found +``` So this reveals the historical centre of Brielle (or the city you chose) and the various urban extensions through time. Anything odd? What? Around the centre? Why these limits / isolated points? @@ -329,14 +289,18 @@ extract_buildings <- function(cityname, year=1900){ extract_buildings("Brielle, NL") ``` - +```error +Error in geo_lite_sf(address = cityname, points_only = FALSE): could not find function "geo_lite_sf" +``` ```r #test on Naarden extract_buildings("Naarden, NL") ``` - +```error +Error in geo_lite_sf(address = cityname, points_only = FALSE): could not find function "geo_lite_sf" +``` ::::::::::::::::::::::::::::::::::::: challenge @@ -363,7 +327,13 @@ library(leaflet) buildings2 <- buildings %>% st_transform(.,crs=4326) +``` +```error +Error in eval(expr, envir, enclos): object 'buildings' not found +``` + +```r # leaflet(buildings2) %>% # addTiles() %>% # addPolygons(fillColor = ~colorQuantile("YlGnBu", -build_date)(-build_date)) @@ -379,8 +349,9 @@ leaflet(buildings2) %>% bringToFront = TRUE)) ``` -
- +```error +Error in eval(expr, envir, enclos): object 'buildings2' not found +``` ::::::::::::::::::::::::::::::::: @@ -390,7 +361,7 @@ leaflet(buildings2) %>% ::::::::::::::::::::::::::::::::::::: keypoints - Use the `Nominatim` and `Overpass` APIs within R -- Use the `osmdata` and `nominatimlite` packages to retrieve geospatial data +- Use the `osmdata` package to retrieve geospatial data - Select features and attributes among OSM tags - Use the `ggplot`, `sf` and `leaflet` packages to map data diff --git a/19-basic-gis-with-r-sf.md b/19-basic-gis-with-r-sf.md index 160d9d70..1f469a09 100644 --- a/19-basic-gis-with-r-sf.md +++ b/19-basic-gis-with-r-sf.md @@ -29,9 +29,6 @@ library(tidyverse) library(sf) library(osmdata) library(leaflet) -library(nominatimlite) -library(lwgeom) -library(here) assign("has_internet_via_proxy", TRUE, environment(curl::has_internet)) ``` @@ -51,8 +48,7 @@ Let's select them and see where they are. ```r -nominatim_polygon <- nominatimlite::geo_lite_sf(address = "Brielle, NL", points_only = FALSE) -bb <- sf::st_bbox(nominatim_polygon) +bb <- getbb("Brielle, NL") x <- opq(bbox = bb) %>% add_osm_feature(key = 'building') %>% osmdata_sf() @@ -63,7 +59,7 @@ buildings <- x$osm_polygons %>% summary(buildings$start_date) ``` -```{.output} +```output Length Class Mode 10625 character character ``` @@ -108,7 +104,7 @@ distance <- 100 # in meters st_crs(old_buildings) ``` -```{.output} +```output Coordinate Reference System: User input: EPSG:28992 wkt: @@ -339,9 +335,21 @@ ggsave(filename = "fig/ConservationBrielle_newrules.png", ```r single_buffer$area <- sf::st_area(single_buffer) %>% units::set_units(., km^2) +``` + +```error +Error in st_area.sfc(st_geometry(x), ...): package lwgeom required, please install it first +``` +```r single_buffer$old_buildings_per_km2 <- as.numeric(single_buffer$n_buildings / single_buffer$area) +``` +```error +Error in `[[<-.data.frame`(`*tmp*`, i, value = numeric(0)): replacement has 0 rows, data has 159 +``` + +```r ggplot() + geom_sf(data = buildings) + geom_sf(data = single_buffer, aes(fill=old_buildings_per_km2), colour = NA) + @@ -352,7 +360,13 @@ single_buffer$old_buildings_per_km2 <- as.numeric(single_buffer$n_buildings / si option = "B") ``` - +```error +Error in `geom_sf()`: +! Problem while computing aesthetics. +ℹ Error occurred in the 2nd layer. +Caused by error: +! object 'old_buildings_per_km2' not found +``` diff --git a/fig/18-import-and-visualise-osm-data-rendered-reproducibility-1.png b/fig/18-import-and-visualise-osm-data-rendered-reproducibility-1.png deleted file mode 100644 index 3c43d471..00000000 Binary files a/fig/18-import-and-visualise-osm-data-rendered-reproducibility-1.png and /dev/null differ diff --git a/fig/18-import-and-visualise-osm-data-rendered-reproducibility-2.png b/fig/18-import-and-visualise-osm-data-rendered-reproducibility-2.png deleted file mode 100644 index 8e5fc4b1..00000000 Binary files a/fig/18-import-and-visualise-osm-data-rendered-reproducibility-2.png and /dev/null differ diff --git a/fig/18-import-and-visualise-osm-data-rendered-unnamed-chunk-8-1.png b/fig/18-import-and-visualise-osm-data-rendered-unnamed-chunk-8-1.png deleted file mode 100644 index a0788852..00000000 Binary files a/fig/18-import-and-visualise-osm-data-rendered-unnamed-chunk-8-1.png and /dev/null differ diff --git a/fig/19-basic-gis-with-r-sf-rendered-unnamed-chunk-10-1.png b/fig/19-basic-gis-with-r-sf-rendered-unnamed-chunk-10-1.png deleted file mode 100644 index 226ebed4..00000000 Binary files a/fig/19-basic-gis-with-r-sf-rendered-unnamed-chunk-10-1.png and /dev/null differ diff --git a/md5sum.txt b/md5sum.txt index c9615503..16a381c6 100644 --- a/md5sum.txt +++ b/md5sum.txt @@ -1,28 +1,28 @@ "file" "checksum" "built" "date" -"CODE_OF_CONDUCT.md" "c93c83c630db2fe2462240bf72552548" "site/built/CODE_OF_CONDUCT.md" "2024-05-15" -"LICENSE.md" "b24ebbb41b14ca25cf6b8216dda83e5f" "site/built/LICENSE.md" "2024-05-15" -"config.yaml" "eba2e90f9f89b711e953fb45172634ef" "site/built/config.yaml" "2024-05-15" -"index.md" "db222f765de8e62e7990ec8ba4328199" "site/built/index.md" "2024-05-15" -"links.md" "8184cf4149eafbf03ce8da8ff0778c14" "site/built/links.md" "2024-05-15" -"renv.lock" "5234c6582daf3ebb1f126ee9f57c2876" "site/built/renv.lock" "2024-05-15" -"episodes/01-intro-to-r.Rmd" "b13d8b2857351dc5b861e6f3f86f8add" "site/built/01-intro-to-r.md" "2024-05-15" -"episodes/02-data-structures.Rmd" "2e3bbbc3ff746151b6bfeffdce1d61c9" "site/built/02-data-structures.md" "2024-05-15" -"episodes/03-explore-data.Rmd" "9e557be2898dfa30ff101cb2717b7deb" "site/built/03-explore-data.md" "2024-05-15" -"episodes/04-intro-to-visualisation.Rmd" "1837275ff28be449e5dee9fc69d49aa7" "site/built/04-intro-to-visualisation.md" "2024-05-15" -"episodes/08-intro-to-geospatial-concepts.Rmd" "cea04d6fd3be978d734ddc03483b5d58" "site/built/08-intro-to-geospatial-concepts.md" "2024-05-15" -"episodes/09-open-and-plot-vector-layers.Rmd" "cb9c1453822a18918067f5cb26a0b951" "site/built/09-open-and-plot-vector-layers.md" "2024-05-15" -"episodes/10-explore-and-plot-by-vector-layer-attributes.Rmd" "4637f1b2bf993bb4a6cb2688ebd38ea8" "site/built/10-explore-and-plot-by-vector-layer-attributes.md" "2024-05-15" -"episodes/11-plot-multiple-shape-files.Rmd" "1fa5e6d7bbce5d4bd8b2e1a083b53460" "site/built/11-plot-multiple-shape-files.md" "2024-05-15" -"episodes/12-handling-spatial-projection-and-crs.Rmd" "a0f6523fa9e0a92bf7f469fed449aa87" "site/built/12-handling-spatial-projection-and-crs.md" "2024-05-15" -"episodes/13-intro-to-raster-data.Rmd" "eacc90b2e62a4b612715534c3b92e34a" "site/built/13-intro-to-raster-data.md" "2024-05-15" -"episodes/14-plot-raster-data.Rmd" "e74c1aae5e32478ba386f15a9b7b80d9" "site/built/14-plot-raster-data.md" "2024-05-15" -"episodes/15-reproject-raster-data.Rmd" "9392077cf50153cc1443b270b904e28b" "site/built/15-reproject-raster-data.md" "2024-05-15" -"episodes/16-raster-calculations.Rmd" "b5be879fb97fb5aa53184ef3890f3243" "site/built/16-raster-calculations.md" "2024-05-15" -"episodes/17-work-with-multi-band-rasters.Rmd" "9f8d16f868ab05241d010bd3d81c641a" "site/built/17-work-with-multi-band-rasters.md" "2024-05-15" -"episodes/18-import-and-visualise-osm-data.Rmd" "3f152cee5c4ab57d134057a72a44341b" "site/built/18-import-and-visualise-osm-data.md" "2024-05-15" -"episodes/19-basic-gis-with-r-sf.Rmd" "113bb971333546663f7e61f2f6498693" "site/built/19-basic-gis-with-r-sf.md" "2024-05-15" -"instructors/instructor-notes.md" "55fd6f5f1627ddc05b0d8a25a1fc22bd" "site/built/instructor-notes.md" "2024-05-15" -"learners/reference.md" "1c7cc4e229304d9806a13f69ca1b8ba4" "site/built/reference.md" "2024-05-15" -"learners/setup.md" "dea81100282d7460d6534bcb721c6982" "site/built/setup.md" "2024-05-15" -"profiles/learner-profiles.md" "60b93493cf1da06dfd63255d73854461" "site/built/learner-profiles.md" "2024-05-15" -"renv/profiles/lesson-requirements/renv.lock" "5234c6582daf3ebb1f126ee9f57c2876" "site/built/renv.lock" "2024-05-15" +"CODE_OF_CONDUCT.md" "c93c83c630db2fe2462240bf72552548" "site/built/CODE_OF_CONDUCT.md" "2024-05-16" +"LICENSE.md" "b24ebbb41b14ca25cf6b8216dda83e5f" "site/built/LICENSE.md" "2024-05-16" +"config.yaml" "eba2e90f9f89b711e953fb45172634ef" "site/built/config.yaml" "2024-05-16" +"index.md" "db222f765de8e62e7990ec8ba4328199" "site/built/index.md" "2024-05-16" +"links.md" "8184cf4149eafbf03ce8da8ff0778c14" "site/built/links.md" "2024-05-16" +"renv.lock" "4087d7ec29f3d88f8ea79906f233e491" "site/built/renv.lock" "2024-05-16" +"episodes/01-intro-to-r.Rmd" "b13d8b2857351dc5b861e6f3f86f8add" "site/built/01-intro-to-r.md" "2024-05-16" +"episodes/02-data-structures.Rmd" "2e3bbbc3ff746151b6bfeffdce1d61c9" "site/built/02-data-structures.md" "2024-05-16" +"episodes/03-explore-data.Rmd" "9e557be2898dfa30ff101cb2717b7deb" "site/built/03-explore-data.md" "2024-05-16" +"episodes/04-intro-to-visualisation.Rmd" "1837275ff28be449e5dee9fc69d49aa7" "site/built/04-intro-to-visualisation.md" "2024-05-16" +"episodes/08-intro-to-geospatial-concepts.Rmd" "cea04d6fd3be978d734ddc03483b5d58" "site/built/08-intro-to-geospatial-concepts.md" "2024-05-16" +"episodes/09-open-and-plot-vector-layers.Rmd" "cb9c1453822a18918067f5cb26a0b951" "site/built/09-open-and-plot-vector-layers.md" "2024-05-16" +"episodes/10-explore-and-plot-by-vector-layer-attributes.Rmd" "4637f1b2bf993bb4a6cb2688ebd38ea8" "site/built/10-explore-and-plot-by-vector-layer-attributes.md" "2024-05-16" +"episodes/11-plot-multiple-shape-files.Rmd" "1fa5e6d7bbce5d4bd8b2e1a083b53460" "site/built/11-plot-multiple-shape-files.md" "2024-05-16" +"episodes/12-handling-spatial-projection-and-crs.Rmd" "a0f6523fa9e0a92bf7f469fed449aa87" "site/built/12-handling-spatial-projection-and-crs.md" "2024-05-16" +"episodes/13-intro-to-raster-data.Rmd" "eacc90b2e62a4b612715534c3b92e34a" "site/built/13-intro-to-raster-data.md" "2024-05-16" +"episodes/14-plot-raster-data.Rmd" "e74c1aae5e32478ba386f15a9b7b80d9" "site/built/14-plot-raster-data.md" "2024-05-16" +"episodes/15-reproject-raster-data.Rmd" "9392077cf50153cc1443b270b904e28b" "site/built/15-reproject-raster-data.md" "2024-05-16" +"episodes/16-raster-calculations.Rmd" "b5be879fb97fb5aa53184ef3890f3243" "site/built/16-raster-calculations.md" "2024-05-16" +"episodes/17-work-with-multi-band-rasters.Rmd" "9f8d16f868ab05241d010bd3d81c641a" "site/built/17-work-with-multi-band-rasters.md" "2024-05-16" +"episodes/18-import-and-visualise-osm-data.Rmd" "b11318c45d505729cda3debc60f2d7ef" "site/built/18-import-and-visualise-osm-data.md" "2024-05-16" +"episodes/19-basic-gis-with-r-sf.Rmd" "3c811cb3af87e094697c0038e5bba8fc" "site/built/19-basic-gis-with-r-sf.md" "2024-05-16" +"instructors/instructor-notes.md" "55fd6f5f1627ddc05b0d8a25a1fc22bd" "site/built/instructor-notes.md" "2024-05-16" +"learners/reference.md" "1c7cc4e229304d9806a13f69ca1b8ba4" "site/built/reference.md" "2024-05-16" +"learners/setup.md" "dea81100282d7460d6534bcb721c6982" "site/built/setup.md" "2024-05-16" +"profiles/learner-profiles.md" "60b93493cf1da06dfd63255d73854461" "site/built/learner-profiles.md" "2024-05-16" +"renv/profiles/lesson-requirements/renv.lock" "4087d7ec29f3d88f8ea79906f233e491" "site/built/renv.lock" "2024-05-16"