.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "_auto_examples/plot_splitting_link.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note Click :ref:`here ` to download the full example code .. rst-class:: sphx-glr-example-title .. _sphx_glr__auto_examples_plot_splitting_link.py: 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 .. GENERATED FROM PYTHON SOURCE LINES 8-22 .. code-block:: python ## 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) .. GENERATED FROM PYTHON SOURCE LINES 23-25 We will split link 37 right in the middle Let's get the link and check its length .. GENERATED FROM PYTHON SOURCE LINES 25-31 .. code-block:: python links = project.network.links all_nodes = project.network.nodes link = links.get(37) print(link.distance) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none 6010.108655014215 .. GENERATED FROM PYTHON SOURCE LINES 32-34 The idea is basically to copy a link and allocate the appropriate geometries to split the geometry we use Shapely's substring .. GENERATED FROM PYTHON SOURCE LINES 34-44 .. code-block:: python 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() .. GENERATED FROM PYTHON SOURCE LINES 45-46 The link objects in memory still don't have their ID fields updated, so we refresh them .. GENERATED FROM PYTHON SOURCE LINES 46-51 .. code-block:: python links.refresh() link = links.get(37) new_link = links.get(new_link.link_id) print(link.distance, new_link.distance) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none 3005.0401836164983 3005.0684889630975 .. GENERATED FROM PYTHON SOURCE LINES 52-53 We can plot the two links only .. GENERATED FROM PYTHON SOURCE LINES 53-62 .. code-block:: python 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, 'ro', color='black') plt.show() .. image-sg:: /_auto_examples/images/sphx_glr_plot_splitting_link_001.png :alt: plot splitting link :srcset: /_auto_examples/images/sphx_glr_plot_splitting_link_001.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out Out: .. code-block:: none /home/runner/work/aequilibrae/aequilibrae/docs/source/examples/plot_splitting_link.py:59: UserWarning: color is redundantly defined by the 'color' keyword argument and the fmt string "ro" (-> color='r'). The keyword argument will take precedence. plt.plot(*geo.xy, 'ro', color='black') .. GENERATED FROM PYTHON SOURCE LINES 63-64 Or we plot the entire network .. GENERATED FROM PYTHON SOURCE LINES 64-82 .. code-block:: python 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, 'ro', color='black') plt.show() .. image-sg:: /_auto_examples/images/sphx_glr_plot_splitting_link_002.png :alt: plot splitting link :srcset: /_auto_examples/images/sphx_glr_plot_splitting_link_002.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out Out: .. code-block:: none /home/runner/work/aequilibrae/aequilibrae/docs/source/examples/plot_splitting_link.py:78: UserWarning: color is redundantly defined by the 'color' keyword argument and the fmt string "ro" (-> color='r'). The keyword argument will take precedence. plt.plot(*geo.xy, 'ro', color='black') .. GENERATED FROM PYTHON SOURCE LINES 83-85 .. code-block:: python project.close() .. rst-class:: sphx-glr-timing **Total running time of the script:** ( 0 minutes 0.851 seconds) .. _sphx_glr_download__auto_examples_plot_splitting_link.py: .. only :: html .. container:: sphx-glr-footer :class: sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_splitting_link.py ` .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_splitting_link.ipynb ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_