Skip to main content
Ctrl+K

AequilibraE 1.0.1

  • Getting started
  • Examples
  • Modeling with AequilibraE
  • API Reference
  • Validation & Benchmarking
    • Developing
    • History
  • GitHub
  • Getting started
  • Examples
  • Modeling with AequilibraE
  • API Reference
  • Validation & Benchmarking
    • Developing
    • History
  • GitHub

Section Navigation

  • Creating Models
    • Project from OpenStreetMap
    • Import GTFS
    • Creating a zone system based on Hex Bins
    • Importing network from GMNS
    • Project from a link layer
  • Editing networks
    • Editing network geometry: Nodes
    • Editing network geometry: Links
    • Editing network geometry: Splitting link
  • Trip Distribution
    • Running IPF without an AequilibraE model
    • Network skimming
    • Path computation
    • Trip Distribution
  • Visualization
    • Creating Delaunay Lines
    • Exploring the network on a notebook
  • AequilibraE without a Model
    • Traffic Assignment without an AequilibraE Model
  • Full Workflows
    • Public transport assignment with Optimal Strategies
    • Forecasting
  • Other Applications
    • Logging to terminal
    • Checking AequilibraE’s log
    • Exporting network to GMNS
    • Finding disconnected links
  • Examples
  • Editing networks
  • Editing...

Note

Go to the end to download the full example code

Editing network geometry: Splitting link#

In this example, we split a link right in the middle, while keeping all fields in the database equal. Distance is proportionally computed automatically in the database.

Imports

from uuid import uuid4
from tempfile import gettempdir
from os.path import join
from aequilibrae.utils.create_example import create_example
from shapely.ops import substring
import matplotlib.pyplot as plt

# We create the example project inside our temp folder
fldr = join(gettempdir(), uuid4().hex)

project = create_example(fldr)

We will split link 37 right in the middle Let’s get the link and check its length

links = project.network.links
all_nodes = project.network.nodes

link = links.get(37)
print(link.distance)
6010.108655014215

The idea is basically to copy a link and allocate the appropriate geometries to split the geometry we use Shapely’s substring

new_link = links.copy_link(37)

first_geometry = substring(link.geometry, 0, 0.5, normalized=True)
second_geometry = substring(link.geometry, 0.5, 1, normalized=True)

link.geometry = first_geometry
new_link.geometry = second_geometry
links.save()

The link objects in memory still don’t have their ID fields updated, so we refresh them

links.refresh()
link = links.get(37)
new_link = links.get(new_link.link_id)
print(link.distance, new_link.distance)
3005.040184141035 3005.0684894898027

We can plot the two links only

plt.clf()
plt.plot(*link.geometry.xy, color="blue")
plt.plot(*new_link.geometry.xy, color="blue")

for node in [link.a_node, link.b_node, new_link.b_node]:
    geo = all_nodes.get(node).geometry
    plt.plot(*geo.xy, "o", color="black")
plt.show()
plot splitting link

Or we plot the entire network

plt.clf()
curr = project.conn.cursor()
curr.execute("Select link_id from links;")

for lid in curr.fetchall():
    geo = links.get(lid[0]).geometry
    plt.plot(*geo.xy, color="blue")

all_nodes = project.network.nodes
curr = project.conn.cursor()
curr.execute("Select node_id from nodes;")

for nid in curr.fetchall():
    geo = all_nodes.get(nid[0]).geometry
    plt.plot(*geo.xy, "o", color="black")

plt.show()
plot splitting link
project.close()

Total running time of the script: (0 minutes 0.724 seconds)

Download Jupyter notebook: plot_splitting_link.ipynb

Download Python source code: plot_splitting_link.py

Gallery generated by Sphinx-Gallery

previous

Editing network geometry: Links

next

Trip Distribution

Show Source

© Copyright 2024-02-25, AequilibraE developers.

Created using Sphinx 7.2.6.

Built with the PyData Sphinx Theme 0.15.2.