Skip to content

ivanbelenky/us-routing

us-routing 是一个用于美国境内快速本地路由的 Python 库。 当近似值可以接受时,它非常有用。 它从 North American Roads dataset 启动。

安装

您可以使用 pip 安装 US Routing

pip install us-routing

或者使用 poetry:

git clone https://github.com/ivanbelenky/us-routing.git
cd us-routing
poetry install

用法

这是一个如何使用 US Routing 的简单示例:

from us_routing import get_route

# 在两个城市之间进行路线规划
r = get_route('New York', 'Los Angeles', edge_distance="DURATION")
print(r.total_distance, r.duration)
# 输出单位是公里:
# 4434.759999999997 1 day, 20:46:24.499959
# 打印路线步骤
print(r)
# Output: [
#POINT (-73.99811899964011 40.7508730002449) -> POINT (-74.0013209995546 40.74648499998924) (0.5700000000000001 km) 9TH AV, SP_TH_MA, 72 km/h
#POINT (-74.0013209995546 40.74648499998924) -> POINT (-74.0054249996425 40.74097199980971) (0.6799999999999999 km) 9TH AV, SP_TH_MA, 72 km/h
#POINT (-74.0054249996425 40.74097199980971) -> POINT (-74.00819599956175 40.74211600011984) (0.27 km) W 14TH ST, SP_TH_MA, 72 km/h
#POINT (-74.00819599956175 40.74211600011984) -> POINT (-74.0090509998795 40.74090099973697) (0.16 km) 10TH AV, SP_TH_MA, 72 km/h
# ...]
# 在邮政编码之间进行路线规划
r = get_route('10001', '60007')
print(r.total_distance, r.duration)
# 输出:
# 1315.910000000001 13:20:26.827392

# 在坐标之间进行路线规划,如果图中最近的节点离该位置太远,将引发 ValueError
try:
  r = get_route((40.7128, -74.0060), (34.0522, -118.2437), d_threshold=0.00001)
  print(r.total_distance, r.duration)
except ValueError as e:
  print(e)
# Node 2bd87209-d2fe-4f41-a89f-29104aeb5cf9 is too far from location point=<POINT (40.713 -74.006)> zip_code=None admin=None name=None
r = get_route((-74.0060, 40.7128), (-118.2437, 34.0522), d_threshold=10)
# 当然你可以混合使用
r = get_route((40.7128, -74.0060), "seattle", d_threshold=15)

特性

数据源

路线数据基于 North American Roads dataset。 该库包括下载和处理此数据的功能:

from us_routing import download_north_american_roads
download_north_american_roads()

开发

要设置开发环境:

  1. 克隆存储库
  2. 安装 Poetry:pip install poetry
  3. 安装依赖项:poetry install

自定义路由器

此软件包提供了一个 BaseRouter 类,您可以使用它来构建自己的自定义路由图。 它公开了一个非常简单的 API,用于从包含多个几何图形和这些几何图形的可选属性的 shapefile 创建路由器。 它看起来像这样:

geometries: Sequence[LineString | MultiLineString]
geometries_data: Optional[Sequence[Dict[str, Any]]] = None # should be serializable
# Optional arguments to define how attributes are compared and set to the edges of the graph
edge_attr_equal: Optional[Callable[[Any, Any], bool]] = ...
edge_attr_setter: Optional[Callable[[Any, Any], dict[str, Any]]] = ...
router = BaseRouter.from_geometries(geometries, geometries_data, edge_attr_equal, edge_attr_setter)
router.serialize("path_to_save")

贡献

欢迎贡献! 请随时提交 Pull Request。

关于

us cached road graph, freeways, primary and secondary roads

Topics

routing united-states routing-engine cached-graph

Resources

Readme

License

MIT license