Open framework for calculating spatial urban sprawl indices and performing disaggregated population estimates (downscaling) using open data
Clone or download
Pull request Compare This branch is 6 commits ahead of delhomer:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

About Urbansprawl

The urbansprawl project takes its origin from a PhD thesis that was defended in november 2018 by Luciano Gervasoni at Inria. Thanks to Luciano for the seminal developments (! Oslandia takes over from Inria fellows for industrial developments, and now hosts the upstream version of the project.

The project provides an open source framework for assessing urban sprawl using open data. It uses OpenStreetMap (OSM) data to calculate its sprawling indices, divided in Accessibility, Land use mix, and Dispersion.

Locations of residential and activity (e.g. shop, commerce, office, among others) units are used to measure mixed use development and built-up dispersion, whereas the street network is used to measure the accessibility between different land uses. The output consists of spatial indices, which can be easily integrated with GIS platforms.

Additionally, a method to perform dissagregated population estimates at building level is provided. Our goal is to estimate the number of people living at the fine level of individual households by using open urban data (OpenStreetMap) and coarse-scaled population data (census tract).


The urbansprawl framework works with Python 2+3.

Using pip

  • Install the spatialindex library. Using apt-get (Linux):
sudo apt-get install libspatialindex-dev
  • Install the dependencies using pip
pip install osmnx scikit-learn psutil tensorflow keras jupyter

Using Miniconda

conda create --name urbansprawl-env
source activate urbansprawl-env
  • Install the dependencies using the conda package manager and the conda-forge channel
conda install -c conda-forge libspatialindex osmnx scikit-learn psutil tensorflow keras jupyter

Using Anaconda

conda create --name urbansprawl-env
source activate urbansprawl-env
  • Install the dependencies using the conda package manager and the conda-forge channel
conda update -c conda-forge --all
conda install -c conda-forge osmnx scikit-learn psutil tensorflow keras jupyter


The framework is presented through different examples in the form of notebooks. As well, the computational running times involved in each procedure are shown for each example. To this end, a r5.large AWS EC2 instance was employed (2 vCPU and 16GiB memory) to run the notebooks.

Please note that the different procedures can be both memory and time consuming, according to the size of the chosen region of interest. In order to run the different notebooks, type in a terminal:

jupyter notebook


OpenStreetMap data is retrieved using the Overpass API. An input region of interest can be extracted by:

  • Place + result number: The name of the city/region, and the resulting number to retrieve (as seen in OpenStreetMap result order)
  • Polygon: A polygon with the coordinates delimitating the desired region of interest
  • Bounding box: Using northing, southing, easting, and westing coordinates
  • Point + distance (meters): Use the (latitude, longitude) central point plus an input distance around it
  • Address + distance (meters): Set the address as central point and an input distance around it

Additionally, the state of the database can be retrieved for a specific data. This allows for comparisons across time and keeping track of a city's evolution.

For a sake of demonstration, results are depicted for the city of Evreux, France, a medium-sized city in Normandy:

  • Activity and residential probability density function estimated using Kernel Density Estimation (KDE), with a 100m-sized grid


  • Land use as a degree of co-occurence of activity and residential land uses within "walkable" distances (mix indice and land use intensity)


  • Accessibility indice, that denotes the degree of accessibility to differing land uses (from residential to activity uses), as the cumulative number of activity opportunities found within a certain travel distance (here, 250m)
  • Dispersion indice, that denotes the degree of scatteredness of the built-up area


  • Population densities (INSEE census data):



For more details about the project, please refer to following Inria publications: