pyroutelib3

GitHub | Documentation | Issue Tracker | PyPI

pyroutelib3 is a Python library for simple routing over OpenStreetMap data.

import pyroutelib3

live_graph = pyroutelib3.osm.LiveGraph(pyroutelib3.osm.CarProfile())

start_node = live_graph.find_nearest_node((52.23201, 21.00737))
end_node = live_graph.find_nearest_node((52.24158, 21.02807))

route = pyroutelib3.find_route_without_turn_around(live_graph, start_node.id, end_node.id)
route_lat_lons = [live_graph.get_node(node).position for node in route]

The example above uses osm.LiveGraph, which automatically downloads OpenStreetMap data in tiles and caches them on your disk. It is much more wise to download the data beforehand from a service like Geofabrik OSM data extracts:

import pyroutelib3

with open("mazowieckie-latest.osm.pbf", "rb") as f:
    graph = pyroutelib3.osm.Graph.from_file(pyroutelib3.osm.CarProfile(), f)

start_node = graph.find_nearest_node((52.23201, 21.00737))
end_node = graph.find_nearest_node((52.24158, 21.02807))

route = pyroutelib3.find_route_without_turn_around(graph, start_node, end_node)
route_lat_lons = [graph.get_node(node).position for node in route]

pyroutelib3 not only is able to parse OpenStreetMap data into a graph (see the osm module), but also contains generic implementations of the A* path-finding algorithm (find_route() and find_route_without_turn_around()) and the k-d tree data structure (KDTree).

This library was designed with extensibility in mind, and most components can be swapped for completely custom ones through the usage of well-defined protocols. As an example, a nx.GraphAdaptor is provided to use networkx graphs with pyroutelib3’s functionality.

Installation

pip install pyroutelib3

pyroutelib3 uses semantic versioning. Always specify dependencies on this library with a constraint on the major revision, e.g. pyroutelib3 ~= 2.0.0.

Note that version 1 of this library is incompatible with version 2.

Features