pgRoutingでshortest_path_shooting_star()を使用するにはどうすればよいですか?


8

PostGISを使用して、ジオメトリ情報をPostgresデータベースに格納するのは久しぶりです。頂点から頂点へのルーティングは、iGraphライブラリを使用して独自に開発しました。昨日、pgRoutingについて読み、現在のアプリケーションをpgRoutingに移植します。しかし、私は射撃開始経路ファインダーを使用する際にいくつかの問題に直面しています。

エッジと頂点の情報をテーブルに保存し、ターン制限付きのグラフルートを見つけるために、次のSQLスクリプトを呼び出します。

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);

私の内側のサブクエリは次の結果を持っています:

  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
...

結果では、制約が存在する場合、ruleおよびto_costはNULLになりません。ターン制限がある場合、結果はdocsで指定されたものとまったく同じになります。

ただし、shortest_path_shooting_star関数を呼び出したとき、rule-and- to_costが存在するかどうかにかかわらず、結果は変わりません。指示とhas_reverse_costパラメーターを変更しましたが、何も起こりませんでした。

この件で皆さんが私を助けてくれるかどうか疑問に思っていました。アドバイスや手がかりさえいただければ幸いです。

回答:


1

サブクエリの「reverse_cost」列が不足しているようです。

ドキュメントから:

reverse_cost(オプション):エッジの逆トラバーサルのコスト。これは、directedおよびhas_reverse_costパラメーターがtrueの場合にのみ使用されます(負のコストに関する上記の注釈を参照)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.