首先,我对路由总体来说是个新手,需要在我的学士论文中使用它,所以我学习它的时间非常有限。如果有更多的信息我可以提供,以找到问题,或者如果你只是有一个想法,请告诉我。谢谢!
我对postgis扩展pgrouting提供的路由方法有一个问题,在这些方法中,结果远远不是最短路径。
我使用了一个包含postgis的docker容器,扩展名为pgrouting:https://hub.docker.com/r/pgrouting/pgrouting/
我的图是在Geofabrik.de的"Niedersachsen“地图上用osm2po创建的。
我只是按照osm2po快速入门提供的教程创建了一个图形,并将其放入我的数据库中。
My Table构建为:
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);我配置的唯一一件事就是将cost和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。
发布于 2021-10-26 12:13:06
解决方案:
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消息,我会尝试帮助您。看起来文档和教程有点让人恼火。
https://stackoverflow.com/questions/69678843
复制相似问题