pgrouting的一个python包装器,用于在真实地图上从节点路由到节点。

psycopgr的Python项目详细描述


    ____  _______  ___________  ____  ____ ______
   / __ \/ ___/ / / / ___/ __ \/ __ \/ __ `/ ___/
  / /_/ (__  ) /_/ / /__/ /_/ / /_/ / /_/ / /
 / .___/____/\__, /\___/\____/ .___/\__, /_/
/_/         /____/          /_/    /____/

pypipypi-licensepypi-python version

psycopgr是一个python包装器,它包含有一个目的:

为人类计算真实地图上的路线。

测试
  • 巨蟒3.6.5
  • PostgreSQL 11.2
  • Postgis 2.5.2
  • pgrouting 2.6.2
  • OSM2PGrouting 2.3.6

准备工作

  • 安装postgresqlpostgispgrouting
  • 创建数据库以存储地图数据
  • 将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}

节点是地图上由pgrnodenamedtuple与地理坐标(经纬度)而不是表格中的模糊顶点id(vid)表示的点。pgrnodes定义为:

PgrNode=namedtuple('PgrNode',['id','lon','lat'])

其中,id可以是none或自定义值,lonlat是双精度值。

例如:

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是以单位秒为单位沿路径移动的时间。这取决于边缘表中设置为costreverse\u cost的列的平均值。您可以通过设置元数据函数分配关系。

我们还可以只获得成本而不返回详细路径:

    ____  _______  ___________  ____  ____ ______
   / __ \/ ___/ / / / ___/ __ \/ __ \/ __ `/ ___/
  / /_/ (__  ) /_/ / /__/ /_/ / /_/ / /_/ / /
 / .___/____/\__, /\___/\____/ .___/\__, /_/
/_/         /____/          /_/    /____/
1

返回的也是dict:{(开始节点,结束节点):cost}

pgrouting函数的低级包装器

<表><广告>psycopgr函数pgrouting函数 < /广告><正文>dijkstrapgr_dijkstradijkstra_成本pgr_dijkstracostastarpgr_astar

这些是pgrouting函数的直接包装。例如,dijkstra将顶点id作为输入。此列表将来可能会扩展。

教程

以下是a教程

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Kafka producer大量内存使用(泄漏?)   java NullPointerException。。。正在插入数据但无法检索数据[Mysql DB]   java spring+jpa+hibernate=没有可用于当前线程的实际事务的EntityManager无法可靠地处理“persist”调用   getelementbyid在没有ID的情况下如何在java中使用GetElementsById   java有没有一种使用WatchService强制轮询的方法?   java将值从jframe传递给另一个jframe并使用它   Java/Groovy中带重试的反应式事件处理   具有两个包装器元素的java Jackson XML ArrayList输出   java总是在范围内使用不同的随机元素   取消选择java下拉列表值   多线程如何在Java中为对象的不同成员拥有不同的同步块   java如何使用多线程从文本文件中读取输入   java Spring启动附加崩溃命令   java使用公共或单独的actionPerfomed方法有什么区别   java用Spring3.0中的SpEL替换JSP中的EL   java作为windows服务运行应用程序时无法访问共享文件夹   java xml 1.1规范中的“解析数据”是什么意思?   以编程方式设置JComboBox索引时java触发ItemListener   java Android WebView:只加载HTML,不加载JS或CSS(在某些设备中)   Java:计算do/while循环的数量