1

我正在尝试基于 OSM 数据运行 pgRouting,但在正确运行时遇到了一些问题。

我在 Ubuntu 机器上安装了 PostgreSQL 9.5。PostGIS_full_version 回来了

  • "POSTGIS="2.2.2 r14797"
  • GEOS="3.4.2-CAPI-1.8.2 r3921"
  • PROJ="Rel. 4.8.0,2012 年 3 月 6 日"
  • GDAL="GDAL 1.11.2,发布于 2015/02/10"
  • LIBXML="2.9.1"
  • LIBJSON="0.11.99"
  • 拓扑栅格",

并且 pgRouting 安装在 2.2.3 版本中。

我在 2.1 版中使用 osm2pgrouting 从 Geofabrik 导入 o​​sm 文件并构建拓扑。

导入后,表格中的“长度”列包含非常小的值,而应该具有以公里为单位的距离信息。与“length_m”列的比较表明,以米为单位的距离或以公里为单位的距离是错误的。基于这个讨论,我可以解决距离问题。

但是,“成本”列似乎是“长度”列的副本,并且在上面链接的讨论中,成本列没有重新计算,我不确定是否也应该这样做。

因此,我添加了另一列('to_cost'),其中包含重新计算的距离。以下 SQL 查询利用了这一点:

SELECT SUM(distance) as "Distance (km)", SUM(zeit) as "Time (min)" FROM
  (SELECT b.length as distance, b.length/b.maxspeed_forward*60 as zeit
    FROM pgr_dijkstra('SELECT gid::integer as id,
                            source::integer,
                            target::integer,
                            to_cost as cost,
                            reverse_cost
                     FROM ways',
                     728126, 508421, true, false) a,
                     ways b
  WHERE a.id1=b.gid::integer) AS my routing;

返回的距离为 232.388203319894 公里,此行程所需的时间(以分钟为单位)为 275.537860166885 分钟。

我试图在OpenStreetMap计算相同的路线,在这里我得到了一条稍长但更快的路线返回。因此,我想知道我是否在这里做正确的事情。

此外,当我使用 'cost' 列和来自 osm2pgrouting 的导入数据而不是 'to_cost' 列时,无论我说 reverse_cost 是真还是假,我都会得到 123.397950457207 公里。

使用“to_cost”列并将 reverse_cost 设置为 true,然后我得到的距离只有 143.048209059395 公里,时间值为 169.415916099922 分钟。

4

0 回答 0