Já faz algum tempo que estamos usando o PostGIS para armazenar nossas informações de geometria em nosso banco de dados Postgres. Desenvolvemos o roteamento de vértice para vértice usando a biblioteca iGraph. Ontem, li sobre o pgRouting e estou portando nosso aplicativo atual para o pgRouting. No entanto, enfrento alguns problemas ao usar o localizador de caminhos de início de filmagem.
Armazenamos informações de arestas e vértices em tabelas e, para encontrar uma rota de gráfico com restrição de turno, chamamos o seguinte script 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);
Minha subconsulta interna terá os seguintes resultados:
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
...
Nos resultados, quando existe uma restrição, regra e to_cost não seriam NULL. Quando existe uma restrição de turno, os resultados serão exatamente iguais aos especificados nos documentos .
No entanto, quando eu chamo a shortest_path_shooting_star
função, os resultados não diferem se a rule
- e - to_cost
existir ou não. Mudei de direção e has_reverse_cost
parâmetros, mas nada aconteceu.
Fiquei me perguntando se vocês poderiam me ajudar nesse assunto. Qualquer conselho ou mesmo uma pista seria muito apreciada.