The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.

Introduction to flexurba

The flexurba package was originally designed to flexibly reconstruct the Degree of Urbanisation (DEGURBA) classification. This is an operational definition of cities, towns and rural areas that is developed to facilitate international statistical comparisons. flexurba provides flexibility to customise the standard parameters in the DEGURBA definition and evaluate the consequences of certain implementation choices. The user can construct alternative versions of DEGURBA by changing, for example, the minimum population thresholds, and even more ‘hidden’ implementation details, such as the contiguity requirements and edge smoothing rules. For an extensive description of the package and its contribution, please consult the following journal article:

Van Migerode, C., Poorthuis, A., & Derudder, B. (2024). Flexurba: An open-source R package to flexibly reconstruct the Degree of Urbanisation classification. Environment and Planning B: Urban Analytics and City Science, 51(7), 1706-1714.

Degree of Urbanisation

The DEGURBA methodology consists of two consecutive stages: (1) a grid cell classification and (2) a spatial units classification. In the first stage, the cells of a 1 km² population grid are classified into three different categories based on the following rules, detailed in the GHSL Data Package 2023:

In the second stage, small administrative or statistical spatial units are classified into (1) cities, (2) towns and semi-dense areas, (3) and rural areas based on the proportion of population in the three grid classes:

For more information about the methodology, readers can consult Dijkstra et al. 2021, Eurostat 2021 and Global Human Settlement Layer website (GHSL).

Code example

Below is a basic example which shows how to use the `flexurba package to (1) download the required data from the GHSL website, (2) construct the grid cell classification and (3) construct the spatial units classification.

1. Download data products from the GHSL website

The grid classification of the Degree of Urbanisation requires three data sources: a population grid, built-up area grid and land grid. The code below demonstrates how the flexurba functions can be used to download the required data. Alternatively, the required data can be download from the GHSL website directly.

Below we assume that there is a folder data in the current working directory.

library(flexurba)

# make sure the time out is large enough to download all the data
options(timeout = 500)

# download the GHSL data on a global scale and save it in
# the directory "data/global"
download_GHSLdata(output_directory = "data/global")

# crop the global grid to a custom extent (here: Belgium) and save it
# in the directory "data/belgium"
# the coordinates of the extent should be provided in the Mollweide projection
crop_GHSLdata(
  extent = terra::ext(192000, 485000, 5821000, 6030000),
  global_directory = "data/global",
  output_directory = "data/belgium"
)

When employing the code above, the three data sources will be saved in the output directory as POP.tif, BUILT.tif and LAND.tif respectively.

2. Grid cell classification (stage 1)

Now that we have the data, we can construct the grid cell classification as follows.

# preprocess the data
data_belgium <- DoU_preprocess_grid("data/belgium")

# run the algorithm with the standard parameter settings
classification1 <- DoU_classify_grid(data = data_belgium)

# plot the resulting grid
DoU_plot_grid(classification1)

Grid classification 1

However, the flexurba package has more functionalities. The function DoU_classify_grid() allows the user to adapt various parameters in the classification algorithm, including the the minimum population thresholds or the smoothing rules.

The code below adapts the following parameter settings:

# run the algorithm with custom parameter settings
classification2 <- DoU_classify_grid(
  data = data_belgium,
  parameters = list(
    UC_density_threshold = 1250,
    UC_size_threshold = 60000,
    UC_gap_fill = FALSE,
    UC_smooth_edge = FALSE
  )
)

# plot the resulting grid
DoU_plot_grid(classification2)

Grid classification 2

For more information about the possible parameters setting that can be adapted, readers can consult the section ‘Custom specifications’ in the documentation of DoU_classify_grid().

3. Spatial units classification (stage 2)

Based on the grid classification, the spatial units classification can be constructed with the following code. The data object flexurba::units_belgium is used, containing spatial units of the municipalities in Belgium.

# preprocess the data
data1 <- DoU_preprocess_units(
  units = flexurba::units_belgium,
  classification = classification1,
  pop = "data/belgium/POP.tif"
)

# run the algorithm for the units classification
units_classification <- DoU_classify_units(data1)

# visualise the results
plot_units(flexurba::units_belgium, classification = units_classification)

Units classification 1

Please note that the classification functions are computationally quite heavy. Please use a small study area to start with. As a reference: the grid classification for the European continent takes approximately 187 seconds and requires around 10 GB RAM.

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.