Description
-----------
*r.estimap.recreation* is an implementation of the ESTIMAP recreation algorithm to
support mapping and modelling of ecosystem services (Zulian, 2014).
Examples
--------
For the sake of demonstrating the usage of the module, we use the
following "component" maps
- area_of_interest
- land_suitability
- water_resources
- protected_areas
(available to download at: ...) to derive a recreation *potential* map.
![Example of a land suitability input map](images/r_estimap_recreation_area_of_interest.png)
![Example of a land suitability input map](images/r_estimap_recreation_land_suitability.png)
![Example of a water resources input map](images/r_estimap_recreation_water_resources.png) ![Example
of a protected areas input map](images/r_estimap_recreation_protected_areas.png)
Before anything, we need to define the extent of interest using
g.region raster=area_of_interest
### Using pre-processed maps
The first four input options of the module are designed to receive
pre-processed input maps that classify as either `land`, `natural`,
`water` and `infrastructure` resources.
#### Potential
To compute a *potential* output map, the simplest possible command call
requires the user to define the input map option `land` and define a
name for the output map option `potential`. Using a pre-processed map
that depicts the suitability of different land types to support for
recreation (here the map named
`land_suitability) the command to execute is: `
r.estimap.recreation land=land_suitability potential=potential
![Example of a recreation potential output map](images/r_estimap_recreation_potential.png)
Note, this will process the input map `land_suitability` over the extent
defined previously via `g.region`, which is the standard behaviour in
GRASS GIS.
To exclude certain areas from the computations, we may use a raster map
as a mask and feed it to the input map option `mask`:
r.estimap.recreation land=land_suitability mask=area_of_interest potential=potential_1
![Example of a recreation potential output map while using a
MASK](images/r_estimap_recreation_potential_1.png)
The use of a mask (in GRASS GIS' terminology known as **MASK**) will
ignore areas of **No Data** (pixels in the `area_of_interest` map
assigned the NULL value). Successively, these areas will be empty in the
output map `potential_1`. Actually, the same effect can be achieved by
using GRASS GIS' native mask creation module `r.mask` and feed it with a
raster map of interest. The result will be a raster map named **MASK**
whose presence acts as a filter. In the following examples, it becomes
obvious that if a single input map features such **No Data** areas, they
will be propagated in the output map.
Nonetheless, it is good practice to use a `MASK` when one needs to
ensure the exclusion of undesired areas from any computations. Also,
note the `--o` flag: it is required to overwrite the already existing
map named `potential_1`.
Next, we add a water component, a map named `water_resources`, modify
the output map name to `potential_2` and execute again, without a mask:
r.estimap.recreation land=land_suitability water=water_resources potential=potential_2
![Example of a recreation potential output map while using a MASK, a
land suitability map and a water resources map](images/r_estimap_recreation_potential_2.png)
At this point it becomes clear that all `NULL` cells present in the
"water" map, are proagated in the output map `potential_2`.
Following, we provide a map of protected areas named `protected_areas`,
modify the output map name to `potential_3` and repeat the command
execution:
r.estimap.recreation land=land_suitability water=water_resources natural=protected_areas potential=potential_3
![Example of a recreation potential output map while using a MASK, a
land suitability map, a water resources map and a natural resources
map](images/r_estimap_recreation_potential_3.png)
While the `land` option accepts only one map as an input, both the
`water` and the `natural` options accept multiple maps as inputs. In
example, we add a second map named `bathing_water_quality` to the water
component and modify the output map name to `potential_4`:
r.estimap.recreation land=land_suitability water=water_resources,bathing_water_quality natural=protected_areas potential=potential_4
In general, arbitrary number of maps, separated by comma, may be added
to options that accept multiple inputs.
![Example of a recreation potential output map while using a MASK, a
land suitability map, two water resources maps and a natural resources
map](images/r_estimap_recreation_potential_4.png)
This example, features also a title and a legend, so as to make sense of
the map.
d.rast potential_4
d.legend -c -b potential_4 at=0,15,0,1 border_color=white
d.text text="Potential" bgcolor=white
The different output map names are purposefully selected so as to enable
a visual comparison of the differences among the differenct examples.
The output maps `potential_1`, `potential_2`, `potential_3` and
`potential_4` range within \[0,3\]. Yet, they differ in the distribution
of values due to the different set of input maps.
All of the above examples base upon pre-processed maps that score the
access to and quality of land, water and natural resources. For using
*raw*, unprocessed maps, read section **Using unprocessed maps**.
#### Spectrum
To derive a map with the recreation (opportunity) `spectrum`, we need in
addition an `infrastructure` component. In this example a map that
scores distance to infrastructure (such as the road network) named
`distance_to_infrastructure` is defined as an input:
![Example of an input map showing distances to
infrastructure](images/r_estimap_recreation_distance_to_infrastructure.png)
Naturally, we need to define the output map option `spectrum` too:
r.estimap.recreation \
land=land_suitability \
water=water_resources,bathing_water_quality \
natural=protected_areas \
infrastructure=distance_to_infrastructure
spectrum=spectrum \
or, the same command in a copy-paste friendly way:
r.estimap.recreation land=land_suitability water=water_resources,bathing_water_quality natural=protected_areas infrastructure=distance_to_infrastructure spectrum=spectrum
![Example of a recreation spectrum output map while using a MASK, a land
suitability map, a water resources map and a natural resources
map](images/r_estimap_recreation_spectrum.png)
Missing to define the `infrastructure` map, the command will abort and
inform about.
The image above, was produced via the following native GRASS GIS
commands
d.rast spectrum
d.legend -c -b spectrum at=0,30,0,1 border_color=white
d.text text="Spectrum" bgcolor=white
##### Opportunity
The `opportunity` map is actually an intermediate step of the algorithm.
The option to output this map `opportunity` is meant for expert users
who want to explore the fundamentals of the processing steps. Hence, it
requires to define the output option `spectrum` map as well. Building
upon the previous command, we add the `opportunity` output option:
r.estimap.recreation \
mask=area_of_interest \
land=land_suitability \
water=water_resources,bathing_water_quality \
natural=protected_areas \
spectrum=spectrum \
infrastructure=distance_to_infrastructure \
opportunity=opportunity
or, the same command in a copy-paste friendly way:
r.estimap.recreation mask=area_of_interest land=land_suitability water=water_resources,bathing_water_quality natural=protected_areas spectrum=spectrum infrastructure=distance_to_infrastructure opportunity=opportunity
![Example of a recreation spectrum output map while using a MASK, a land
suitability map, a water resources map and a natural resources
map](images/r_estimap_recreation_opportunity.png)
#### More input maps
To derive the outputs met `demand` distributiom, `unmet` demand
distributiom and the actual `flow`, additional requirements are a
`population` map and one of boundaries, as an input to the option
`base`, within which to quantify the distribution of the population.
Using a map of administrative boundaries for the latter option, serves
for deriving comparable figures across these boundaries. The algorithm
sets internally the spatial resolution of all related output maps
`demand`, `unmet` and `flow` to the spatial resolution of the
`population` input map.
Population
![Fragment of a population map (GHSL, 2015)](images/r_estimap_recreation_population_2015.png)
In this example, the population map named `population_2015` is of
1000m\^2.
Local administrative units
![Fragment of a local administrative units input
map](images/r_estimap_recreation_local_administrative_units.png)
The map named `local_administrative_units` serves in the following
example as the base map for the zonal statistics to obtain the demand
map.
#### Demand
r.estimap.recreation --o \
mask=area_of_interest \
land=land_suitability \
water=water_resources,bathing_water_quality \
natural=protected_areas \
infrastructure=distance_to_infrastructure \
demand=demand \
population=population_2015 \
base=local_administrative_units
![Example of a demand distribution output map while using a MASK and
inputs for land suitability, water resources, natural resources,
infrastructure, population and base](images/r_estimap_recreation_demand.png)
#### Unmet Demand
r.estimap.recreation --o \
mask=area_of_interest \
land=land_suitability \
water=water_resources,bathing_water_quality \
natural=protected_areas \
infrastructure=distance_to_infrastructure \
demand=demand \
unmet=unmet_demand \
population=population_2015 \
base=local_administrative_units
![Example of an 'unmet demand' output map while using a MASK and inputs
for land suitability, water resources, natural resources,
infrastructure, population and base](images/r_estimap_recreation_unmet_demand.png)
#### Mobility
The *mobility* bases upon the same function used to quantify the
attractiveness of locations for their recreational value. It includes an
extra *score* term.
The computation involves a *distance* map, reclassified in 5 categories
as shown in the following table. For each distance category, a unique
pair of coefficient values is assigned to the basic equation.
Distance Kappa Alpha
---------- --------- ---------
0 to 1 0.02350 0.00102
1 to 2 0.02651 0.00109
2 to 3 0.05120 0.00098
3 to 4 0.10700 0.00067
>4 0.06930 0.00057
Note, the last distance category is not considered in deriving the final
"map of visits". The output is essentially a raster map with the
distribution of the demand per distance category and within predefined
geometric boundaries
r.estimap.recreation --o \
mask=area_of_interest \
land=land_suitability \
water=water_resources,bathing_water_quality \
natural=protected_areas \
infrastructure=distance_to_infrastructure \
mobility=mobility \
population=population_2015 \
base=local_administrative_units
![Example of a mobility output map while using a MASK and inputs for
land suitability, water resources, natural resources, infrastructure,
population and base](images/r_estimap_recreation_mobility.png)
#### All in one call
Of course it is possible to derive all output maps with one call:
r.estimap.recreation --o \
mask=area_of_interest \
land=land_suitability \
water=water_resources,bathing_water_quality \
natural=protected_areas \
infrastructure=distance_to_infrastructure \
potential=potential \
opportunity=opportunity \
spectrum=spectrum \
demand=demand \
unmet=unmet_demand \
mobility=mobility \
population=population_2015 \
base=local_administrative_units
timestamp='2018'
Note the use of the `timestamp` parameter! This concerns the `spectrum`
map. If plans include working with GRASS GIS' temporal framework on
time-series, this will be useful.
### Using unprocessed input maps
The module offers a pre-processing functionality for all of the
following input components:
- landuse
- suitability\_scores
- landcover
- land\_classes
- lakes
- lakes\_coefficients
- default is set to: euclidean,1,30,0.008,1
- coastline
- coastline\_coefficients
- default is set to: euclidean,1,30,0.008,1
- coast\_geomorphology
- bathing\_water
- bathing\_coefficients
- default is set to: euclidean,1,5,0.01101
- protected
- protected\_scores
- 11:11:0,12:12:0.6,2:2:0.8,3:3:0.6,4:4:0.6,5:5:1,6:6:0.8,7:7:0,8:8:0,9:9:0
- anthropic
- anthropic\_distances
- 0:500:1,500.000001:1000:2,1000.000001:5000:3,5000.000001:10000:4,10000.00001:\*:5
- roads
- roads\_distances
- 0:500:1,500.000001:1000:2,1000.000001:5000:3,5000.000001:10000:4,10000.00001:\*:5
A first look on how this works, is to experiment with the `landuse` and
`suitability_scores` input options.
Let's return to the first example, and use a fragment from the
unprocessed CORINE land data set, instead of the `land_suitability` map.
This requires a set of "score" rules, that correspond to the CORINE
nomenclature, to translate the land cover types into recreation
potential.
![Fragment from the CORINE land data base ](images/r_estimap_recreation_corine_land_cover_2006.png)
![Legend for the CORINE land data base](images/r_estimap_recreation_corine_land_cover_legend.png)
In this case, the rules are a simple ASCII file (for example named
`corine_suitability.scores` that contains the following
1:1:0:0
2:2:0.1:0.1
3:9:0:0
10:10:1:1
11:11:0.1:0.1
12:13:0.3:0.3
14:14:0.4:0.4
15:17:0.5:0.5
18:18:0.6:0.6
19:20:0.3:0.3
21:22:0.6:0.6
23:23:1:1
24:24:0.8:0.8
25:25:1:1
26:29:0.8:0.8
30:30:1:1
31:31:0.8:0.8
32:32:0.7:0.7
33:33:0:0
34:34:0.8:0.8
35:35:1:1
36:36:0.8:0.8
37:37:1:1
38:38:0.8:0.8
39:39:1:1
40:42:1:1
43:43:0.8:0.8
44:44:1:1
45:45:0.3:0.3
This file is provided in the `suitability_scores` option:
r.estimap.recreation landuse=corine_land_cover_2006 suitability_scores=corine_suitability.scores potential=potential_corine --o
![Example of a recreation spectrum output map while using a MASK, based
on a fragment from the CORINE land data base](images/r_estimap_recreation_potential_corine.png)
The same can be achieved with a long one-line string too:
r.estimap.recreation \
landuse=corine_land_cover_2006 \
suitability_scores="1:1:0:0,2:2:0.1:0.1,3:9:0:0,10:10:1:1,11:11:0.1:0.1,12:13:0.3:0.3,14:14:0.4:0.4,15:17:0.5:0.5,18:18:0.6:0.6,19:20:0.3:0.3,21:22:0.6:0.6,23:23:1:1,24:24:0.8:0.8,25:25:1:1,26:29:0.8:0.8,30:30:1:1,31:31:0.8:0.8,32:32:0.7:0.7,33:33:0:0,34:34:0.8:0.8,35:35:1:1,36:36:0.8:0.8,37:37:1:1,38:38:0.8:0.8,39:39:1:1,40:42:1:1,43:43:0.8:0.8,44:44:1:1,45:45:0.3:0.3" potential=potential_1 --o
In fact, this very scoring scheme, for CORINE land data sets, is
integrated in the module, so we obtain the same output even by
discarding the `suitability_scores` option:
r.estimap.recreation landuse=corine_land_cover_2006 suitability_scores=corine_suitability.scores potential=potential_1 --o
This is so because CORINE is a standard choice among existing land data
bases that cover european territories. In case of a user requirement to
provide an alternative scoring scheme, all what is required is either of
- provide a new "rules" file with the desired set of scoring rules
- provide a string to the `suitability_scores` option
Author
------
Nikos Alexandris
Licence
-------
Copyright 2018 European Union
Licensed under the EUPL, Version 1.2 or – as soon they will be
approved by the European Commission – subsequent versions of the
EUPL (the "Licence");
You may not use this work except in compliance with the Licence.
You may obtain a copy of the Licence at:
https://joinup.ec.europa.eu/collection/eupl/eupl-text-11-12
Unless required by applicable law or agreed to in writing,
software distributed under the Licence is distributed on an
"AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
either express or implied. See the Licence for the specific
language governing permissions and limitations under the Licence.
Consult the LICENCE file for details.