pgrouting的一个python包装器,用于在真实地图上从节点路由到节点。
psycopgr的Python项目详细描述
____ _______ ___________ ____ ____ ______
/ __ \/ ___/ / / / ___/ __ \/ __ \/ __ `/ ___/
/ /_/ (__ ) /_/ / /__/ /_/ / /_/ / /_/ / /
/ .___/____/\__, /\___/\____/ .___/\__, /_/
/_/ /____/ /_/ /____/
psycopgr
是一个python包装器,它包含有一个目的:
为人类计算真实地图上的路线。
用
测试- 巨蟒3.6.5
- PostgreSQL 11.2
- Postgis 2.5.2
- pgrouting 2.6.2
- OSM2PGrouting 2.3.6
准备工作
- 安装
postgresql
,postgis
和pgrouting
- 创建数据库以存储地图数据
- 将OpenStreet地图数据导入数据库
安装
pip install psycopgr
或
pipenv install psycopgr
用python路由!
首先,
frompsycopgrimportPgrNode,PGRouting
使用数据库连接创建pgrouting实例:
pgr=PGRouting(database='mydb',user='user')
如果包含边缘表属性的表的元数据与默认值不同(只需要设置不同的属性),则调整它们,例如:
pgr.set_meta_data(cost='cost_s',reverse_cost='reverse_cost_s',directed=true)
这是默认元数据:
{'table':'ways','id':'gid','source':'source','target':'target','cost':'cost_s',# driving time in second'reverse_cost':'reverse_cost_s',# reverse driving time in second'x1':'x1','y1':'y1','x2':'x2','y2':'y2','geometry':'the_geom','has_reverse_cost':True,'directed':True,'srid':4326}
节点是地图上由pgrnode
namedtuple与地理坐标(经纬度)而不是表格中的模糊顶点id(vid)表示的点。pgrnodes
定义为:
PgrNode=namedtuple('PgrNode',['id','lon','lat'])
其中,id
可以是none
或自定义值,lon
和lat
是双精度值。
例如:
nodes=[PgrNode(None,116.30150,40.05500),PgrNode(None,116.36577,40.00253),PgrNode(None,116.30560,39.95458),PgrNode(None,116.46806,39.99857)]
现在我们可以走路线了!这很简单:
____ _______ ___________ ____ ____ ______
/ __ \/ ___/ / / / ___/ __ \/ __ \/ __ `/ ___/
/ /_/ (__ ) /_/ / /__/ /_/ / /_/ / /_/ / /
/ .___/____/\__, /\___/\____/ .___/\__, /_/
/_/ /____/ /_/ /____/
0
结束速度
:从节点到最近顶点的速度,单位为km/h。gpx_文件
:将其设置为输出到gpx文件的路径。
返回的是dict的dict:{(开始节点,结束节点):{'path':[pgrnode],'cost':cost}
默认情况下,cost
是以单位秒为单位沿路径移动的时间。这取决于边缘表中设置为cost
和reverse\u cost
的列的平均值。您可以通过设置元数据
函数分配关系。
我们还可以只获得成本而不返回详细路径:
____ _______ ___________ ____ ____ ______
/ __ \/ ___/ / / / ___/ __ \/ __ \/ __ `/ ___/
/ /_/ (__ ) /_/ / /__/ /_/ / /_/ / /_/ / /
/ .___/____/\__, /\___/\____/ .___/\__, /_/
/_/ /____/ /_/ /____/
1
返回的也是dict:{(开始节点,结束节点):cost}
pgrouting函数的低级包装器
<表><广告>这些是pgrouting函数的直接包装。例如,dijkstra
将顶点id作为输入。此列表将来可能会扩展。
教程
以下是a教程