{ "cells": [ { "attachments": {}, "cell_type": "markdown", "id": "e0bf8629", "metadata": {}, "source": [ "# RA2CE basics: set up RA2CE and configure a road network from a pre-defined shapefile" ] }, { "attachments": {}, "cell_type": "markdown", "id": "43bce1c4", "metadata": {}, "source": [ "This notebook contains examples for the RA2CE tool. This requires the right folder setup, and the correct settings in the configuration files (network.ini and analyses.ini).\n", "\n", "In this notebook, we will guide you through the basics of RA2CE: configuring a road network based in a pre-defined shapefile \n", "\n", "First of all, we will import the packages we need to execute this notebook:" ] }, { "cell_type": "code", "execution_count": null, "id": "e67d001f", "metadata": {}, "outputs": [], "source": [ "import geopandas as gpd\n", "import matplotlib.pyplot as plt\n", "from pathlib import Path\n", "from ra2ce.ra2ce_handler import Ra2ceHandler # import the ra2cehandler to run ra2ce analyses" ] }, { "attachments": {}, "cell_type": "markdown", "id": "6611234c", "metadata": {}, "source": [ "## Folder structure\n", "\n", "Before starting the examples, it is vital that you familiarize yourself with the RA2CE folder structure. RA2CE requires this folder structure to succesfully perform analyses. You can find the folder structure in the **documentation**.\n", "\n", "\n", "A project folder must contain the subfolders 'output' and 'static'. An 'input' folder is optional for additional data sets but we will not use that in our example. It must also contain the network.ini and/or analyses.ini files. Within the subfolder 'static', RA2CE expects three subfolders: hazard, network, and output_graph. See below an example folder structure of “Project A”. This folder structure must be created by the user before running RA2CE." ] }, { "attachments": { "image.png": { "image/png": "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" } }, "cell_type": "markdown", "id": "1c9ba230", "metadata": {}, "source": [ "![image.png](attachment:image.png)" ] }, { "attachments": {}, "cell_type": "markdown", "id": "96633b35", "metadata": {}, "source": [ "## Configuring RA2CE to create a road network from SHP" ] }, { "attachments": {}, "cell_type": "markdown", "id": "4ad8c1d9", "metadata": {}, "source": [ "You can input an existing shapefile into RA2CE to create a network from it. Make sure the shapefile is in the WGS84 EPSG:4326 projection. Also ensure that the shapefile is 'clean' and connected." ] }, { "attachments": {}, "cell_type": "markdown", "id": "0afbb6d2", "metadata": {}, "source": [ "### Filling the network.ini file\n", "Now, we will fill the *network.ini* file with our configurations.\n", "\n", "Under [project], we simply specify the *project name*. \n", "\n", "We then move on to the [network] section, where we will first mention the most important settings for this example. First, we specify the **source** of the procedure. In this case, you want to specify ***source = shapefile**. Specify the shapefile's name in the **primary_file** parameter. Make sure you saved the shapefile in your static/network folder. \n", "\n", "Some other important settings in the [network] section are:\n", "- **directed**: Used together with OSM download - False if you want to have an undirected graph and True if you want to have a directed graph.\n", "- **primary_file**: Used to specify the shapefile name of the (road) network to do the analysis with, when creating a network from a shapefile.\n", "- **diversion_file**: Used to specify a shapefile name of the (road) network to only use for diversion (i.e., no analysis), when creating a network from a shapefile.\n", "- **file_id**: The field name in the shapefile/OSM data that holds the unique ID of the data. When this ID attribute is not unique, RA2CE will create a new attribute in the data with the name 'rfid_c' (RA2CE feature ID complex) that contains the unique ID. For more information, the documentation on this is coming soon...\n", "- **network_type**: The type of network to download from OSM, in the case of road networks, this must be set to *'drive'*.\n", "- **save_gpkg**: True if you want to save the shapefile of the resulting road network in the *output_graph* folder.\n", "\n", "The other settings [origins_destinations], [hazard], and [cleanup], are not relevant for this example and will be introduced in other examples. However, the parameters need to be in the network.ini file in order for RA2CE to run." ] }, { "attachments": {}, "cell_type": "markdown", "id": "1cdfa8aa", "metadata": {}, "source": [ "> [project]
\n", "name = *insert your project name*
\n", "
\n", "[network]
\n", "directed = False
\n", "**source = shapefile
**\n", "**primary_file = base_shapefile.shp**
\n", "diversion_file = None
\n", "**file_id = rfid_c**
\n", "link_type_column = highway
\n", "polygon = None
\n", "network_type = drive
\n", "road_types = None
\n", "**save_gpkg = True**
\n", "
\n", "*[origins_destinations]
\n", "origins = None
\n", "destinations = None
\n", "origins_names = None
\n", "destinations_names = None
\n", "id_name_origin_destination = None
\n", "origin_count = None
\n", "origin_out_fraction = None
\n", "
\n", "[hazard]
\n", "hazard_map = None
\n", "hazard_id = None
\n", "hazard_field_name = None
\n", "aggregate_wl = None
\n", "hazard_crs = None
\n", "
\n", "[cleanup]
\n", "snapping_threshold = None
\n", "segmentation_length = None
\n", "merge_lines = True
\n", "merge_on_id = False
\n", "cut_at_intersections = False
*" ] }, { "attachments": {}, "cell_type": "markdown", "id": "70715c43", "metadata": {}, "source": [ "Now, we tell the program where to find our project folder (by specifying the path to the project folder). Now that we introduced a polygon of a region and provided the right network.ini settings, RA2CE can download from OSM. \n", "\n", "For this action we only need the network.ini file, no analysis.ini file is needed." ] }, { "cell_type": "code", "execution_count": null, "id": "4486021e", "metadata": {}, "outputs": [], "source": [ "# specify the name of the path to the project folder where you created the RA2CE folder setup\n", "root_dir = Path(\"data\", \"base_network_gpkg\")\n", "assert root_dir.exists()" ] }, { "cell_type": "code", "execution_count": null, "id": "7ba7f700", "metadata": {}, "outputs": [], "source": [ "_network_ini_name = \"network.ini\" # set the name for the network.ini settings file\n", "network_ini = root_dir / _network_ini_name #let RA2CE find the network.ini\n", "assert network_ini.is_file() # check whether the network.ini file exists" ] }, { "attachments": {}, "cell_type": "markdown", "id": "73d6f950", "metadata": {}, "source": [ "## Creating the network with RA2CE\n", "Initiate the RA2CE model through the Ra2ceHandler and configure (create) the network. Because we do not input the analysis.ini for now, we set that to *None*.\n", "\n", "*Beware, it may take a while!*" ] }, { "cell_type": "code", "execution_count": null, "id": "0b11b371", "metadata": { "scrolled": true }, "outputs": [], "source": [ "handler = Ra2ceHandler(network=network_ini, analysis=None)\n", "handler.configure()" ] }, { "attachments": {}, "cell_type": "markdown", "id": "9d7c18d6", "metadata": {}, "source": [ "## Inspecting the resulting network\n", "Now, let's inspect the created network. Note: the road network is always saved in the static/output_graph folder.
\n", "\n", "First, we load the right geopackage. There are many geopackages created in the static / output_graph folder if you specify save_gpkg = True in the network.ini. These all represent some properties of the network. Let's inspect some of these.\n", "\n", "*Notice the different files in the output_graph folder. You can inspect them all and see what their differences are.* " ] }, { "cell_type": "code", "execution_count": null, "id": "68fdce82", "metadata": {}, "outputs": [], "source": [ "# Set the path to your output_graph folder to find the network/graph creation:\n", "path_output_graph = root_dir / \"static\" / \"output_graph\"" ] }, { "cell_type": "code", "execution_count": null, "id": "546e31e6", "metadata": {}, "outputs": [], "source": [ "# Now we find and inspect the file 'base_graph_edges.gpkg' which holds the 'edges' of the network. \n", "# An edge (or link) of a network (or graph) represents a connection between two nodes (or vertices) of the network. More information on: https://mathinsight.org/definition/network_edge#:~:text=An%20edge%20(or%20link)%20of,in%20the%20first%20figure%20below.\n", "base_graph_edges = path_output_graph / \"base_network.gpkg\"\n", "edges_gdf = gpd.read_file(base_graph_edges, driver = \"GPKG\")\n", "edges_gdf.head()" ] }, { "cell_type": "code", "execution_count": null, "id": "330f638d", "metadata": {}, "outputs": [], "source": [ "edges_gdf.explore(tiles=\"CartoDB positron\", popup = True)" ] }, { "attachments": {}, "cell_type": "markdown", "id": "60a4fd9f", "metadata": {}, "source": [ "*If you want to get a bit more advanced, use the 'Disconnected Islands' plugin in QGIS to check whether the road network is completely connected. If there are disconnected islands in the road network, this can impact more advanced RA2CE analyses (such as Origin-Destination analyses which are introduced in another example)*." ] }, { "attachments": {}, "cell_type": "markdown", "id": "09a5874d", "metadata": {}, "source": [ "Now we find and inspect the file 'base_graph_nodes.gpkg' which holds the 'nodes' of the network. A node is represents the beginning and end point of an edge and can connect to one or multiple edges. Together, the nodes and edges make up the graph/network." ] }, { "cell_type": "code", "execution_count": null, "id": "92d10450", "metadata": {}, "outputs": [], "source": [ "base_graph_nodes = path_output_graph / \"base_graph_nodes.gpkg\" #specify where to find the nodes file\n", "nodes_gdf = gpd.read_file(base_graph_nodes, driver = \"GPKG\") #read in the nodes file\n", "\n", "#Plotting nodes and edges together\n", "fig, ax = plt.subplots(figsize=(15, 15)) # Set the figsize as desired\n", "\n", "# Set the edges as the base plot\n", "baseplot = edges_gdf.plot(ax=ax, color='grey')\n", "nodes_gdf.plot(ax=baseplot, color='blue', markersize=20)\n", "plt.show()\n" ] } ], "metadata": { "kernelspec": { "display_name": "ra2ce_env", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.13" } }, "nbformat": 4, "nbformat_minor": 5 }