Skip to main content
Ctrl+K

AequilibraE 1.1.3

Site Navigation

  • Examples
  • Modeling with AequilibraE
  • API Reference

Site Navigation

  • Examples
  • Modeling with AequilibraE
  • API Reference

Section Navigation

  • Creating Models
    • Create project from OpenStreetMap
    • Create a zone system based on Hex Bins
    • Import GTFS
    • Create project from a link layer
    • Create project from GMNS
  • Editing networks
    • Editing network geometry: Nodes
    • Editing network geometry: Links
    • Editing network geometry: Splitting link
  • Skimming
    • Network skimming
    • Path computation
  • Assignment Workflows
    • Public transport assignment with Optimal Strategies
    • Route Choice set generation
    • Route Choice
    • Forecasting
    • Route Choice with sub-area analysis
  • AequilibraE without a Model
    • Running IPF without an AequilibraE model
    • Traffic Assignment without an AequilibraE Model
  • Visualization
    • Creating Delaunay Lines
    • Exploring the network on a notebook
  • Other Applications
    • Logging to terminal
    • Checking AequilibraE’s log
    • Exporting network to GMNS
    • Finding disconnected links
  • Examples
  • Editing networks
  • Editing network geometry: Splitting link

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.

References

  • Link layer changes and expected behavior

See also

Several functions, methods, classes and modules are used in this example:

  • aequilibrae.project.network.Links()

# 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.691 seconds)

Download Jupyter notebook: plot_splitting_link.ipynb

Download Python source code: plot_splitting_link.py

Download zipped: plot_splitting_link.zip

Gallery generated by Sphinx-Gallery

previous

Editing network geometry: Links

next

Skimming

Show Source

© Copyright 2024-11-08, AequilibraE developers.

Created using Sphinx 8.1.3.

Built with the PyData Sphinx Theme 0.13.3.