Skip to main content

GitHub Actions Workflow Status GitHub license codecov PyPI pyversions PyPi Version

Taxicab

When routing between two points of longitude and latitude, the built in routing functionality in OSMnx will find the nearest network nodes and route between those. This assumption is fine, and works for many applications but when you need routing with a little more accuracy you'll want to consider using Taxicab. Below are a few examples which highlight Taxicab usecases:

When the nearest nodes are not that close:

When routing along a single edge:

When routing along short routes:

When the nearest edges are the same:

Installation

The easiest way to use Taxicab is probably via a PyPi install:

pip install taxicab

You can also install directly from this repo:

pip install git+https://github.com/nathanrooy/taxicab

Example usage

Taxicab is designed to be used as a drop in replacement for the standard routing functionality found on OSMnx. So, like usual, download a portion of the OpenStreetMap graph:

from osmnx import graph_from_bbox
xmin, xmax = -84.323, -84.305
ymin, ymax =  39.084,  39.092
G = graph_from_bbox([xmin, ymin, xmax, ymax], network_type='drive', simplify=True)

Now, specify your origin and destination:

orig = (39.0871, -84.3105)
dest = (39.0880, -84.3200) 

Compute the route via the following:

import taxicab as tc
route = tc.distance.shortest_path(G, orig, dest)

Which can then be plotted:

tc.plot.plot_graph_route(G, route)

The returned route is a named tuple is comprised of four elements:

  • Route length in meters (or what ever your graph units are).
>>> route[0]
669.0529395595279

>>> route.length
669.0529395595279
  • List of node IDs representing the bulk of the route (this is identical to OSMnx).
>>> route[1]
[197546973, 2090608743, 197656382, 197633479]

>>> route.nodes
[197546973, 2090608743, 197656382, 197633479]
  • And two partial edges represented by shapely.geometry.linestring.LineString objects. If populated, these represent the first and last segments of the route that extend from the first or last node to some point along that edge.
>>> route[2], route[3]
(<shapely.geometry.linestring.LineString at 0x7f1aa08067c0>,
 <shapely.geometry.linestring.LineString at 0x7f1a3ccbd580>)

>>> route.orig_edge, route.dest_edge
(<shapely.geometry.linestring.LineString at 0x7f1aa08067c0>,
 <shapely.geometry.linestring.LineString at 0x7f1a3ccbd580>)

User reference

taxicab.distance.shortest_route(G, orig, dest)

Parameters:

  • G : (networkx.MultiDiGraph) - input graph
  • orig : (tuple) - a (lat, lng) or (y, x) point
  • dest : (tuple) - a (lat, lng) or (y, x) point

Returns: (tuple)

  • route[0] or route.length : float - distance in meters of computed route.
  • route[1] or route.ndoes : path - list of node IDs constituting the shortest path (this is identical to routes found in OSMnx).
  • route[2] or route.orig_edge : shapely.geometry.linestring.LineString - a partial edge representing the first non-complete edge in the route.
  • route[3] or route.dest_edge : shapely.geometry.linestring.LineString - a partial edge representing the last non-complete edge in the route.
  • Note that if a route is successfully computed the distance will always be returned. However, depending on the length of the route and the underlying network, elements 1, 2, or 3 may be null.
taxicab.plot.plot_graph_route()

Used exactly the same way as osmnx.plot.plot_graph_route except that it uses the route (named tuple) produced by Taxicab instead. See OSMnx function reference [here]

Metadata

Release files for Taxicab 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for Taxicab 0.1.1
File Size Uploaded
taxicab-0.1.1.tar.gz 7.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for Taxicab 0.1.1
File Interpreter ABI Platform
taxicab-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 14.7 kB

Release files / taxicab-0.1.1.tar.gz

Download URL taxicab-0.1.1.tar.gz
Size 7.0 kB
Tags Source
SHA-256 checksum
How to use checksums
9ec99d05f0e8603e68c7ef8721e0d415e5408e45b129de9b4f4cc36e35c36589
BLAKE2b-256 checksum
How to use checksums
bc79cada0b031d298e4fcc7994fbedd8fb7253876f9649a33e67dd22555e42ac
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

Release files / taxicab-0.1.1-py3-none-any.whl

Download URL taxicab-0.1.1-py3-none-any.whl
Size 7.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3018fa395a75dd7544584b2ea0b4fa14566d45cb425ba2d15b24b7e4d81ca385
BLAKE2b-256 checksum
How to use checksums
cf9209e22e94c8f2f304170d09d38590b42fd96337a3055163f5c4e0884afa56
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page