0

我正在做一个项目,我们将寻找从 A 点到 B 点的最短/最快路线。我一直在查看 osm2pgsql 生成的表。而且我想知道在将 osm 加载到我们的数据库中后,我将如何表示一条被阻塞的道路。我们的项目将依靠 osm 来绘制所有道路,我们还将有一名操作员查看道路的实时视频片段。此时,如果操作员看到道路被阻塞,我们想要更新数据库以反映这条道路被倒下的树阻塞。

我一直在查看所有的列,唯一在我脑海中突出的就是屏障。我一直找不到任何关于每列代表什么以及 pg_route 在创建路由时如何考虑每一个的文档。我正在寻找的是一个列,当 pg_route 在数据库中查找并看到一条道路时,它说哦,道路阻塞跳过它?

4

2 回答 2

1

这对 gis.se 来说是个好问题……

首先是 pg_routing 无法通过 osm2pgsql 生成的数据进行路由 - 该数据不是网络。您需要 osm2po 或 osm2pgrouting 生成的数据,而这些数据完全不同。

第二件事是 - 没有这样的专栏。在每个 pg_routing 函数中,您传递的 sql 将为路径搜索选择数据,因此您决定哪个边缘将在此数据集中,哪个不存在 - 向带有边缘的表添加额外的列不是问题。

这是pgrouting 研讨会的链接,它将指导您完成从数据导入到第一个生成路线的所有过程。它使用 osm2pgroutin 导入数据,但我建议您改用 osm2po。

于 2014-08-13T18:29:31.187 回答
1

因此,正如 Jendrusk 所提到的,当您生成路线时,您将向函数传递一个 SQL 查询来选择要解决的图形的边,'select * from edges where the_geom && <bbox>' 您可以使用点和半径对阻塞建模、线或多边形,您希望通过添加到上述回避区域的查询中来避免路线,例如:

'从 the_geom && <bbox> 而不是 st_dwithin(the_geom, point, radius) 而不是 stdwithin(the_geom, line_or_polygon, 0.0) 的边缘中选择 *

如果您有很多这些避免,则将它们放在一个表中并进行连接以消除用于构建图形的边。如果边缘不存在,则路线将迫使您找到避开避让的方法。

于 2014-08-14T13:12:56.657 回答