Mais

Usando pgrouting e algoritmos no PostgreSQL?

Usando pgrouting e algoritmos no PostgreSQL?


Estou tentando meu primeiro pgrouting em um shapefile de estradas, eu o carrego no PostgreSQL primeiro, a tabela temosm_id, gid, nome, ref, tipo, oneway, maxspeed

Em seguida, adiciono as colunas de origem e destino na tabela:

ALTER TABLE estradas ADD COLUMN "source" integer; ALTER TABLE estradas ADD COLUMN "destino" inteiro;

Então eu faço a topologia com a função:

SELECT pgr_createTopology ('roads', 0.0001, 'geom', 'gid');

fazer indexis

CRIAR INDEX estradas_source_idx EM estradas ("fonte"); CRIAR INDEX estradas_target_idx EM estradas ("destino");

Adicione a coluna de custo e conte o custo com a coluna geográfica usando o método ST_LENGTH

ALTER TABLE estradas ADD COLUMN comprimento duplo precisão; ATUALIZAR estradas SET length = ST_LENGTH (geom);

Adicionar coluna de custo reverso e contar

ALTER TABLE estradas ADICIONE COLUNA reverse_cost double precision; ATUALIZAR estradas SET reverse_cost = length;

Finalmente eu executo a consulta distrack, que está rodando no PostgreSQL, mas se eu tento rodar esta consulta no QGIS ela não está rodando. Este é o primeiro problema.

SELECT seq, id1 AS node, id2 AS edge, cost FROM pgr_dijkstra ('SELECT gid AS id, source :: integer, target :: integer, shape_leng :: double precision AS cost FROM roads', 30, 300, false, false) ;

Então tento usar A *

Eu conto x1 y1 x2 y2, mas as colunas estão vazias e não sei por que inserir as colunas com essas consultas:

ALTER TABLE estradas ADD COLUMN x1 double precision; ALTER TABLE estradas ADD COLUMN y1 precisão dupla; ALTER TABLE estradas ADD COLUMN x2 double precision; ALTER TABLE estradas ADICIONE COLUNA y2 precisão dupla;

Então eu uso essas consultas para colocá-las em campo, mas as colunas ainda estão vazias após a execução:

ATUALIZAR estradas SET x1 = ST_x (ST_startpoint (geom)); ATUALIZAR estradas SET y1 = ST_y (ST_startpoint (geom)); ATUALIZAR estradas SET x2 = ST_x (ST_endpoint (geom)); ATUALIZAR estradas SET y2 = ST_y (ST_endpoint (geom));

Eu li na net as mesmas versões tem problema com startpoint e endpoint e eu uso o PointN mas ainda fico com colunas vazias:

ATUALIZAR estradas SET x1 = ST_x (ST_PointN (geom, 1)); ATUALIZAR estradas SET y1 = ST_y (ST_PointN (geom, 1)); ATUALIZAR estradas SET x2 = ST_x (ST_PointN (geom, ST_NumPoints (geom))); ATUALIZAR estradas SET y2 = ST_y (ST_PointN (geom, ST_NumPoints (geom)));

E a consulta para A *

SELECT seq, id1 AS node, id2 AS edge, cost FROM pgr_astar ('SELECT gid AS id, source :: integer, target :: integer, shape_leng :: double precision AS cost, x1, y1, x2, y2 FROM roads', 30, 60, falso, falso);

Como posso mostrar o roteamento no QGIS do PostgreSQL Eu fiz isso, mas ainda tenho problema com A * x1, y1 e x2, y2 após a atualização ainda está vazio as colunas x1 y1 x2 y2?

Tento usar essas consultas, mas o x2y2 não está preenchendo:

ATUALIZAR estradas SET x1 = ST_X (ST_StartPoint (ST_geometryN (geom, 1))); ATUALIZAR estradas SET y1 = ST_Y (ST_StartPoint (ST_geometryN (geom, 1))); ATUALIZAR estradas SET x2 = ST_X (ST_EndPoint (ST_geometryN (geom, ST_NumPoints (geom)))); ATUALIZAR estradas SET y2 = ST_Y (ST_EndPoint (ST_geometryN (geom, ST_NumPoints (geom))));

Por favor se alguem puder me ajudar


Tente executar a consulta em uma janela de terminal ou pgAdmin3 para ver se funciona lá.

Se você deseja visualizar a consulta de roteamento no QGIS, consulte o workshop:

  • Crie uma conexão de banco de dados e adicione a tabela de “caminhos” como uma camada de fundo.
  • Adicione outra camada da tabela de “formas”, mas selecione Construir consulta antes de adicioná-la.

Em seguida, digite o seguinte no campo da cláusula SQL where:

"gid" IN (SELECT id2 AS gid FROM pgr_dijkstra ('SELECT gid AS id, source :: integer, target :: integer, length :: double precision AS cost FROM way', 30, 60, false, false) a LEFT JOIN formas b ON (a.id2 = b.gid))

Assista o vídeo: QGIS come analizzare un grafo stradale con il plugin pgRoutingLayer