.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "route_choice/_auto_examples/plot_route_choice_set.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_route_choice__auto_examples_plot_route_choice_set.py: .. _example_usage_route_choice_generation: Route Choice set generation =========================== In this example, we show how to generate route choice sets for estimation of route choice models, using a a city in La Serena Metropolitan Area in Chile. .. GENERATED FROM PYTHON SOURCE LINES 11-14 .. admonition:: References * :doc:`../../route_choice` .. GENERATED FROM PYTHON SOURCE LINES 16-20 .. seealso:: Several functions, methods, classes and modules are used in this example: * :func:`aequilibrae.paths.RouteChoice` .. GENERATED FROM PYTHON SOURCE LINES 22-31 .. code-block:: Python # Imports from uuid import uuid4 from tempfile import gettempdir from os.path import join import numpy as np from aequilibrae.utils.create_example import create_example .. GENERATED FROM PYTHON SOURCE LINES 33-39 .. code-block:: Python # We create the example project inside our temp folder fldr = join(gettempdir(), uuid4().hex) project = create_example(fldr, "coquimbo") .. GENERATED FROM PYTHON SOURCE LINES 40-43 Model parameters ---------------- Let's select a set of nodes of interest .. GENERATED FROM PYTHON SOURCE LINES 43-46 .. code-block:: Python od_pairs_of_interest = [(71645, 79385), (77011, 74089)] nodes_of_interest = (71645, 74089, 77011, 79385) .. GENERATED FROM PYTHON SOURCE LINES 47-48 Let's build all graphs .. GENERATED FROM PYTHON SOURCE LINES 48-52 .. code-block:: Python 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 53-54 We grab the graph for cars .. GENERATED FROM PYTHON SOURCE LINES 54-69 .. code-block:: Python graph = project.network.graphs["c"] # we also see what graphs are available project.network.graphs.keys() graph.set_graph("distance") # We set the nodes of interest as centroids to make sure they are not simplified away when we create the network graph.prepare_graph(np.array(nodes_of_interest)) # We allow flows through "centroid connectors" because our centroids are not really centroids. # If we have actual centroid connectors in the network (and more than one per centroid), then we # should remove them from the graph. graph.set_blocked_centroid_flows(False) .. GENERATED FROM PYTHON SOURCE LINES 70-73 Route Choice class ------------------ Here we'll construct and use the Route Choice class to generate our route sets .. GENERATED FROM PYTHON SOURCE LINES 73-75 .. code-block:: Python from aequilibrae.paths import RouteChoice .. GENERATED FROM PYTHON SOURCE LINES 76-78 This object construct might take a minute depending on the size of the graph due to the construction of the compressed link to network link mapping that's required. This is a one time operation per graph and is cached. .. GENERATED FROM PYTHON SOURCE LINES 78-80 .. code-block:: Python rc = RouteChoice(graph) .. GENERATED FROM PYTHON SOURCE LINES 81-85 It is highly recommended to set either ``max_routes`` or ``max_depth`` to prevent runaway results. We'll also set a 5% penalty (``penalty=1.05``), which is likely a little too large, but it creates routes that are distinct enough to make this simple example more interesting. .. GENERATED FROM PYTHON SOURCE LINES 85-91 .. code-block:: Python rc.set_choice_set_generation("bfsle", max_routes=5, penalty=1.05) rc.prepare(od_pairs_of_interest) rc.execute(perform_assignment=True) choice_set = rc.get_results().to_pandas() .. GENERATED FROM PYTHON SOURCE LINES 92-94 Plotting choice sets -------------------- .. GENERATED FROM PYTHON SOURCE LINES 96-97 Now we will plot the paths we just created for the second OD pair .. GENERATED FROM PYTHON SOURCE LINES 97-99 .. code-block:: Python import folium .. GENERATED FROM PYTHON SOURCE LINES 100-101 Let's create a separate for each route so we can visualize one at a time .. GENERATED FROM PYTHON SOURCE LINES 101-109 .. code-block:: Python rlyr1 = folium.FeatureGroup("route 1") rlyr2 = folium.FeatureGroup("route 2") rlyr3 = folium.FeatureGroup("route 3") rlyr4 = folium.FeatureGroup("route 4") rlyr5 = folium.FeatureGroup("route 5") od_lyr = folium.FeatureGroup("Origin and Destination") layers = [rlyr1, rlyr2, rlyr3, rlyr4, rlyr5] .. GENERATED FROM PYTHON SOURCE LINES 110-111 We get the data we will use for the plot: links, nodes and the route choice set .. GENERATED FROM PYTHON SOURCE LINES 111-143 .. code-block:: Python links = project.network.links.data nodes = project.network.nodes.data plot_routes = choice_set[(choice_set["origin id"] == 77011)]["route set"].values # Let's create the layers colors = ["red", "blue", "green", "purple", "orange"] for i, route in enumerate(plot_routes): rt = links[links.link_id.isin(route)] routes_layer = layers[i] for wkt in rt.geometry.to_wkt().values: points = wkt.replace("LINESTRING ", "").replace("(", "").replace(")", "").split(", ") points = "[[" + "],[".join([p.replace(" ", ", ") for p in points]) + "]]" # we need to take from x/y to lat/long points = [[x[1], x[0]] for x in eval(points)] _ = folium.vector_layers.PolyLine(points, color=colors[i], weight=4).add_to(routes_layer) # Creates the points for both origin and destination for i, row in nodes[nodes.node_id.isin((77011, 74089))].iterrows(): point = (row.geometry.y, row.geometry.x) _ = folium.vector_layers.CircleMarker( point, popup=f"link_id: {row.node_id}", color="red", radius=5, fill=True, fillColor="red", fillOpacity=1.0, ).add_to(od_lyr) .. GENERATED FROM PYTHON SOURCE LINES 144-146 It is worthwhile to notice that using distance as the cost function, the routes are not the fastest ones as the freeway does not get used .. GENERATED FROM PYTHON SOURCE LINES 148-149 Create the map and center it in the correct place .. GENERATED FROM PYTHON SOURCE LINES 149-158 .. code-block:: Python long, lat = project.conn.execute("select avg(xmin), avg(ymin) from idx_links_geometry").fetchone() map_osm = folium.Map(location=[lat, long], tiles="Cartodb Positron", zoom_start=12) for routes_layer in layers: routes_layer.add_to(map_osm) od_lyr.add_to(map_osm) folium.LayerControl().add_to(map_osm) map_osm .. raw:: html
Make this Notebook Trusted to load map: File -> Trust Notebook


.. GENERATED FROM PYTHON SOURCE LINES 159-160 .. code-block:: Python project.close() .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 3.249 seconds) .. _sphx_glr_download_route_choice__auto_examples_plot_route_choice_set.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_route_choice_set.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_route_choice_set.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: plot_route_choice_set.zip ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_