我对此很陌生——尝试使用 dijkstra 查找大约 10,000 人的地址列表与他们选择的设施之间的距离和路线。我有一个小的子查询(如下)导出每个人的节点 ID(源和目标)。我原以为我可以简单地将其加入 dijkstra 以提供算法的源和目标?
失败的示例 SQL,我的大脑正在衰退:
SELECT *
FROM pgr_dijkstra(
'SELECT gid as id, source, target, length as cost FROM roads',
mappingt.source,
mappingt.target,
directed := false
) AS route
JOIN (
SELECT
p.nearestnode AS source,
f.nearestnode AS target
FROM people p
INNER JOIN facilities f
ON p.chosenfacilityid = f.FacilityId
) AS mappingt
ON route.target = mappingt.target
and route.source = mappingt.source
JOIN roads AS roads
ON route.edge = roads.gid;
任何提示表示赞赏!
好的,对于遇到同样问题的任何人 - 像这样修复(我认为)!
select
p.nearestnode,
f.nearestnode,
dijkstra.*
from people p
inner join facilities f
on p.chosenfacilityid = f.FacilityId
CROSS JOIN LATERAL
pgr_dijkstra(
'SELECT id, source, target, cost FROM roads',
p.nearestnode,
f.nearestnode,
directed := false
) AS dijkstra
JOIN
roads road
ON
dijkstra.edge = road.gid;