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
パラメーターを変更しましたが、何も起こりませんでした。
この件で皆さんが私を助けてくれるかどうか疑問に思っていました。アドバイスや手がかりさえいただければ幸いです。