Bagaimana cara bekerja dengan shortest_path_shooting_star () di pgRouting?

8

Sudah lama kami menggunakan PostGIS untuk menyimpan informasi Geometri kami di database Postgres kami. Kami telah mengembangkan rute vertex-to-vertex sendiri menggunakan perpustakaan iGraph. Kemarin saya membaca tentang pgRouting dan saya porting aplikasi kita saat ini ke pgRouting. Namun, saya menghadapi beberapa masalah dalam menggunakan shooting find path finder.

Kami menyimpan informasi tepi dan simpul dalam tabel dan untuk menemukan rute grafik dengan pembatasan belokan, kami memanggil skrip SQL berikut:

SELECT  shortest_path_shooting_star(
    'SELECT e.id,
                e.first as source,
                e.second as target,
                ST_Length(e.geom) as cost, 
                st_x(st_pointn(e.geom, 1)) AS x1, st_y(st_pointn(e.geom, 1)) AS y1,
                st_x(st_pointn(e.geom, 2)) AS x2, st_y(st_pointn(e.geom, 2)) AS y2,
                (not connected)::boolean::int * 1000000 AS to_cost,
                c.first AS rule
        FROM edges e LEFT OUTER JOIN edge_connections c ON e.id = c.second
        WHERE e.group_id = 0
        ORDER BY e.id',
    1209560, 1209653, true, false);

Subqery batin saya akan memiliki hasil sebagai berikut:

  id    | source  | target  |   cost |  x1   |  y1   |  x2   |  y2   | to_cost |  rule  
--------+---------+---------+----+------------------+------------------+---------+---------
1087134 |  926686 |  926687| 2.3299 |51.4675|35.728 |51.4675|35.7280|         |    
1209706 | 1039731 | 1039870 | 4.005 |51.4082|35.7239|51.4082|35.7239| 1000000 | 1209564
...

Di hasil, ketika ada kendala, aturan dan to_cost tidak akan menjadi NULL. Ketika pembatasan belok ada, hasilnya akan persis seperti apa yang ditentukan dalam dokumen .

Namun, ketika saya memanggil shortest_path_shooting_starfungsi, hasilnya tidak akan berbeda jika rule-and- to_costada atau tidak. Saya telah mengubah diarahkan dan has_reverse_costparameter tetapi tidak ada yang terjadi.

Saya bertanya-tanya apakah kalian bisa membantu saya dalam masalah ini. Setiap saran atau bahkan petunjuk akan sangat dihargai.

mgri
sumber

Jawaban:

1

Anda sepertinya tidak memiliki kolom "reverse_cost" di subquery Anda.

Dari dokumen :

reverse_cost (opsional): biaya untuk traversal terbalik tepi. Ini hanya digunakan ketika parameter yang diarahkan dan has_reverse_cost benar (lihat komentar di atas tentang biaya negatif).

underdark
sumber