GitHub | Documentation | Issue Tracker | PyPI
Simple routing over OSM data.
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
functions) and the k-d tree data structure (KDTree
class).
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.
pip install --upgrade 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.
- Generic A* algorithm implementation (
find_route
andfind_route_without_turn_around
functions) - Generic graph data structure (
SimpleGraph
class) - Generic k-d data structure (
KDTree
class) - Extensibility through usage of well-defined protocols (
protocols
module)- networkx compatibility (
nx.GraphAdaptor
andnx.ExternalGraphAdaptor
classes)
- networkx compatibility (
- OSM XML and OSM PBF
file parsing (
osm.reader.read_features
function) - Converting OpenStreetMap data into a usable graph (
osm.Graph
class)- High customizability of the process through the usage of different profiles.
- Expressing way preferences through the usage of penalties for unpreferred tags
- Respecting access restrictions on ways
- Support for turn restrictions,
including
restriction:TRANSPORT
andexempt
tags - Downloading data on-the-fly (
osm.LiveGraph
class)
pyroutelib3 is distributed under GNU GPL v3 (or any later version).
© Copyright 2024 Mikołaj Kuranowski
pyroutelib3 is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
pyroutelib3 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with pyroutelib3. If not, see http://www.gnu.org/licenses/.