एक प्रश्न में PgRout के साथ कई सबसे छोटे रास्ते मिल रहे हैं?


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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.