0

起初,我对一般路由很陌生,需要将它用于我的学士论文,所以我学习它的时间很有限。如果有更多信息我可以提供以找到问题,或者如果您只是有一个想法,请告诉我。谢谢!

我对 postgis 扩展 pgrouting 提供的路由方法有疑问,其结果远非最短路径。

我正在使用一个包含带有 pgrouting 扩展名的 postgis 的 docker 容器: https ://hub.docker.com/r/pgrouting/pgrouting/

我的图表是使用 osm2po 在 Geofabrik.de 的“Niedersachsen”地图上创建的。

我只是按照 osm2po quickstart 提供的教程创建了一个图表并将其放入我的数据库中。

我的表构建为:

CREATE TABLE hh_2po_4pgr(id integer, osm_id bigint, osm_name character varying, osm_meta character varying, osm_source_id bigint, osm_target_id bigint, clazz integer, flags integer, source integer, target integer, km double precision, kmh integer, cost double precision, reverse_cost double precision, x1 double precision, y1 double precision, x2 double precision, y2 double precision);
SELECT AddGeometryColumn('hh_2po_4pgr', 'geom_way', 4326, 'LINESTRING', 2);

我唯一配置的是将我的成本和 reverse_cost 设置为距离。但如果没有这种变化,问题仍然存在。我也做了 pgr_anaalyzeGraph 这给了我一个 OK 这通常表明该图应该配置得很好。

当我现在启动这样的查询时:

SELECT * FROM pgr_astar('SELECT id, source, target, cost, x1, y1, x2, y2 FROM hh_2po_4pgr', 232516, 213104, FALSE, 2);

它给了我看似随机的路线,这些路线要么是空的,要么是很长的。我正在测试的身份彼此非常接近,并且都通过街道相连。在这种情况下,它应该是几百米的路线,但我得到的路线有 1000 多个路段,几乎 100 公里。

注意:我还尝试了其他功能,例如 pgr_djjkstra。

4

1 回答 1

0

解决方案:

SELECT source FROM hh_2po_4pgr ORDER BY geom_way <-> ST_SetSRID(ST_Point(:pointX, :pointY),4326);

SELECT target FROM hh_2po_4pgr ORDER BY geom_way <-> ST_SetSRID(ST_Point(:pointX, :pointY),4326);

使用这些 SELECT 语句来获取正确的 ID,以便在您的 pgrouting 函数中使用。

如果有人对 pgrouting 有任何问题,请联系我。如果我查看我的 Stackoverflow 消息,我会尽力帮助您。似乎文档和教程有点烦人。

于 2021-10-26T12:13:06.043 回答