Guia de Uso do pgRouting
pgRouting
é um módulo de extensão para PostgreSQL e PostGIS que oferece vários algoritmos e funcionalidades de roteamento, como caminho mais curto, problema do caixeiro viajante e análise de área de serviço, aplicáveis em áreas como transporte, logística e análise de redes. Este artigo detalha como instalar e usar o pgRouting
no ServBay.
Instalação do pgRouting
O ServBay já vem com o módulo de extensão pgRouting
incluído; você só precisa ativá-lo no banco de dados. Abaixo estão os passos para ativar o pgRouting
:
Conectar ao banco de dados PostgreSQL:
bashpsql -U seu_usuario -d seu_banco_de_dados
1Criar a extensão:
sqlCREATE EXTENSION pgrouting;
1Verificar a instalação:
sql\dx
1
Configuração do pgRouting
Depois de ativar o pgRouting
, você pode criar e gerenciar dados da rede viária e usar vários algoritmos de roteamento para análise.
Criar a tabela de dados da rede viária
Abaixo está um exemplo que mostra como criar uma tabela contendo dados da rede viária.
Criar tabela:
sqlCREATE TABLE ways ( id SERIAL PRIMARY KEY, source INTEGER, target INTEGER, cost DOUBLE PRECISION, reverse_cost DOUBLE PRECISION, geom GEOMETRY(LineString, 4326) );
1
2
3
4
5
6
7
8Inserir dados de exemplo:
sqlINSERT INTO ways (source, target, cost, reverse_cost, geom) VALUES (1, 2, 1.0, 1.0, ST_GeomFromText('LINESTRING(116.4074 39.9042, 116.4084 39.9052)', 4326)), (2, 3, 1.0, 1.0, ST_GeomFromText('LINESTRING(116.4084 39.9052, 116.4094 39.9062)', 4326)), (3, 4, 1.0, 1.0, ST_GeomFromText('LINESTRING(116.4094 39.9062, 116.4104 39.9072)', 4326));
1
2
3
4
Criar topologia
Antes de realizar a análise de roteamento, você precisa criar a topologia para os dados da rede viária.
- Criar topologia:sql
SELECT pgr_createTopology('ways', 0.00001, 'geom', 'id');
1
Uso do pgRouting para Análise de Roteamento
Abaixo estão alguns exemplos comuns de análise de roteamento.
Caminho mais curto
- Consultar o caminho mais curto:sql
SELECT * FROM pgr_dijkstra( 'SELECT id, source, target, cost FROM ways', 1, 4, directed := true );
1
2
3
4
Problema do caixeiro viajante
- Resolver o problema do caixeiro viajante:sql
SELECT * FROM pgr_tsp( 'SELECT id, x::float8 AS x, y::float8 AS y FROM ways_vertices_pgr', start_id := 1 );
1
2
3
4
Análise de área de serviço
- Analisar área de serviço:sql
SELECT * FROM pgr_drivingDistance( 'SELECT id, source, target, cost FROM ways', 1, 2, directed := true );
1
2
3
4
Visualização dos Resultados do Roteamento
Você pode usar várias ferramentas GIS (como QGIS) ou serviços de mapas web (como Leaflet, OpenLayers) para visualizar os resultados do pgRouting
.
Usando QGIS
Conectar ao banco de dados PostgreSQL:
- Abrir o QGIS
- Selecionar “Gerenciador de Fonte de Dados” -> “PostGIS”
- Inserir as informações de conexão ao banco de dados e conectar
Carregar dados da rede viária:
- Selecionar a tabela ou vista que deseja carregar
- Clicar no botão “Adicionar”
Usando Leaflet
- Criar um mapa web:html
<!DOCTYPE html> <html> <head> <title>Exemplo de Leaflet pgRouting</title> <link rel="stylesheet" href="https://unpkg.com/leaflet/dist/leaflet.css" /> <script src="https://unpkg.com/leaflet/dist/leaflet.js"></script> </head> <body> <div id="map" style="width: 600px; height: 400px;"></div> <script> var map = L.map('map').setView([39.9042, 116.4074], 13); L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: '© OpenStreetMap contributors' }).addTo(map); // Adicionar uma polilinha dos dados do pgRouting var polyline = L.polyline([ [39.9042, 116.4074], [39.9052, 116.4084], [39.9062, 116.4094], [39.9072, 116.4104] ]).addTo(map); </script> </body> </html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Conclusão
pgRouting
é um poderoso módulo de extensão de roteamento. Através de uma configuração e uso simples, você pode realizar análises de roteamento de maneira eficiente no PostgreSQL. O ServBay já vem com o módulo de extensão pgRouting
incluído, e você só precisa seguir os passos deste artigo para instalar e configurar. Com os vários algoritmos de roteamento e funcionalidades de análise, você pode aproveitar melhor os dados da rede viária, fornecendo suporte confiável de banco de dados para suas aplicações.