Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mszell/bikenwgrowth
Source code for the paper "Growing urban bicycle networks", exploring algorithmically the limitations of urban bicycle network growth
https://github.com/mszell/bikenwgrowth
bicycle-network cycling gis network-analysis osmnx transportation-network urban-planning
Last synced: 2 months ago
JSON representation
Source code for the paper "Growing urban bicycle networks", exploring algorithmically the limitations of urban bicycle network growth
- Host: GitHub
- URL: https://github.com/mszell/bikenwgrowth
- Owner: mszell
- License: agpl-3.0
- Created: 2020-09-03T12:35:05.000Z (almost 4 years ago)
- Default Branch: master
- Last Pushed: 2022-05-05T20:06:08.000Z (about 2 years ago)
- Last Synced: 2024-03-23T07:33:45.192Z (4 months ago)
- Topics: bicycle-network, cycling, gis, network-analysis, osmnx, transportation-network, urban-planning
- Language: Jupyter Notebook
- Homepage:
- Size: 11 GB
- Stars: 63
- Watchers: 4
- Forks: 6
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Citation: CITATION.cff
Lists
- open-sustainable-technology - Growing Urban Bicycle Networks - Source code for the paper Growing Urban Bicycle Networks, exploring algorithmically the limitations of urban bicycle network growth. (Consumption / Mobility and Transportation)
README
# Growing Urban Bicycle Networks
This is the source code for the scientific paper [*Growing urban bicycle networks*](https://www.nature.com/articles/s41598-022-10783-y) by [M. Szell](http://michael.szell.net/), S. Mimar, T. Perlman, [G. Ghoshal](http://gghoshal.pas.rochester.edu/), and [R. Sinatra](http://www.robertasinatra.com/). The code downloads and pre-processes data from OpenStreetMap, prepares points of interest, runs simulations, measures and saves the results, creates videos and plots.
**Paper**: [https://www.nature.com/articles/s41598-022-10783-y](https://www.nature.com/articles/s41598-022-10783-y)
**Data repository**: [zenodo.5083049](https://zenodo.org/record/5083049)
**Visualization**: [GrowBike.Net](https://growbike.net)
**Videos & Plots**: [https://growbike.net/download](https://growbike.net/download)[![Growing Urban Bicycle Networks](readmevideo.gif)](https://growbike.net/city/paris)
## Folder structure
The main folder/repo is `bikenwgrowth`, containing Jupyter notebooks (`code/`), preprocessed data (`data/`), parameters (`parameters/`), result plots (`plots/`), HPC server scripts and jobs (`scripts/`).Other data files (network plots, videos, results, exports, logs) make up many GBs and are stored in the separate external folder `bikenwgrowth_external` due to Github's space limitations.
## Setting up code environment
### Conda yml
[Download `.yml`](env.yml)### Manual procedure
```
conda create --override-channels -c conda-forge -n OSMNX python=3.8.2 osmnx=0.16.2 python-igraph watermark haversine rasterio tqdm geojson
conda activate OSMNX
conda install -c conda-forge ipywidgets
pip install opencv-python
conda install -c anaconda gdal
pip install --user ipykernel
python -m ipykernel install --user --name=OSMNX
```
Run Jupyter Notebook with kernel OSMNX (Kernel > Change Kernel > OSMNX)## Running the code on an HPC cluster with SLURM
For multiple, esp. large, cities, running the code on a high performance computing cluster is strongly suggested as the tasks are easy to paralellize. The shell scripts are written for [SLURM](https://slurm.schedmd.com/overview.html).1. Populate `parameters/cities.csv`, see below.
2. Run 01 and 02 once locally to download and prepare all networks and POIs (The alternative is server-side `sbatch scripts/download.job`, but OSMNX throws too many connection issues, so manual supervision is needed)
3. Upload `code/*.py`, `parameters/*`, `scripts/*`
4. Run: `./mastersbatch_analysis.sh`
5. Run, if needed: `./mastersbatch_export.sh`
6. After all is finished, run: `./cleanup.sh`
7. Recommended, run: `./fixresults.sh` (to clean up results in case of amended data from repeated runs)## Running the code locally
Single (or few/small) cities could be run locally but require manual, step-by-step execution of Jupyter notebooks:1. Populate `parameters/cities.csv`, see below.
2. Run 01 and 02 once to download and prepare all networks and POIs
3. Run 03,04,05 for each parameter set (see below), set in `parameters/parameters.py`
4. Run 06 or other steps as needed.### Parameter sets
1. `prune_measure = "betweenness"`, `poi_source = "railwaystation"`
2. `prune_measure = "betweenness"`, `poi_source = "grid"`
3. `prune_measure = "closeness"`, `poi_source = "railwaystation"`
4. `prune_measure = "closeness"`, `poi_source = "grid"`
5. `prune_measure = "random"`, `poi_source = "railwaystation"`
6. `prune_measure = "random"`, `poi_source = "grid"`## Populating cities.csv
### Checking nominatimstring
* Go to e.g. [https://nominatim.openstreetmap.org/search.php?q=paris%2C+france&polygon_geojson=1&viewbox=](https://nominatim.openstreetmap.org/search.php?q=paris%2C+france&polygon_geojson=1&viewbox=) and enter the search string. If a correct polygon (or multipolygon) pops up it should be fine. If not leave the field empty and acquire a shape file, see below.### Acquiring shape file
* Go to [Overpass](overpass-turbo.eu), to the city, and run:
`relation["boundary"="administrative"]["name:en"="Copenhagen Municipality"]({{bbox}});(._;>;);out skel;`
* Export: Download as GPX
* Use QGIS to create a polygon, with Vector > Join Multiple Lines, and Processing Toolbox > Polygonize (see [Stackexchange answer 1](https://gis.stackexchange.com/questions/98320/connecting-two-line-ends-in-qgis-without-resorting-to-other-software) and [Stackexchange answer 2](https://gis.stackexchange.com/questions/207463/convert-a-line-to-polygon))