Guarda una ruta y conserva su curvatura con Python OSMnx

1 minuto de lectura

Con OSMnx, me gustaría poder guardar una ruta con su curvatura como muestra la imagen a continuación.

import osmnx as ox
import networkx as nx

# Download the road network
G = ox.graph_from_place('Monterey, California', network_type="drive")

# Starting and ending point of a trip
start = [36.580665,-121.8297467]
end = [36.594319,-121.8727587]

# Retrieve nearest node
orig_node = ox.get_nearest_node(G, start)
dest_node = ox.get_nearest_node(G, end)

# Compute the path of the trip
route = nx.shortest_path(G, orig_node, dest_node, weight="length")

# Plot the trip
fig, ax = ox.plot_graph_route(G_projected,
                              route,edge_linewidth=1,
                              node_size=20,
                              fig_height=20,route_linewidth=10)

ingrese la descripción de la imagen aquí

Obviamente, puedo guardar la lista de rutas de Python, pero perderé la curvatura de la ruta ya que la lista de rutas contiene menos nodos. ¿Es posible guardar la ruta roja mostrada en formato de polilínea de Google o algo así para conservar su forma curva?

Puede convertir las geometrías de los bordes de la ruta en una MultiLineString:

from shapely.geometry import MultiLineString
route_pairwise = zip(route[:-1], route[1:])
edges = ox.graph_to_gdfs(G, nodes=False).set_index(['u', 'v']).sort_index()
lines = [edges.loc[uv, 'geometry'].iloc[0] for uv in route_pairwise]
MultiLineString(lines)

Ahora puede acceder a MultiLineString’s .wkt atributo y guardar eso Texto conocido cadena a disco.

  • Muchas gracias señor, exactamente lo que necesitaba

    – hans glick

    12 de febrero de 2019 a las 21:19

  • Eliminar .iloc[0]de lo contrario, “el objeto ‘LineString’ no tiene el atributo ‘iloc'”

    – Martín

    19 de marzo de 2020 a las 0:23

¿Ha sido útil esta solución?