.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "_auto_examples/trip_distribution/plot_path_and_skimming.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code .. rst-class:: sphx-glr-example-title .. _sphx_glr__auto_examples_trip_distribution_plot_path_and_skimming.py: .. _example_usage_paths: Path and skimming ================= In this example, we show how to perform path computation and network skimming for the Sioux Falls example model. .. GENERATED FROM PYTHON SOURCE LINES 10-22 .. code-block:: default # Imports from uuid import uuid4 from tempfile import gettempdir from os.path import join from aequilibrae.utils.create_example import create_example # We create the example project inside our temp folder fldr = join(gettempdir(), uuid4().hex) project = create_example(fldr) .. GENERATED FROM PYTHON SOURCE LINES 23-33 .. code-block:: default import logging import sys # We the project opens, we can tell the logger to direct all messages to the terminal as well logger = project.logger stdout_handler = logging.StreamHandler(sys.stdout) formatter = logging.Formatter("%(asctime)s;%(levelname)s ; %(message)s") stdout_handler.setFormatter(formatter) logger.addHandler(stdout_handler) .. GENERATED FROM PYTHON SOURCE LINES 34-36 Path Computation ---------------- .. GENERATED FROM PYTHON SOURCE LINES 38-40 .. code-block:: default from aequilibrae.paths import PathResults .. GENERATED FROM PYTHON SOURCE LINES 41-42 We build all graphs .. GENERATED FROM PYTHON SOURCE LINES 42-46 .. code-block:: default project.network.build_graphs() # We get warnings that several fields in the project are filled with NaNs. # This is true, but we won't use those fields. .. GENERATED FROM PYTHON SOURCE LINES 47-48 We grab the graph for cars .. GENERATED FROM PYTHON SOURCE LINES 48-64 .. code-block:: default graph = project.network.graphs["c"] # we also see what graphs are available # project.network.graphs.keys() # let's say we want to minimize the distance graph.set_graph("distance") # And will skim time and distance while we are at it graph.set_skimming(["free_flow_time", "distance"]) # And we will allow paths to be computed going through other centroids/centroid connectors # required for the Sioux Falls network, as all nodes are centroids # BE CAREFUL WITH THIS SETTING graph.set_blocked_centroid_flows(False) .. GENERATED FROM PYTHON SOURCE LINES 65-66 Let's instantiate a path results object and prepare it to work with the graph .. GENERATED FROM PYTHON SOURCE LINES 66-72 .. code-block:: default res = PathResults() res.prepare(graph) # compute a path from node 8 to 13 res.compute_path(8, 4) .. GENERATED FROM PYTHON SOURCE LINES 73-77 .. code-block:: default # We can get the sequence of nodes we traverse res.path_nodes .. GENERATED FROM PYTHON SOURCE LINES 78-82 .. code-block:: default # We can get the link sequence we traverse res.path .. GENERATED FROM PYTHON SOURCE LINES 83-87 .. code-block:: default # We can get the mileposts for our sequence of nodes res.milepost .. GENERATED FROM PYTHON SOURCE LINES 88-93 .. code-block:: default # If we want to compute the path for a different destination and the same origin, we can just do this # It is way faster when you have large networks res.update_trace(13) .. GENERATED FROM PYTHON SOURCE LINES 94-97 .. code-block:: default res.path_nodes .. GENERATED FROM PYTHON SOURCE LINES 98-100 If you want to show the path in Python We do NOT recommend this, though.... It is very slow for real networks .. GENERATED FROM PYTHON SOURCE LINES 100-103 .. code-block:: default import matplotlib.pyplot as plt from shapely.ops import linemerge .. GENERATED FROM PYTHON SOURCE LINES 104-118 .. code-block:: default links = project.network.links # We plot the entire network 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="red") path_geometry = linemerge(links.get(lid).geometry for lid in res.path) plt.plot(*path_geometry.xy, color="blue", linestyle="dashed", linewidth=2) plt.show() .. GENERATED FROM PYTHON SOURCE LINES 119-121 Now to skimming --------------- .. GENERATED FROM PYTHON SOURCE LINES 123-125 .. code-block:: default from aequilibrae.paths import NetworkSkimming .. GENERATED FROM PYTHON SOURCE LINES 126-127 But let's say we only want a skim matrix for nodes 1, 3, 6 & 8 .. GENERATED FROM PYTHON SOURCE LINES 127-130 .. code-block:: default import numpy as np graph.prepare_graph(np.array([1, 3, 6, 8])) .. GENERATED FROM PYTHON SOURCE LINES 131-136 .. code-block:: default # And run the skimming skm = NetworkSkimming(graph) skm.execute() .. GENERATED FROM PYTHON SOURCE LINES 137-138 The result is an AequilibraEMatrix object .. GENERATED FROM PYTHON SOURCE LINES 138-143 .. code-block:: default skims = skm.results.skims # Which we can manipulate directly from its temp file, if we wish skims.matrices .. GENERATED FROM PYTHON SOURCE LINES 144-148 .. code-block:: default # Or access each matrix skims.free_flow_time .. GENERATED FROM PYTHON SOURCE LINES 149-159 .. code-block:: default # We can save it to the project if we want skm.save_to_project("base_skims") # We can also retrieve this skim record to write something to its description matrices = project.matrices mat_record = matrices.get_record("base_skims") mat_record.description = "minimized FF travel time while also skimming distance for just a few nodes" mat_record.save() .. GENERATED FROM PYTHON SOURCE LINES 160-161 .. code-block:: default project.close() .. rst-class:: sphx-glr-timing **Total running time of the script:** ( 0 minutes 0.000 seconds) .. _sphx_glr_download__auto_examples_trip_distribution_plot_path_and_skimming.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_path_and_skimming.py ` .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_path_and_skimming.ipynb ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_