在 Postgres 中使用包含源节点 ID 和目标节点 ID 的表

问题描述 投票:0回答:1

我对此很陌生——尝试使用 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;

任何提示表示赞赏!

postgresql postgis dijkstra
1个回答
0
投票

好的,对于遇到同样问题的任何人 - 像这样修复(我认为)!

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;
© www.soinside.com 2019 - 2024. All rights reserved.