From a98ecd0fbee7f3c59899d3797964cf732fd16bf7 Mon Sep 17 00:00:00 2001 From: Robin Lovelace Date: Wed, 25 Sep 2024 10:10:19 +0100 Subject: [PATCH] 1115 proofreading changes 1 (#1123) * Map making -> map-making throughout * Real world -> real-world * More fixes to c1 * use-case -> use case * Finish proofing changes to c1 * Apply suggestions from code review * Update 09-mapping.Rmd Co-authored-by: Jakub Nowosad * Update 09-mapping.Rmd Co-authored-by: Jakub Nowosad * earth -> Earth * Earth --------- Co-authored-by: Jakub Nowosad --- 01-introduction.Rmd | 62 +++++++++++++++++---------------- 02-spatial-data.Rmd | 18 +++++----- 08-read-write-plot.Rmd | 2 +- 09-mapping.Rmd | 38 ++++++++++---------- 10-gis.Rmd | 4 +-- 12-spatial-cv.Rmd | 6 ++-- 13-transport.Rmd | 4 +-- 15-eco.Rmd | 2 +- 16-synthesis.Rmd | 4 +-- _01-ex.Rmd | 2 +- _02-ex.Rmd | 2 +- code/chapters/01-introduction.R | 2 +- code/chapters/13-transport.R | 2 +- code/sfheaders.Rmd | 2 +- geocompr.bib | 2 +- 15 files changed, 77 insertions(+), 75 deletions(-) diff --git a/01-introduction.Rmd b/01-introduction.Rmd index 898eee255..201d6eb10 100644 --- a/01-introduction.Rmd +++ b/01-introduction.Rmd @@ -35,7 +35,7 @@ knitr::kable(x = d, R is not the only language providing a CLI for geocomputation. Other command environments with powerful geographic capabilities exist, including Python\index{Python} (covered in the book [Geocomputation with Python](https://py.geocompx.org/)), Julia, and JavaScript. -However, R has advantages that make it a good language for learning geocomputation and for many geocomputation tasks, especially for statistics, modelling and visualization, as outlined in Section \@ref(why-open-source). +However, R has advantages that make it a good language for learning geocomputation and for many geocomputation tasks, especially for statistics, modeling and visualization, as outlined in Section \@ref(why-open-source). This book is also motivated by the importance of reproducibility\index{reproducibility} for scientific research. It aims to make reproducible geographic data analysis\index{geographic data analysis} workflows more accessible, and demonstrate the power of open geospatial software available from the command line. @@ -141,9 +141,9 @@ However, R has some key advantages, as outlined in Section \@ref(why-use-r-for-g R is a multi-platform, open source language and environment for statistical computing and graphics ([r-project.org/](https://www.r-project.org/)). With a wide range of packages, R also supports advanced geospatial statistics\index{statistics}, modeling and visualization. \index{R!language} -Integrated development environments (IDEs\index{IDE}) such as RStudio\index{RStudio} have made R more user-friendly for many, easing map making with a panel dedicated to interactive visualization. +Integrated development environments (IDEs\index{IDE}) such as RStudio\index{RStudio} have made R more user-friendly for many, easing map-making with a panel dedicated to interactive visualization. -At its core, R is an object-oriented, [functional programming language](https://adv-r.hadley.nz/fp.html) [@wickham_advanced_2019], and was specifically designed as an interactive interface to other software [@chambers_extending_2016]. +At its core, R is an object-oriented, [functional programming language](https://adv-r.hadley.nz/fp.html) [@wickham_advanced_2019] and was specifically designed as an interactive interface to other software [@chambers_extending_2016]. The latter also includes many 'bridges' to a treasure trove of GIS\index{GIS} software, 'geolibraries' and functions (see Chapter \@ref(gis)). It is thus ideal for quickly creating 'geo-tools', without needing to master lower level languages (compared to R) such as C\index{C}, FORTRAN\index{FORTRAN} or Java\index{Java} (see Section \@ref(software-for-geocomputation)). \index{R} @@ -152,7 +152,7 @@ Furthermore, R facilitates access to other languages: the packages **Rcpp** and **reticulate** enable access to C++\index{C++} and Python\index{Python} code, for example. This means R can be used as a 'bridge' to a wide range of geospatial programs (see Section \@ref(software-for-geocomputation)). -Another example showing R's flexibility and evolving geographic capabilities is interactive map making\index{map making!interactive maps}. +Another example showing R's flexibility and evolving geographic capabilities is interactive map-making\index{map-making!interactive maps}. As we'll see in Chapter \@ref(adv-map), the statement that R has "limited interactive [plotting] facilities" [@bivand_applied_2013] is no longer true. This is demonstrated by the following code chunk, which creates Figure \@ref(fig:interactive) (the functions that generate the plot are covered in Section \@ref(interactive-maps)). @@ -173,7 +173,7 @@ leaflet() |> popup = popup) ``` -```{r interactive, fig.cap="The blue markers indicate where the authors are from. The basemap is a tiled image of the Earth at night provided by NASA. Interact with the online version at r.geocompx.org, for example by zooming in and clicking on the popups.", out.width="100%", fig.scap="Where the authors are from.", echo=FALSE} +```{r interactive, fig.cap="The blue markers indicate where the authors are from. The basemap is a tiled image of the Earthat night provided by NASA. Interact with the online version at r.geocompx.org, for example by zooming in and clicking on the pop-ups.", out.width="100%", fig.scap="Where the authors are from.", echo=FALSE} if (knitr::is_latex_output()){ knitr::include_graphics("images/interactive.png") } else if (knitr::is_html_output()){ @@ -191,11 +191,11 @@ if (knitr::is_latex_output()){ } ``` -\index{map making!interactive} +\index{map-making!interactive} It would have been difficult to produce Figure \@ref(fig:interactive) using R (or any open source language for data science) a few years ago, let alone as an interactive map. This illustrates R's flexibility and how, thanks to developments such as **knitr** and **leaflet**, it can be used as an interface to other software, a theme that will recur throughout this book. -The use of R code, therefore, enables teaching geocomputation with reference to reproducible examples representing real world phenomena, rather than just abstract concepts. +The use of R code, therefore, enables teaching geocomputation with reference to reproducible examples representing real-world phenomena, rather than just abstract concepts. The 'R-spatial stack' is easy to install and has comprehensive, well-maintained and highly interoperable packages. R has 'batteries included' with statistical functions as part of the base installation and hundreds of well-maintained packages implementing many cutting edge methods. @@ -204,8 +204,8 @@ A particular strength of R is the ease with which it allows you to create public ## Software for geocomputation -R is a powerful language for geocomputation but there are many other options for geographic data analysis providing thousands of geographic functions\index{function}. -Awareness of other languages for geocomputation will help decide when a different tool may be more appropriate for a specific task, and place R in the wider geospatial ecosystem. +R is a powerful language for geocomputation, but there are many other options for geographic data analysis providing thousands of geographic functions\index{function}. +Awareness of other languages for geocomputation will help decide when a different tool may be more appropriate for a specific task, and will place R in the wider geospatial ecosystem. This section briefly introduces the languages [C++](https://isocpp.org/)\index{C++}, [Java](https://www.oracle.com/java/)\index{Java} and [Python](https://www.python.org/)\index{Python} for geocomputation, in preparation for Chapter \@ref(gis). An important feature of R (and Python) is that it is an interpreted language. @@ -213,17 +213,18 @@ This is advantageous because it enables interactive programming in a Read–Eval code entered into the console is immediately executed and the result is printed, rather than waiting for the intermediate stage of compilation. On the other hand, compiled languages such as C++\index{C++} and Java\index{Java} tend to run faster (once they have been compiled). -C++\index{C++} provides the basis for many GIS packages such as [QGIS](https://www.qgis.org/en/site/)\index{QGIS}, [GRASS GIS](https://grass.osgeo.org/)\index{GRASS GIS} and [SAGA](https://saga-gis.sourceforge.io/)\index{SAGA} so it is a sensible starting point. +C++\index{C++} provides the basis for many GIS packages such as [QGIS](https://www.qgis.org/en/site/)\index{QGIS}, [GRASS GIS](https://grass.osgeo.org/)\index{GRASS GIS} and [SAGA](https://saga-gis.sourceforge.io/)\index{SAGA}, so it is a sensible starting point. Well-written C++\index{C++} is very fast, making it a good choice for performance-critical applications such as processing large geographic datasets, but is harder to learn than Python or R. C++\index{C++} has become more accessible with the **Rcpp** package, which provides a good 'way in' to C\index{C} programming for R users. Proficiency with such low-level languages opens the possibility of creating new, high-performance 'geoalgorithms' and a better understanding of how GIS software works (see Chapter \@ref(algorithms)). However, it is not necessary to learn C++\index{C++} to use R for geocomputation. -Python\index{Python} is an important language for geocomputation especially because many Desktop GIS\index{GIS} such as GRASS GIS\index{GRASS GIS}, SAGA\index{SAGA} and QGIS\index{QGIS} provide a Python API\index{API} (see Chapter \@ref(gis)). +Python\index{Python} is an important language for geocomputation, especially because many Desktop GIS\index{GIS} such as GRASS GIS\index{GRASS GIS}, SAGA\index{SAGA} and QGIS\index{QGIS} provide a Python API\index{API} (see Chapter \@ref(gis)). Like R\index{R}, Python is a popular language for data science. Both languages are object-oriented, and have many areas of overlap, leading to initiatives such as the **reticulate** package that facilitates access to Python\index{Python} from R and the [Ursa Labs](https://ursalabs.org/) initiative to support portable libraries to the benefit of the entire open source data science ecosystem. -In practice both R and Python have their strengths and to some extent which you use is less important than the domain of application and communication of results. +In practice both R and Python have their strengths. +To some extent which you use is less important than the domain of application and communication of results. Learning either will provide a head-start in learning the other. However, there are major advantages of R\index{R} over Python\index{Python} for geocomputation\index{geocomputation}. This includes its much better support of the geographic raster data model in the language itself (see Chapter \@ref(spatial-class)) and corresponding visualization possibilities (see Chapters \@ref(spatial-class) and \@ref(adv-map)). @@ -263,7 +264,7 @@ This is especially true for the [R-sig-Geo Archives](https://stat.ethz.ch/piperm knitr::include_graphics("images/01-cranlogs.png") ``` -It is noteworthy that shifts in the wider R community, as exemplified by the data processing package **dplyr** (released in [2014](https://cran.r-project.org/src/contrib/Archive/dplyr/)) influenced shifts in R's spatial ecosystem. +It is noteworthy that shifts in the wider R community, as exemplified by the data processing package **dplyr** (released in [2014](https://cran.r-project.org/src/contrib/Archive/dplyr/)), influenced shifts in R's spatial ecosystem. Alongside other packages that have a shared style and emphasis on 'tidy data' (including, e.g., **ggplot2**), **dplyr** was placed in the **tidyverse** 'metapackage'\index{tidyverse (package)} in late [2016](https://cran.r-project.org/src/contrib/Archive/tidyverse/). The **tidyverse**\index{tidyverse (package)} approach, with its focus on long-form data and fast intuitively named functions, has become immensely popular. This has led to a demand for 'tidy geographic data' which has been partly met by **sf**. @@ -277,7 +278,7 @@ knitr::kable(top_dls[1:5, 1:2], digits = 0, caption = paste("The top 5 most downloaded packages that depend", "on sf, in terms of average number of downloads", "per day over the previous month. As of", - min(top_dls$date), " there are ", nrow(top_dls), + min(top_dls$date), ", there are ", nrow(top_dls), " packages which import sf."), caption.short = "Top 5 most downloaded packages depending on sf.", booktabs = TRUE, @@ -285,32 +286,33 @@ knitr::kable(top_dls[1:5, 1:2], digits = 0, # cranlogs::cran_top_downloads(when = "last-month") # most downloaded pkgs ``` -## The history of R-spatial +## History of R-spatial There are many benefits of using modern spatial packages such as **sf**, but there is value in understanding the history of R's spatial capabilities. -Many functions, use-cases and teaching materials are contained in older packages, many of which are still useful, provided you know where to look. +Many functions, use cases and teaching materials are contained in older packages, many of which are still useful, provided you know where to look. \index{R!history} \index{R-spatial!history} R's spatial capabilities originated in early spatial packages in the S language [@bivand_implementing_2000]. \index{S} The 1990s saw the development of numerous S scripts and a handful of packages for spatial statistics\index{statistics}. -By the year 2000 there were R packages for various spatial methods, including "point pattern analysis, geostatistics, exploratory spatial data analysis and spatial econometrics" [@bivand_open_2000]. +By the year 2000, there were R packages for various spatial methods, including "point pattern analysis, geostatistics, exploratory spatial data analysis and spatial econometrics" [@bivand_open_2000]. Some of these, notably **spatial**, **sgeostat** and **splancs** are still available on CRAN\index{CRAN} [@rowlingson_splancs_1993; @rowlingson_splancs_2017;@venables_modern_2002; @majure_sgeostat_2016]. Key spatial packages were described in @ripley_spatial_2001, which outlined R packages for spatial smoothing and interpolation [@akima_akima_2016; @jr_geor_2016] and point pattern analysis [@rowlingson_splancs_2017; @baddeley_spatial_2015]. One of these (**spatstat**) is still being actively maintained, more than 20 years after its first release. A following commentary outlined the future prospects of spatial statistics [@bivand_more_2001], setting the stage for the development of the popular **spdep** package [@bivand_spdep_2017]. -Notably, the commentary mentioned the need for standardization of spatial interfaces, efficient mechanisms for exchanging data with GIS\index{GIS}, and handling of spatial metadata such as coordinate reference systems (CRS\index{CRS}), aims which have largely been achieved. +Notably, the commentary mentioned the need for standardization of spatial interfaces, efficient mechanisms for exchanging data with GIS\index{GIS}, and handling of spatial metadata such as coordinate reference systems (CRS\index{CRS}). +These aims have largely been achieved. **maptools** [@bivand_maptools_2017] is another important package from this time, which provided an interface to the [shapelib](http://shapelib.maptools.org/) library for reading the Shapefile\index{Shapefile} file format and which fed into **sp**. An extended review of spatial packages proposed a class system to support the "data objects offered by GDAL"\index{GDAL}, including fundamental point, line, polygon, and raster types, and interfaces to external libraries [@hornik_approaches_2003]. -To a large extent these ideas were realized in the packages **rgdal** and **sp**, providing a foundation for the seminal book *Applied Spatial Data Analysis with R* (ASDAR) [@bivand_applied_2013], first published in 2008. +To a large extent, these ideas were realized in the packages **rgdal** and **sp**, providing a foundation for the seminal book *Applied Spatial Data Analysis with R* (ASDAR) [@bivand_applied_2013], first published in 2008. R's spatial capabilities have evolved substantially since then, but they still build on the ideas of early pioneers. Interfaces to GDAL\index{GDAL} and PROJ\index{PROJ}, for example, still power R's high-performance geographic data I/O and CRS\index{CRS} transformation capabilities, as outlined in Chapters \@ref(reproj-geo-data) and \@ref(read-write), respectively. **rgdal**, released in 2003, provided GDAL\index{GDAL} bindings for R which greatly enhanced its ability to import data from previously unavailable geographic data formats. -The initial release supported only raster drivers but subsequent enhancements provided support for coordinate reference systems (via the PROJ library), reprojections and import of vector file formats. +The initial release supported only raster drivers, but subsequent enhancements provided support for coordinate reference systems (via the PROJ library), reprojections and import of vector file formats. Many of these additional capabilities were developed by Barry Rowlingson and released in the **rgdal** codebase in 2006, as described in @rowlingson_rasp:_2003 and the [R-help](https://stat.ethz.ch/pipermail/r-help/2003-January/028413.html) email list. The **sp** package, released in 2005, was a significant advancement in R's spatial capabilities. @@ -320,8 +322,8 @@ This allows for efficient data operations on geographic data. The package also provided generic methods like `summary()` and `plot()` for working with geographic data. In the following decade, **sp** classes rapidly became popular for geographic data in R and the number of packages that depended on it increased from around 20 in 2008 to over 100 in 2013 [@bivand_applied_2013]. -By 2019 more than 500 packages imported **sp**, although this number is falling as developers switch to **sf** and other packages. -Prominent R packages using **sp** include: **gstat**, for spatial and spatio-temporal geostatistics\index{spatial!statistics}; and **geosphere**, for spherical trigonometry [@R-gstat; @hijmans_geosphere_2016]. +By 2019 more than 500 packages imported **sp**. +Although the number of packages that depend on **sp** has decreased since the release of **sf** it is still used by prominent R packages, including **gstat** (for spatial and spatiotemporal geostatistics)\index{spatial!statistics} and **geosphere** (for spherical trigonometry) [@R-gstat; @hijmans_geosphere_2016]. ```{r, eval=FALSE, echo=FALSE} # Aim: show n. pkgs that depend on sf and sp @@ -341,19 +343,19 @@ This was overcome by **raster**\index{raster (package)}, first released in 2010 An important capability of **raster** and **terra** is their ability to work with datasets that are too large to fit into RAM by supporting off-disk operations. **raster** and **terra** also supports map algebra, as described in Section \@ref(map-algebra). -In parallel with these developments of class systems and methods came the support for R as an interface to dedicated GIS software. -**GRASS** [@bivand_using_2000] and follow-on packages **spgrass6**, **rgrass7** and **rgrass** (for GRASS GIS\index{GRASS GIS} GIS 6, 7, 7 + 8 respectively) were prominent examples in this direction [@bivand_rgrass7_2016;@bivand_spgrass6_2016;@R-rgrass]. +In parallel with these developments of class systems and methods, came the support for R as an interface to dedicated GIS software. +**GRASS** [@bivand_using_2000] and follow-on packages **spgrass6**, **rgrass7** and **rgrass** were prominent examples in this direction [@bivand_rgrass7_2016;@bivand_spgrass6_2016;@R-rgrass]. Other examples of bridges between R and GIS include bridges to QGIS via **qgisprocess** [@R-qgisprocess], SAGA via **Rsagacmd** [@R-Rsagacmd] or **RSAGA** [@R-RSAGA]\index{RSAGA (package)} and ArcGIS via **RPyGeo** [@brenning_arcgis_2012, first published in 2008], and more (see Chapter \@ref(gis)). Visualization was not a focus initially, with the bulk of R-spatial development focused on analysis and geographic operations. -**sp** provided methods for map making using both the base and lattice plotting system but demand was growing for advanced map making capabilities. +**sp** provided methods for map-making using both the base and lattice plotting system, but demand was growing for advanced map-making capabilities. **RgoogleMaps** first released in 2009, allowed to overlay R spatial data on top of 'basemap' tiles from online services such as Google Maps or OpenStreetMap [@loecher_rgooglemaps_2015]. \index{ggplot2 (package)} It was followed by the **ggmap** package that added similar 'basemap' tiles capabilities to **ggplot2** [@kahle_ggmap_2013]. Though **ggmap** facilitated map-making with **ggplot2**, its utility was limited by the need to `fortify` spatial objects, which means converting them into long data frames. -While this works well for points it is computationally inefficient for lines and polygons, since each coordinate (vertex) is converted into a row, leading to huge data frames to represent complex geometries. +While this works well for points, it is computationally inefficient for lines and polygons, since each coordinate (vertex) is converted into a row, leading to huge data frames to represent complex geometries. Although geographic visualization tended to focus on vector data, raster visualization was supported in **raster** and received a boost with the release of **rasterVis** [@lamigueiro_displaying_2018]. -Since then map making in R has become a hot topic, with dedicated packages such as **tmap**, **leaflet** and **mapview** gaining popularity, as highlighted in Chapter \@ref(adv-map). +Since then map-making in R has become a hot topic, with dedicated packages such as **tmap**, **leaflet** and **mapview** gaining popularity, as highlighted in Chapter \@ref(adv-map). Since 2018, when the First Edition of Geocomputation with R was published, the development of geographic R packages has accelerated. \index{terra (package)}\index{raster (package)} @@ -374,13 +376,13 @@ The **rayshader** package, for example, enables the development of striking and The very popular **ggplot2** package gained new spatial capabilities, thanks to work on the **ggspatial** package, which provides scale bars and north arrows [@dunnington_ggspatial_2021]. **gganimate** enables smooth and customizable spatial animations [@pedersen_gganimate_2020]. -Existing visualization packages have also been improved or re-written. +Existing visualization packages have also been improved or rewritten. Large raster objects are automatically downscaled in **tmap** and high-performance interactive maps are now possible thanks to packages including **leafgl** and **mapdeck**. -The **mapsf** package (successor of **cartography**) was re-written to reduce dependencies and improve performance [@giraud_mapsf_2021]; and **tmap** underwent a major update in Version 4, in which most of the internal code was revised. +The **mapsf** package (successor of **cartography**) was rewritten to reduce dependencies and improve performance [@giraud_mapsf_2021]; and **tmap** underwent a major update in Version 4, in which most of the internal code was revised. In late 2021, the planned retirement of **rgdal**, **rgeos** and **maptools** [was announced](https://stat.ethz.ch/pipermail/r-sig-geo/2021-September/028760.html) and in October 2023 they were archived on CRAN. -This retirement at the end of 2023 has had a large impact on existing workflows applying these packages, but also [influenced the packages that depend on them](https://geocompx.org/post/2023/rgdal-retirement/). +This retirement at the end of 2023 not only has had a large impact on existing workflows applying these packages, but also [influenced the packages that depend on them](https://geocompx.org/post/2023/rgdal-retirement/). Modern R packages such as **sf** and **terra**, described in Chapter \@ref(spatial-class) provide a strong and future-proof foundation for geocomputation that we build on in this book. ## Exercises diff --git a/02-spatial-data.Rmd b/02-spatial-data.Rmd index 2ef97154f..3b8c76284 100644 --- a/02-spatial-data.Rmd +++ b/02-spatial-data.Rmd @@ -149,7 +149,7 @@ Simple features is an [open standard](http://portal.opengeospatial.org/files/?ar Simple features is a hierarchical data model that represents a wide range of geometry types. Of 18 geometry types supported by the specification, only 7 are used in the vast majority of geographic research (see Figure \@ref(fig:sf-ogc)); these core geometry types are fully supported by the R package **sf** [@pebesma_simple_2018].^[ -The full OGC standard includes rather exotic geometry types including 'surface' and 'curve' geometry types, which currently have limited application in real world applications. +The full OGC standard includes rather exotic geometry types including 'surface' and 'curve' geometry types, which currently have limited application in real-world applications. You can find the whole list of possible feature types in [the PostGIS manual ](http://postgis.net/docs/using_postgis_dbmanagement.html). All 18 types can be represented with the **sf** package, although at the time of writing (2024) plotting only works for the 'core 7'. ] @@ -290,13 +290,13 @@ As described in Chapter \@ref(attr), which shows how to manipulate `sf` objects **spatstat**, a package ecosystem which provides numerous functions for spatial statistics, and **terra** both have vector geographic data classes, but neither have the same level of uptake as **sf** does for working with vector data. Many popular packages build on **sf**, as shown by the rise in its popularity in terms of number of downloads per day, as shown in Section \@ref(r-ecosystem) in the previous chapter. -### Basic map making {#basic-map} +### Basic map-making {#basic-map} Basic maps are created in **sf** with `plot()`. By default this creates a multi-panel plot, one sub-plot for each variable of the object, as illustrated in the left-hand panel in Figure \@ref(fig:sfplot). A legend or 'key' with a continuous color is produced if the object to be plotted has a single variable (see the right-hand panel). Colors can also be set with `col = `, although this will not create a continuous palette or a legend. -\index{map making!basic} +\index{map-making!basic} ```{r sfplot, fig.cap="Plotting with sf, with multiple variables (left) and a single variable (right).", out.width="49%", fig.show='hold', warning=FALSE, fig.scap="Plotting with sf."} plot(world[3:6]) @@ -326,13 +326,13 @@ plot(asia, add = TRUE, col = "red") ```{block2 plottingpacks, type='rmdnote'} Adding layers in this way can be used to verify the geographic correspondence between layers: the `plot()` function is fast to execute and requires few lines of code, but does not create interactive maps with a wide range of options. -For more advanced map making we recommend using dedicated visualization packages such as **tmap** [@tmap2018] (see Chapter \@ref(adv-map)). +For more advanced map-making we recommend using dedicated visualization packages such as **tmap** [@tmap2018] (see Chapter \@ref(adv-map)). ``` There are various ways to modify maps with **sf**'s `plot()` method. Because **sf** extends base R plotting methods, `plot()`'s arguments work with `sf` objects (see `?graphics::plot` and `?par` for information on arguments such as `main =`).^[ Note: many plot arguments are ignored in facet maps, when more than one `sf` column is plotted.] -\index{base plot|see {map making}}\index{map making!base plotting} Figure \@ref(fig:contpop) illustrates this flexibility by overlaying circles, whose diameters (set with `cex =`) represent country populations, on a map of the world. +\index{base plot|see {map-making}}\index{map-making!base plotting} Figure \@ref(fig:contpop) illustrates this flexibility by overlaying circles, whose diameters (set with `cex =`) represent country populations, on a map of the world. An unprojected version of this figure can be created with the following commands (see exercises at the end of this chapter and the script [`02-contplot.R`](https://github.com/geocompx/geocompr/blob/main/code/02-contpop.R) to reproduce Figure \@ref(fig:contpop)): ```{r 02-spatial-data-16, eval=FALSE} @@ -707,7 +707,7 @@ Every core **sfheaders** function has a corresponding C++ implementation, as des For most people, the R functions will be more than sufficient to benefit from the computational speed of the package. **sfheaders** was developed separately from **sf**, but aims to be fully compatible, creating valid `sf` objects of the type described in preceding sections. -The simplest use-case for **sfheaders** is demonstrated in the code chunks below with examples of building `sfg`, `sfc`, and `sf` objects showing: +The simplest use case for **sfheaders** is demonstrated in the code chunks below with examples of building `sfg`, `sfc`, and `sf` objects showing: - A vector converted to `sfg_POINT` - A matrix converted to `sfg_LINESTRING` @@ -899,7 +899,7 @@ source("code/02-raster-intro-plot2.R", print.eval = TRUE) Over the last two decades, several packages for reading and processing raster datasets have been developed. \index{raster (package)}\index{terra (package)}\index{stars (package)} -As outlined in Section \@ref(the-history-of-r-spatial), chief among them was **raster**, which led to a step change in R's raster capabilities when it was launched in 2010 and the premier package in the space until the development of **terra** and **stars**. +As outlined in Section \@ref(history-of-r-spatial), chief among them was **raster**, which led to a step change in R's raster capabilities when it was launched in 2010 and the premier package in the space until the development of **terra** and **stars**. Both more recently developed packages provide powerful and performant functions for working with raster datasets and there is substantial overlap between their possible use cases. In this book we focus on **terra**, which replaces the older and (in most cases) slower **raster**. Before learning about the how **terra**'s class system works, this section describes similarities and differences between **terra** and **stars**; this knowledge will help decide which is most appropriate in different situations. @@ -957,10 +957,10 @@ Dedicated functions report each component: `dim()` returns the number of rows, c `help("terra-package")` returns a full list of all available **terra** functions. ``` -### Basic map making {#basic-map-raster} +### Basic map-making {#basic-map-raster} Similar to the **sf** package, **terra** also provides `plot()` methods for its own classes. -\index{map making!basic raster} +\index{map-making!basic raster} ```{r basic-new-raster-plot, fig.cap="Basic raster plot."} plot(my_rast) diff --git a/08-read-write-plot.Rmd b/08-read-write-plot.Rmd index 5d86e7439..b939fbf9a 100644 --- a/08-read-write-plot.Rmd +++ b/08-read-write-plot.Rmd @@ -733,7 +733,7 @@ Additional examples are available through vignettes, such as [how to access rast ## Visual outputs -\index{map making!outputs} +\index{map-making!outputs} R supports many different static and interactive graphics formats. Chapter \@ref(adv-map) covers map-making in detail, but it is worth mentioning ways to output visualizations here. The most general method to save a static plot is to open a graphic device, create a plot, and close it, for example: diff --git a/09-mapping.Rmd b/09-mapping.Rmd index 6ac3f425d..6d3158818 100644 --- a/09-mapping.Rmd +++ b/09-mapping.Rmd @@ -44,26 +44,26 @@ nz_elev = rast(system.file("raster/nz_elev.tif", package = "spDataLarge")) ## Introduction A satisfying and important aspect of geographic research is communicating the results. -Map making\index{map making} --- the art of cartography --- is an ancient skill involving communication, attention to detail, and an element of creativity. +map-making\index{map-making} --- the art of cartography --- is an ancient skill involving communication, attention to detail, and an element of creativity. Static mapping in R is straightforward with the `plot()` function, as we saw in Section \@ref(basic-map). It is possible to create advanced maps using base R methods [@murrell_r_2016]. The focus of this chapter, however, is cartography with dedicated map-making packages. When learning a new skill, it makes sense to gain depth-of-knowledge in one area before branching out. -Map making is no exception, hence this chapter's coverage of one package (**tmap**) in depth rather than many superficially. +Map-making is no exception, hence this chapter's coverage of one package (**tmap**) in depth rather than many superficially. In addition to being fun and creative, cartography also has important practical applications. A carefully crafted map can be the best way of communicating the results of your work, but poorly designed maps can leave a bad impression. Common design issues include poor placement, size and readability of text and careless selection of colors, as outlined in the style [guide](https://files.taylorandfrancis.com/TJOM-suppmaterial-quick-guide.pdf) of the Journal of Maps. -Furthermore, poor map making can hinder the communication of results [@brewer_designing_2015]: +Furthermore, poor map-making can hinder the communication of results [@brewer_designing_2015]: > Amateur-looking maps can undermine your audience’s ability to understand important information and weaken the presentation of a professional data investigation. Maps have been used for several thousand years for a wide variety of purposes. Historic examples include maps of buildings and land ownership in the Old Babylonian dynasty more than 3000 years ago and Ptolemy's world map in his masterpiece *Geography*\index{geography} nearly 2000 years ago [@talbert_ancient_2014]. -Map making has historically been an activity undertaken only by, or on behalf of, the elite. +Map-making has historically been an activity undertaken only by, or on behalf of, the elite. This has changed with the emergence of open source mapping software such as the R package **tmap** and the 'print layout' in QGIS\index{QGIS} which enable anyone to make high-quality maps, enabling 'citizen science'. Maps are also often the best way to present the findings of geocomputational research in a way that is accessible. -Map making is therefore a critical part of geocomputation\index{geocomputation} and its emphasis not only on describing, but also *changing* the world. +Map-making is therefore a critical part of geocomputation\index{geocomputation} and its emphasis not only on describing, but also *changing* the world. This chapter shows how to make a wide range of maps. The next section covers a range of static maps, including aesthetic considerations, facets and inset maps. @@ -72,7 +72,7 @@ Finally, Section \@ref(other-mapping-packages) covers a range of alternative map ## Static maps -\index{map making!static maps} +\index{map-making!static maps} Static maps are the most common type of visual output from geocomputation. They are usually stored in standard formats including `.png` and `.pdf` for *graphical* raster and vector outputs, respectively. Initially, static maps were the only type of maps that R could produce. @@ -119,8 +119,8 @@ source("https://github.com/geocompx/geocompr/raw/main/code/09-tmshape.R", print. The object passed to `tm_shape()` in this case is `nz`, an `sf` object representing the regions of New Zealand (see Section \@ref(intro-sf) for more on `sf` objects). Layers are added to represent `nz` visually, with `tm_fill()` and `tm_borders()` creating shaded areas (left panel) and border outlines (middle panel) in Figure \@ref(fig:tmshape), respectively. -\index{map making!layers} -This is an intuitive approach to map making: +\index{map-making!layers} +This is an intuitive approach to map-making: the common task of *adding* new layers is undertaken by the addition operator `+`, followed by `tm_*()`. The asterisk (\*) refers to a wide range of layer types which have self-explanatory names including: @@ -184,7 +184,7 @@ map_nz3 = map_nz2 + tm_shape(nz_height) + tm_symbols() ``` -\index{map making!metaplot} +\index{map-making!metaplot} A useful and little known feature of **tmap** is that multiple map objects can be arranged in a single 'metaplot' with `tmap_arrange()`. This is demonstrated in the code chunk below which plots `map_nz1` to `map_nz3`, resulting in Figure \@ref(fig:tmlayers). @@ -197,8 +197,8 @@ Aesthetic settings, however, are controlled by arguments to layer functions. ### Visual variables -\index{map making!aesthetics} -\index{map making!visual variables} +\index{map-making!aesthetics} +\index{map-making!visual variables} The plots in the previous section demonstrate **tmap**'s default aesthetic settings. Gray shades are used for `tm_fill()` and `tm_symbols()` layers and a continuous black line is used to represent lines created with `tm_lines()`. Of course, these default values and other aesthetics can be overridden. @@ -364,7 +364,7 @@ For example run `tmap_options()$values.var`. ``` \index{color palettes} -There are three main groups of color palettes\index{map making!color palettes}: categorical, sequential and diverging (Figure \@ref(fig:colpal)), and each of them serves a different purpose.^[ +There are three main groups of color palettes\index{map-making!color palettes}: categorical, sequential and diverging (Figure \@ref(fig:colpal)), and each of them serves a different purpose.^[ A fourth group of color palettes, called bivariate, also exists. They are used when we want to represent relations between two variables on one map. ] @@ -520,7 +520,7 @@ source("code/09-layout2.R", print.eval = TRUE) ### Faceted maps -\index{map making!faceted maps} +\index{map-making!faceted maps} \index{tmap (package)!faceted maps} Faceted maps, also referred to as 'small multiples', are composed of many maps arranged side-by-side, and sometimes stacked vertically [@meulemans_small_2017]. Facets enable the visualization of how spatial relationships change with respect to another variable, such as time. @@ -555,7 +555,7 @@ In addition to their utility for showing changing spatial relationships, faceted ### Inset maps -\index{map making!inset maps} +\index{map-making!inset maps} \index{tmap (package)!inset maps} An inset map is a smaller map rendered within or next to the main map. It could serve many different purposes, including providing a context (Figure \@ref(fig:insetmap1)) or bringing some non-contiguous regions closer to ease their comparison (Figure \@ref(fig:insetmap2)). @@ -678,7 +678,7 @@ For a more in-depth approach, see the [`us-map`](https://geocompx.github.io/geoc ## Animated maps -\index{map making!animated maps} +\index{map-making!animated maps} \index{tmap (package)!animated maps} Faceted maps, described in Section \@ref(faceted-maps), can show how spatial distributions of variables change (e.g., over time), but the approach has disadvantages. Facets become tiny when there are many of them. @@ -747,11 +747,11 @@ if (knitr::is_latex_output()){ ## Interactive maps -\index{map making!interactive maps} +\index{map-making!interactive maps} \index{tmap (package)!interactive maps} While static and animated maps can enliven geographic datasets, interactive maps can take them to a new level. Interactivity can take many forms, the most common and useful of which is the ability to pan around and zoom into any part of a geographic dataset overlaid on a 'web map' to show context. -Less advanced interactivity levels include popups which appear when you click on different features, a kind of interactive label. +Less advanced interactivity levels include pop-ups which appear when you click on different features, a kind of interactive label. More advanced levels of interactivity include the ability to tilt and rotate maps, as demonstrated in the **mapdeck** example below, and the provision of "dynamically linked" sub-plots which automatically update when the user pans and zooms [@pezanowski_senseplace3_2018]. The most important type of interactivity, however, is the display of geographic data on interactive or 'slippy' web maps. @@ -942,7 +942,7 @@ if (knitr::is_latex_output() || knitr::is_html_output()){ ## Mapping applications -\index{map making!mapping applications} +\index{map-making!mapping applications} The interactive web maps demonstrated in Section \@ref(interactive-maps) can go far. Careful selection of layers to display, base-maps and pop-ups can be used to communicate the main results of many projects involving geocomputation. But the web mapping approach to interactivity has limitations: @@ -1051,7 +1051,7 @@ knitr::include_graphics("images/09_cycle_hire_app.png") **tmap** provides a powerful interface for creating a wide range of static maps (Section \@ref(static-maps)) and also supports interactive maps (Section \@ref(interactive-maps)). But there are many other options for creating maps in R. -The aim of this section is to provide a taster of some of these and pointers for additional resources: map making is a surprisingly active area of R package development, so there is more to learn than can be covered here. +The aim of this section is to provide a taster of some of these and pointers for additional resources: map-making is a surprisingly active area of R package development, so there is more to learn than can be covered here. The most mature option is to use `plot()` methods provided by core spatial packages **sf** and **terra**, covered in Sections \@ref(basic-map) and \@ref(basic-map-raster), respectively. What we have not mentioned in those sections was that plot methods for vector and raster objects can be combined when the results draw onto the same plot area (elements such as keys in **sf** plots and multi-band rasters will interfere with this). diff --git a/10-gis.Rmd b/10-gis.Rmd index ec242c9e8..a66dacb9e 100644 --- a/10-gis.Rmd +++ b/10-gis.Rmd @@ -84,7 +84,7 @@ R continues this tradition with interfaces to numerous languages, notably C++\in Although R was not designed as a command line GIS, its ability to interface with dedicated GISs gives it astonishing geospatial capabilities. With GIS bridges, R can replicate more diverse workflows, with the additional reproducibility, scalability and productity benefits of controlling them from a programming environment and a consistent CLI. -Furthermore, R outperforms GISs in some areas of geocomputation\index{geocomputation}, including interactive/animated map making (see Chapter \@ref(adv-map)) and spatial statistical modeling (see Chapter \@ref(spatial-cv)). +Furthermore, R outperforms GISs in some areas of geocomputation\index{geocomputation}, including interactive/animated map-making (see Chapter \@ref(adv-map)) and spatial statistical modeling (see Chapter \@ref(spatial-cv)). This chapter focuses on 'bridges' to three mature open source GIS products, summarized in Table \@ref(tab:gis-comp): @@ -810,7 +810,7 @@ The most important open source spatial database\index{spatial database} is PostG SQLite/SpatiaLite are certainly also important but implicitly we have already introduced this approach since GRASS GIS\index{GRASS GIS} is using SQLite in the background (see Section \@ref(grass)). ] R bridges to spatial DBMSs such as PostGIS\index{PostGIS} are important, allowing access to huge data stores without loading several gigabytes of geographic data into RAM, and likely crashing the R session. -The remainder of this section shows how PostGIS can be called from R, based on "Hello real world" from *PostGIS in Action, Second Edition* [@obe_postgis_2015].^[ +The remainder of this section shows how PostGIS can be called from R, based on "Hello real-world" from *PostGIS in Action, Second Edition* [@obe_postgis_2015].^[ Thanks to Manning Publications, Regina Obe and Leo Hsu for permission to use this example. ] diff --git a/12-spatial-cv.Rmd b/12-spatial-cv.Rmd index 13e5c7f44..ba45893ff 100644 --- a/12-spatial-cv.Rmd +++ b/12-spatial-cv.Rmd @@ -26,7 +26,7 @@ library(lgr) # logging framework for R library(mlr3) # unified interface to machine learning algorithms library(mlr3learners) # most important machine learning algorithms library(mlr3extralearners) # access to even more learning algorithms -library(mlr3spatiotempcv) # spatio-temporal resampling strategies +library(mlr3spatiotempcv) # spatiotemporal resampling strategies library(mlr3tuning) # hyperparameter tuning library(mlr3viz) # plotting functions for mlr3 objects library(progressr) # report progress updates @@ -654,10 +654,10 @@ Machine learning algorithms often require hyperparameter\index{hyperparameter} i Machine learning overall, and its use to understand spatial data, is a large field and this chapter has provided the basics, but there is more to learn. We recommend the following resources in this direction: -- The **mlr3 book** (@becker_mlr3_2022; https://mlr3book.mlr-org.com/) and especially the [chapter on the handling of spatio-temporal data](https://mlr3book.mlr-org.com/chapters/chapter13/beyond_regression_and_classification.html#sec-spatiotemporal) +- The **mlr3 book** (@becker_mlr3_2022; https://mlr3book.mlr-org.com/) and especially the [chapter on the handling of spatiotemporal data](https://mlr3book.mlr-org.com/chapters/chapter13/beyond_regression_and_classification.html#sec-spatiotemporal) - An academic paper on hyperparameter\index{hyperparameter} tuning [@schratz_hyperparameter_2019] - An academic paper on how to use **mlr3spatiotempcv** [@schratz_mlr3spatiotempcv_2021] -- In case of spatio-temporal data, one should account for spatial\index{autocorrelation!spatial} and temporal\index{autocorrelation!temporal} autocorrelation when doing CV\index{cross-validation} [@meyer_improving_2018] +- In case of spatiotemporal data, one should account for spatial\index{autocorrelation!spatial} and temporal\index{autocorrelation!temporal} autocorrelation when doing CV\index{cross-validation} [@meyer_improving_2018] ## Exercises diff --git a/13-transport.Rmd b/13-transport.Rmd index 445dd2ab8..1076e16b2 100644 --- a/13-transport.Rmd +++ b/13-transport.Rmd @@ -21,7 +21,7 @@ library(sf) library(dplyr) library(spDataLarge) library(stplanr) # for processing geographic transport data -library(tmap) # map making (see Chapter 9) +library(tmap) # map-making (see Chapter 9) library(ggplot2) # data visualization package library(sfnetworks) # spatial network classes and functions ``` @@ -59,7 +59,7 @@ In this context, *agents*\index{agent-based modeling} are usually point entities Transport systems are dynamic [@xie_evolving_2011]. While the focus of this chapter is the *geographic* analysis of a transport systems, it provides insights into how the approach can be used to simulate scenarios of change, in Section \@ref(prioritizing-new-infrastructure). -The purpose of geographic transport modeling can be interpreted as simplifying the complexity of these spatio-temporal systems in ways that capture their essence. +The purpose of geographic transport modeling can be interpreted as simplifying the complexity of these spatiotemporal systems in ways that capture their essence. Selecting appropriate levels of geographic analysis can help simplify this complexity without losing its most important features and variables, enabling better decision-making and more effective interventions [@hollander_transport_2016]. Typically, models are designed to tackle a particular problem, such as how to improve safety or the environmental performance of transport systems. diff --git a/15-eco.Rmd b/15-eco.Rmd index de5063717..ef74c296e 100644 --- a/15-eco.Rmd +++ b/15-eco.Rmd @@ -17,7 +17,7 @@ library(terra) library(dplyr) library(data.table) # fast data frame manipulation (used by mlr3) library(mlr3) # machine learning (see Chapter 12) -library(mlr3spatiotempcv) # spatio-temporal resampling +library(mlr3spatiotempcv) # spatiotemporal resampling library(mlr3tuning) # hyperparameter tuning package library(mlr3learners) # interface to most important machine learning pkgs library(paradox) # defining hyperparameter spaces diff --git a/16-synthesis.Rmd b/16-synthesis.Rmd index 8c7b93ae7..46af8d899 100644 --- a/16-synthesis.Rmd +++ b/16-synthesis.Rmd @@ -126,7 +126,7 @@ There are many resources on these topics, including a [discussion on remote sens We focused on machine learning rather than spatial statistical inference\index{statistical inference} in Chapters \@ref(spatial-cv) and \@ref(eco) because of the abundance of quality resources on the topic. These resources include @zuur_mixed_2009, @zuur_beginners_2017 which focus on ecological use cases, and freely available teaching material and code on *Geostatistics & Open-source Statistical Computing* hosted at [css.cornell.edu/faculty/dgr2](https://css.cornell.edu/faculty/dgr2/teach/). -[*R for Geographic Data Science*](https://sdesabbata.github.io/r-for-geographic-data-science/) provides an introduction to R for geographic data science and modelling. +[*R for Geographic Data Science*](https://sdesabbata.github.io/r-for-geographic-data-science/) provides an introduction to R for geographic data science and modeling. We have largely omitted geocomputation on 'big data'\index{big data} by which we mean datasets that do not fit on a high-spec laptop. This decision is justified by the fact that the majority of geographic datasets that are needed for common research or policy applications *do* fit on consumer hardware, large high resolution remote sensing datasets being a notable exception (see Section \@ref(cloud)). @@ -296,7 +296,7 @@ Reproducibility\index{reproducibility}: - Encourages *creativity* by shifting the focus away from the basics (which are readily available through shared code) and towards applications - Discourages people from 'reinventing the wheel': there is no need to re-do what others have done if their methods can be used by others -- Makes research more conducive to real world applications, by enabling anyone in any sector to apply your methods in new areas +- Makes research more conducive to real-world applications, by enabling anyone in any sector to apply your methods in new areas If reproducibility is the defining asset of geocomputation (or command line GIS) it is worth considering what makes it reproducible. This brings us to the 'open source approach', which has three main components: diff --git a/_01-ex.Rmd b/_01-ex.Rmd index 1e1d30144..0faf9bee9 100644 --- a/_01-ex.Rmd +++ b/_01-ex.Rmd @@ -3,7 +3,7 @@ E1. Think about the terms 'GIS'\index{GIS}, 'GDS' and 'geocomputation' described E2. Provide three reasons for using a scriptable language such as R for geocomputation instead of using a graphical user interface (GUI) based GIS such as QGIS\index{QGIS}. -E3. In the year 2000 Stan Openshaw wrote that geocomputation involved "practical work that is beneficial or useful" to others. Think about a practical problem and possible solutions that could be informed with new evidence derived from the analysis, visualization or modelling of geographic data. With a pen and paper (or computational equivalent) sketch inputs and possible outputs illustrating how geocomputation could help. +E3. In the year 2000, Stan Openshaw wrote that geocomputation involved "practical work that is beneficial or useful" to others. Think about a practical problem and possible solutions that could be informed with new evidence derived from the analysis, visualization or modeling of geographic data. With a pen and paper (or computational equivalent) sketch inputs and possible outputs illustrating how geocomputation could help. \ No newline at end of file diff --git a/_02-ex.Rmd b/_02-ex.Rmd index 4ead6eeb6..c42b4785b 100644 --- a/_02-ex.Rmd +++ b/_02-ex.Rmd @@ -21,7 +21,7 @@ summary(world) # epsg:4326 ``` -E2. Run the code that 'generated' the map of the world in Section 2.2.3 (Basic map making). +E2. Run the code that 'generated' the map of the world in Section 2.2.3 (Basic map-making). Find two similarities and two differences between the image on your computer and that in the book. - What does the `cex` argument do (see `?plot`)? diff --git a/code/chapters/01-introduction.R b/code/chapters/01-introduction.R index 290449bc9..87290c7ff 100644 --- a/code/chapters/01-introduction.R +++ b/code/chapters/01-introduction.R @@ -37,7 +37,7 @@ knitr::kable(x = d, ## popup = popup) -## ----interactive, fig.cap="The blue markers indicate where the authors are from. The basemap is a tiled image of the Earth at night provided by NASA. Interact with the online version at geocompr.robinlovelace.net, for example by zooming in and clicking on the popups.", out.width="100%", fig.scap="Where the authors are from.", echo=FALSE---- +## ----interactive, fig.cap="The blue markers indicate where the authors are from. The basemap is a tiled image of the Earth at night provided by NASA. Interact with the online version at geocompr.robinlovelace.net, for example by zooming in and clicking on the pop-ups.", out.width="100%", fig.scap="Where the authors are from.", echo=FALSE---- if (knitr::is_latex_output()){ knitr::include_graphics("images/interactive.png") } else if (knitr::is_html_output()){ diff --git a/code/chapters/13-transport.R b/code/chapters/13-transport.R index d56cf0cc8..3ca512130 100644 --- a/code/chapters/13-transport.R +++ b/code/chapters/13-transport.R @@ -7,7 +7,7 @@ library(sf) library(dplyr) library(spDataLarge) library(stplanr) # for processing geographic transport data -library(tmap) # map making (see Chapter 9) +library(tmap) # map-making (see Chapter 9) library(ggplot2) # data visualization package library(sfnetworks) # spatial network classes and functions diff --git a/code/sfheaders.Rmd b/code/sfheaders.Rmd index 7f5873c17..b7899b634 100644 --- a/code/sfheaders.Rmd +++ b/code/sfheaders.Rmd @@ -31,7 +31,7 @@ This package is not directly affiliated with the `{sf}` library, but every effor ## Building sf objects in R -The simplest use-case for `{sfheaders}` is best demonstrated with examples of building `sfg`, `sfc` and `sf` objects. +The simplest use case for `{sfheaders}` is best demonstrated with examples of building `sfg`, `sfc` and `sf` objects. ### Simple Feature Geometry - sfg diff --git a/geocompr.bib b/geocompr.bib index 99774c342..76f79a76a 100644 --- a/geocompr.bib +++ b/geocompr.bib @@ -1673,7 +1673,7 @@ @book{openshaw_geocomputation_2000 month = may, publisher = {CRC Press}, address = {London ; New York}, - abstract = {Geocomputation is essentially the follow-on revolution from Geographic Information Science and is expected to gather speed and momentum in the first decade of the 21st century. It comes into use once a GIS database has been set up, with a digital data library, and expanded and linked to a global geographical two or three dimensional co-ordinate system. It exploits developments in IT and new data gathering and earth observing technologies, and takes the notion of GIS beyond data and towards its analysis, modelling, and use in problem solving. This book provides pointers on how to harness these technologies in tandem and in the context of multiple different subjects and problem areas. It seeks to establish the principles and set the foundations for subsequent growth.L}, + abstract = {Geocomputation is essentially the follow-on revolution from Geographic Information Science and is expected to gather speed and momentum in the first decade of the 21st century. It comes into use once a GIS database has been set up, with a digital data library, and expanded and linked to a global geographical two or three dimensional co-ordinate system. It exploits developments in IT and new data gathering and Earth observing technologies, and takes the notion of GIS beyond data and towards its analysis, modelling, and use in problem solving. This book provides pointers on how to harness these technologies in tandem and in the context of multiple different subjects and problem areas. It seeks to establish the principles and set the foundations for subsequent growth.L}, isbn = {978-0-7484-0900-6}, langid = {english} }