Show HN: US Routing - 用于美国境内快速本地路由的 Python 库
`us-routing` 是一个基于 Python 的库,用于在美国境内进行快速本地路由。它基于 North American Roads 数据集,可以规划城市、邮政编码或坐标之间的路线。该库支持多种路线规划选项,并提供详细的路线信息。用户可以通过 `pip` 或 `poetry` 安装,并提供了简单的用法示例。此外,文章还介绍了自定义路由器和贡献方式。
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()
开发
要设置开发环境:
- 克隆存储库
- 安装 Poetry:
pip install poetry
- 安装依赖项:
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