Hướng dẫn sử dụng pgRouting
pgRouting
là một module mở rộng của PostgreSQL và PostGIS, cung cấp các thuật toán và tính năng định tuyến như đường đi ngắn nhất, vấn đề người bán hàng và phân tích khu vực dịch vụ, hữu ích cho các lĩnh vực giao thông, logistics và phân tích mạng. Bài viết này sẽ hướng dẫn chi tiết cách cài đặt và sử dụng pgRouting
trên ServBay.
Cài đặt pgRouting
ServBay đã tích hợp sẵn module mở rộng pgRouting
, bạn chỉ cần kích hoạt nó trong cơ sở dữ liệu. Dưới đây là các bước để kích hoạt pgRouting
:
Kết nối tới cơ sở dữ liệu PostgreSQL:
bashpsql -U your_username -d your_database
1Tạo extension:
sqlCREATE EXTENSION pgrouting;
1Xác nhận cài đặt:
sql\dx
1
Cấu hình pgRouting
Sau khi kích hoạt pgRouting
, bạn có thể tạo và quản lý dữ liệu mạng lưới đường, sử dụng các thuật toán định tuyến khác nhau để phân tích.
Tạo bảng dữ liệu mạng lưới đường
Dưới đây là một ví dụ về cách tạo bảng chứa dữ liệu mạng lưới đường.
Tạo bảng:
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
8Chèn dữ liệu mẫu:
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
Tạo topology
Trước khi thực hiện phân tích định tuyến, bạn cần tạo topology cho dữ liệu mạng lưới đường.
- Tạo topology:sql
SELECT pgr_createTopology('ways', 0.00001, 'geom', 'id');
1
Sử dụng pgRouting để phân tích định tuyến
Dưới đây là một số ví dụ phân tích định tuyến thường dùng.
Đường đi ngắn nhất
- Truy vấn đường đi ngắn nhất:sql
SELECT * FROM pgr_dijkstra( 'SELECT id, source, target, cost FROM ways', 1, 4, directed := true );
1
2
3
4
Vấn đề người bán hàng
- Giải quyết vấn đề người bán hàng: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
Phân tích khu vực dịch vụ
- Phân tích khu vực dịch vụ:sql
SELECT * FROM pgr_drivingDistance( 'SELECT id, source, target, cost FROM ways', 1, 2, directed := true );
1
2
3
4
Trực quan hóa kết quả định tuyến
Bạn có thể sử dụng các công cụ GIS khác nhau (như QGIS) hoặc dịch vụ bản đồ web (như Leaflet, OpenLayers) để trực quan hóa kết quả từ pgRouting
.
Sử dụng QGIS
Kết nối tới cơ sở dữ liệu PostgreSQL:
- Mở QGIS
- Chọn “Quản lý nguồn dữ liệu” -> “PostGIS”
- Nhập thông tin kết nối cơ sở dữ liệu và kết nối
Tải dữ liệu mạng lưới đường:
- Chọn bảng hoặc view cần tải
- Nhấn nút “Thêm”
Sử dụng Leaflet
- Tạo bản đồ web:html
<!DOCTYPE html> <html> <head> <title>Leaflet pgRouting Example</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); // Thêm một polyline từ dữ liệu 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
Tóm tắt
pgRouting
là một module mở rộng mạnh mẽ, qua cấu hình và sử dụng đơn giản, bạn có thể thực hiện phân tích định tuyến hiệu quả trong PostgreSQL. ServBay đã tích hợp sẵn module mở rộng pgRouting
, bạn chỉ cần làm theo các bước trong bài viết này để cài đặt và cấu hình. Qua các thuật toán và tính năng phân tích đa dạng, bạn có thể tận dụng dữ liệu mạng lưới đường tốt hơn, cung cấp hỗ trợ dữ liệu tin cậy cho ứng dụng của mình.