我正在尝试根据OSM数据运行pgRouting并且在正确运行时遇到一些问题。
我在Ubuntu机器上安装了PostgreSQL 9.5。 PostGIS_full_version以
返回和pgRouting已安装在2.2.3版本中。
我在2.1版中使用osm2pgrouting从Geofabrik导入osm文件并构建拓扑。
导入后,表格中的“长度”列保持非常小的值,同时应该具有以千米为单位的距离信息。与列'length_m'的比较表明,以米为单位的距离或以千米为单位的距离是错误的。基于此discussion,我可以解决距离问题。
但是,“费用”列似乎是列“长度”的副本,在上面链接的讨论中,不会重新计算费用列,我不确定是否也应该这样做。
因此我添加了另一列('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是true还是false,我都会获得123.397950457207 km。
使用'to_cost'列并将reverse_cost变为true,我的距离仅为143.048209059395 km,时间值为169.415916099922分钟。