한 번의 쿼리로 PgRouting을 사용하여 여러 개의 최단 경로를 얻습니까?


12

여러 소스 및 대상 쌍에서 최단 경로 알고리즘을 한 번에 실행하고 결과를 테이블로 가져 와서 처리하려고합니다.

어떻게해야합니까? 이 쿼리는 작동하지 않습니다 :

SELECT a.source, a.target, paths.* 
FROM all_to_all a, shortest_path_astar('...', a.source, a.target, false, false) paths;

ERROR:  function expression in FROM cannot refer to other relations of same query level

(btw, all_to_all은 문자 그대로 모든 것을 의미하지는 않습니다. :) 단지 임의의 수의 쌍입니다.

이것은 작동하지 않습니다 :

SELECT * 
FROM all_to_all a, (
   SELECT * FROM shortest_path_astar('...', a.source, a.target, false, false) yyy
) AS t2;

---- 당신은 이것을 확장 할 수 있습니까? 나는 같은 문제가 있지만이 쌍을 올바르게 얻을 수 없습니까? (게시물 편집을 시도한 결과)
Mapperz

답변:


13

같은 것

SELECT 
  source, 
  target,
  (SELECT SUM(cost) FROM  -- or whatever you want to do with the routing result
     (SELECT * FROM shortest_path_astar('...',
       source,
       target,
       false,
       false)
     ) AS foo 
  ) AS cost
FROM all_to_all;

4

모든 소스-타겟 조합에 대한 모든 세그먼트를 반환하는 쿼리는 다음과 같습니다.

SELECT
    source,
    target,
    shortest_path_astar('SELECT gid AS id, length AS cost, * FROM ways', source, target, false, false) AS segment
FROM
    all_to_all

놀라운, SQL 구문과 일치하지 않지만 작동합니다!

source | target | segment
-------+--------+----------------
     1 |      4 | (1, 2, 0.1357)
     1 |      4 | (2, 3, 0.2468)
     1 |      4 | (3, 4, 0.9)
     1 |      4 | (4, -1, 0)
other sources & targets here
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.