Analisis Rute Spasial dengan pgRouting di ServBay
pgRouting
adalah ekstensi kuat untuk database PostgreSQL dan PostGIS yang menyediakan beragam fungsi analisis jaringan dan routing berbasis data spasial. Dengan pgRouting
, pengembang dapat melakukan kueri kompleks pada data jaringan jalan, seperti menemukan jalur terpendek antara dua titik, menyelesaikan Traveling Salesman Problem (TSP), atau melakukan analisis zona layanan. Fitur-fitur ini sangat berguna untuk membangun aplikasi peta, perencanaan logistik, analisis lalu lintas, dan lain-lain.
Dokumen ini akan menjelaskan secara rinci cara mengaktifkan ekstensi pgRouting
pada database PostgreSQL Anda di ServBay—lingkungan pengembangan web lokal—beserta langkah-langkah konfigurasi dasar dan analisis routing.
Ringkasan
ServBay menyediakan lingkungan pengembangan lokal serba-in-one yang mudah untuk pengguna macOS, telah terintegrasi dengan berbagai web server, database, dan bahasa pemrograman. Paket PostgreSQL yang disediakan ServBay sudah termasuk ekstensi pgRouting
dan PostGIS
. Artinya, Anda tidak perlu mengunduh atau mengkompilasi ekstensi secara manual—cukup aktifkan melalui database Anda.
Prasyarat
Sebelum menggunakan pgRouting
, pastikan Anda telah memenuhi hal-hal berikut:
- ServBay Telah Terpasang dan Berjalan: Jika Anda belum memasang ServBay, kunjungi Situs Resmi ServBay untuk mengunduh dan memasang versi terbaru.
- Paket PostgreSQL Sudah Terpasang dan Aktif di ServBay: Pada antarmuka aplikasi ServBay, pastikan paket PostgreSQL sudah terinstal dan berstatus “Running.”
- Memahami Dasar-dasar SQL dan PostgreSQL: Panduan ini mengasumsikan Anda memahami dasar penggunaan database PostgreSQL serta penulisan kueri SQL.
- Memahami Dasar PostGIS:
pgRouting
memerlukanPostGIS
untuk menangani tipe data dan fungsi spasial. Pastikan ekstensiPostGIS
sudah diaktifkan di database Anda—umumnya, PostGIS sudah termasuk dalam paket PostgreSQL ServBay.
Instalasi dan Aktivasi Ekstensi pgRouting
ServBay sudah menyediakan berkas-berkas ekstensi pgRouting
. Anda hanya perlu mengaktifkan ekstensi ini di database yang ingin digunakan.
Terhubung ke Database PostgreSQL:
Ada berbagai cara terhubung dengan database PostgreSQL, misalnya menggunakan perintah baris
psql
, aplikasi GUI (seperti pgAdmin, DBeaver), atau melalui library pemrograman.Cara paling langsung adalah menggunakan alat baris perintah
psql
yang disediakan oleh ServBay. Anda dapat membuka terminal yang sudah dikonfigurasi environment-path melalui tombol “Terminal” di aplikasi ServBay, atau menambahkan direktori bin ServBay ke PATH sistem Anda.Pada terminal, gunakan perintah berikut untuk menghubungkan ke database tujuan (misal database bernama
servbay_geo_db
, menggunakan user defaultservbay
):bashpsql -U servbay -d servbay_geo_db
1Jika nama database, username, atau password Anda berbeda, silakan sesuaikan perintah di atas.
Cek dan Aktifkan Ekstensi PostGIS (Jika Belum Aktif):
pgRouting
memerlukanPostGIS
. PastikanPostGIS
sudah aktif dengan perintah:sqlCREATE EXTENSION IF NOT EXISTS postgis;
1Perintah ini akan membuat atau melewati pembuatan ekstensi jika sudah ada.
Aktifkan Ekstensi pgRouting:
Dalam koneksi database yang sama, jalankan:
sqlCREATE EXTENSION pgrouting;
1Jika berhasil, Anda akan melihat output seperti
CREATE EXTENSION
.Verifikasi Instalasi:
Daftar ekstensi yang terpasang dengan:
sql\dx
1Pada daftar output, Anda harus menemukan
postgis
danpgrouting
beserta informasinya.
Konfigurasi pgRouting: Penyiapan Data Jaringan dan Pembuatan Topologi
Algoritma pgRouting
dijalankan pada tabel yang merepresentasikan struktur jaringan jalan. Umumnya, ini melibatkan tabel berisi segmen jalan (edge) dengan ID titik asal, ID titik tujuan, dan bobot (misal jarak atau waktu). Untuk perhitungan rute yang efisien, diperlukan pembuatan struktur "topologi" dari data segmen—yakni hubungan antar node dan edge.
Membuat Tabel Data Jaringan Jalan
Contoh berikut menunjukkan cara membuat tabel ways
untuk menyimpan data jaringan jalan. Tabel ini mencakup ID segmen, ID node sumber & target, biaya perjalanan maju & mundur (cost
, reverse_cost
), dan geometri segmen dalam tipe GEOMETRY
PostGIS.
sql
-- Membuat tabel untuk penyimpanan data jaringan jalan
CREATE TABLE ways (
id SERIAL PRIMARY KEY, -- Pengidentifikasi unik segmen jalan
source INTEGER, -- ID node asal
target INTEGER, -- ID node tujuan
cost DOUBLE PRECISION, -- Biaya melintasi segmen searah (jarak, waktu, dsb)
reverse_cost DOUBLE PRECISION, -- Biaya melintasi segmen dari lawan arah
geom GEOMETRY(LineString, 4326) -- Geometri segmen, bertipe LineString, SRID 4326 (WGS 84)
);
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
Penjelasan:
SERIAL PRIMARY KEY
: Membuat ID segmen yang unik otomatis.source
,target
: ID node awal dan akhir, digunakan saat membuat topologi.cost
,reverse_cost
: Bobot perjalanan melalui segmen tersebut. Untuk satu arah (one way), isireverse_cost
denganNULL
atau angka besar.geom
: Menyimpan info spasial segmen (garis) dalam sistem koordinat WGS84 (4326).
Memasukkan Contoh Data
Masukkan contoh segmen ke tabel:
sql
-- Contoh data segmen jalan
INSERT INTO ways (source, target, cost, reverse_cost, geom) VALUES
(1, 2, 1.0, 1.0, ST_SetSRID(ST_MakeLine(ST_MakePoint(116.4074, 39.9042), ST_MakePoint(116.4084, 39.9052)), 4326)),
(2, 3, 1.0, 1.0, ST_SetSRID(ST_MakeLine(ST_MakePoint(116.4084, 39.9052), ST_MakePoint(116.4094, 39.9062)), 4326)),
(3, 4, 1.0, 1.0, ST_SetSRID(ST_MakeLine(ST_MakePoint(116.4094, 39.9062), ST_MakePoint(116.4104, 39.9072)), 4326));
1
2
3
4
5
2
3
4
5
Penjelasan:
ST_MakePoint(x, y)
: Membuat titik dengan koordinat longitude (x), latitude (y).ST_MakeLine(point1, point2)
: Membentuk garis dari 2 titik.ST_SetSRID(geometry, srid)
: Menetapkan sistem referensi spasial.- Data contoh ini menggambarkan tiga ruas jalan terhubung dengan biaya 1.0—koordinat adalah area di Beijing.
Membuat Topologi Jaringan
Setelah tabel jaringan siap, gunakan fungsi pgr_createTopology
untuk membuat topologi. Fungsi ini menganalisa geometri segmen, mengidentifikasi node yang terhubung, dan mengisi kolom source
& target
, sekaligus membuat tabel node baru (biasanya diberi nama [namatabel]_vertices_pgr
).
sql
-- Membuat topologi jaringan jalan
-- Parameter:
-- 'ways': Nama tabel jaringan
-- 0.00001: Toleransi—jarak maksimum dua titik agar dianggap sebagai node yang sama
-- 'geom': Nama kolom geometri
-- 'id': Kolom ID segmen
SELECT pgr_createTopology('ways', 0.00001, 'geom', 'id');
1
2
3
4
5
6
7
2
3
4
5
6
7
Penjelasan:
pgr_createTopology
: Fungsi inti daripgRouting
untuk membangun model node-edge.- Nilai toleransi (tolerance) penting—menetapkan jarak maksimum untuk mengelompokkan dua titik menjadi satu node, tergantung presisi data Anda.
Hasilnya, kolom source
dan target
pada tabel ways
akan terisi otomatis, dan sebuah tabel baru ways_vertices_pgr
akan dibuat, berisi daftar node hasil identifikasi beserta koordinatnya.
Melakukan Analisis Routing dengan pgRouting
Setelah topologi dibuat, Anda bisa memakai aneka algoritma pgRouting
untuk analisis jaringan. Berikut adalah contoh paling sering digunakan.
Analisis Jalur Terpendek (Dijkstra)
Menemukan jalur terpendek antara dua node adalah operasi routing paling umum, yang diimplementasikan oleh algoritma Dijkstra.
sql
-- Mencari jalur terpendek dari node 1 ke node 4
-- Parameter:
-- 'SELECT id, source, target, cost FROM ways': Query pembangun graf, wajib memiliki id, source, target, cost
-- 1: ID node asal
-- 4: ID node tujuan
-- directed := true: Tentukan graf berarah atau tidak
SELECT seq, id1 AS node, id2 AS edge, cost, geom
FROM pgr_dijkstra(
'SELECT id, source, target, cost FROM ways',
1, -- Node asal
4, -- Node tujuan
directed := true -- Ubah ke false/abaikan jika ingin memperhitungkan reverse_cost
)
JOIN ways ON edge = ways.id; -- Join dengan tabel asli untuk mendapatkan geometri
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
Penjelasan:
pgr_dijkstra
: Fungsi untuk mencari rute terpendek menggunakan algoritma Dijkstra.- Parameter pertama query SQL yang memuat edge dengan kolom:
id
,source
,target
, dancost
. Untuk reverse direction, tambahkanreverse_cost
dan setdirected
ke false. - Parameter kedua & ketiga adalah ID node asal dan tujuan.
JOIN ways
digunakan untuk mengambil informasi geometri dari hasil algoritma.
Traveling Salesman Problem (TSP)
Algoritma TSP menemukan rute termurah/mempersingkat jarak berkeliling mengunjungi beberapa node tertentu.
sql
-- Menyelesaikan TSP untuk node 1, 2, 3, 4, mulai dari node 1
-- Parameter:
-- 'SELECT id, x::float8 AS x, y::float8 AS y FROM ways_vertices_pgr': memilih node dan kordinatnya
-- start_id := 1: Node awal
SELECT seq, node, edge, cost
FROM pgr_tsp(
'SELECT id, ST_X(the_geom)::float8 AS x, ST_Y(the_geom)::float8 AS y FROM ways_vertices_pgr WHERE id IN (1, 2, 3, 4)',
start_id := 1
);
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
Penjelasan:
pgr_tsp
: Fungsi penyelesai TSP.- Parameter pertama query SQL yang mengembalikan
id
,x
, dany
node-node yang akan dikunjungi (dariways_vertices_pgr
). start_id
menentukan node awal perjalanan.
Analisis Zona Layanan (Driving Distance / Driving Time)
Analisis zona layanan menentukan semua area atau jalan yang dapat diakses dari satu/titik asal dalam batas biaya tertentu.
sql
-- Dari node 1, temukan semua edge yang dapat dicapai dengan biaya <= 2 satuan
-- Parameter:
-- 'SELECT id, source, target, cost FROM ways': Query pembangun graf
-- 1: Node asal
-- 2: Batas maksimal biaya
-- directed := true: Graf berarah
SELECT seq, id1 AS node, id2 AS edge, cost, geom
FROM pgr_drivingDistance(
'SELECT id, source, target, cost FROM ways',
1, -- Node asal
2, -- Batas maksimal biaya
directed := true
)
JOIN ways ON edge = ways.id; -- Join dengan tabel asli untuk geometri
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
Penjelasan:
pgr_drivingDistance
: Fungsi untuk membatasi area layanan berdasarkan biaya, jarak, atau waktu.- Parameter dan query pembangun graf sama seperti di Dijkstra.
- Hasil join memungkinkan hasil divisualisasikan secara spasial.
Visualisasi Hasil Routing
Visualisasi hasil analisis pgRouting
sangat krusial untuk memahami dan menampilkan informasi rute. Anda bisa menggunakan perangkat lunak GIS desktop atau integrasi pustaka peta web.
Menggunakan GIS Desktop (seperti QGIS)
QGIS adalah aplikasi GIS desktop open source yang dapat langsung terkoneksi ke database PostgreSQL/PostGIS dan menampilkan data spasial, termasuk hasil pgRouting
.
- Buka QGIS.
- Pilih Layer > Data Source Manager.
- Pada menu kiri, pilih PostGIS.
- Klik tombol New untuk membuat koneksi database.
- Masukkan info koneksi PostgreSQL ServBay Anda (contoh: Host:
localhost
, Port:5432
, Database:servbay_geo_db
, User:servbay
, Password: password PostgreSQL Anda). Klik Test Connection untuk memastikan koneksi berhasil. - Setelah sukses terhubung, buka basis data Anda. Tabel seperti
ways
danways_vertices_pgr
akan tampak. - Pilih tabel atau view hasil kueri (misal, view hasil shortest path), klik Add untuk menambahkannya ke QGIS dan lakukan visualisasi.
Visualisasi di Web (Leaflet atau OpenLayers)
Untuk aplikasi web, perlu backend (misal PHP, Node.js, Python di ServBay) yang menjalankan kueri pgRouting
dan mengirim hasil (umumnya format GeoJSON) ke frontend, yang memanfaatkan pustaka peta seperti Leaflet atau OpenLayers.
Berikut contoh HTML dasar menampilkan polyline statis pada Leaflet. Untuk menampilkan hasil rute dinamis:
- Jalankan kueri
pgRouting
di backend. - Konversi hasil ke GeoJSON.
- Sertakan endpoint API untuk mengirimkan GeoJSON ke frontend.
- Frontend (JS) menggunakan Leaflet
L.geoJSON
untuk menampilkan data rute.
html
<!DOCTYPE html>
<html>
<head>
<title>Contoh Visualisasi Web ServBay pgRouting</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://unpkg.com/leaflet/dist/leaflet.css" />
<script src="https://unpkg.com/leaflet/dist/leaflet.js"></script>
<style>
#map { height: 600px; width: 100%; } /* Atur ukuran tampilan peta */
</style>
</head>
<body>
<h1>Visualisasi Hasil pgRouting di ServBay</h1>
<div id="map"></div>
<script>
// Inisialisasi peta, set pusat & zoom
var map = L.map('map').setView([39.906, 116.409], 14); // Titik tengah dari data contoh
// Tambahkan basemap OpenStreetMap
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
}).addTo(map);
// Contoh: tambahkan GeoJSON hasil kueri pgRouting
// Pada aplikasi nyata, geojsonData didapat via AJAX dari backend
var geojsonData = {
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {
"id": 1,
"cost": 1.0
},
"geometry": {
"type": "LineString",
"coordinates": [
[116.4074, 39.9042],
[116.4084, 39.9052]
]
}
},
{
"type": "Feature",
"properties": {
"id": 2,
"cost": 1.0
},
"geometry": {
"type": "LineString",
"coordinates": [
[116.4084, 39.9052],
[116.4094, 39.9062]
]
}
},
{
"type": "Feature",
"properties": {
"id": 3,
"cost": 1.0
},
"geometry": {
"type": "LineString",
"coordinates": [
[116.4094, 39.9062],
[116.4104, 39.9072]
]
}
}
]
};
// Tambahkan data GeoJSON ke peta
L.geoJSON(geojsonData, {
style: function (feature) {
return {color: "#ff0000", weight: 4}; // Garis merah tebal
}
}).addTo(map);
// Atur tampilan peta agar semua fitur kelihatan
if (L.geoJSON(geojsonData).getBounds().isValid()) {
map.fitBounds(L.geoJSON(geojsonData).getBounds());
}
</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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
Simpan file HTML di root situs ServBay Anda (misal /Applications/ServBay/www/pgrouting-demo/index.html
), lalu akses melalui ServBay (misal http://pgrouting-demo.servbay.demo
) untuk melihat peta dengan contoh rute. Ingat: ini hanya contoh statis—untuk rute nyata, gunakan GeoJSON hasil kueri pgRouting backend Anda.
Hal-hal yang Perlu Diperhatikan
- Kualitas Data: Hasil
pgRouting
sangat tergantung kualitas data jaringan yang dipakai. Pastikan data Anda akurat, lengkap, dan topologinya benar. - Performa: Pada jaringan sangat besar, perhitungan rute bisa memakan waktu lama. Gunakan indeks, sederhanakan jaringan, atau pilih algoritma yang sesuai untuk memperbaiki performa.
- Memori: Model topologi besar bisa membutuhkan memori besar juga. Pastikan server database Anda punya sumber daya yang cukup.
Tanya Jawab (FAQ)
T: Saat menjalankan CREATE EXTENSION pgrouting;
muncul error ekstensi tidak ada, apa solusinya?
J: Pertama, pastikan paket PostgreSQL Anda di ServBay sudah terpasang dan berjalan. Kedua, periksa apakah versi PostgreSQL pada database mendukung pgRouting
dan paket ServBay memang mencakup ekstensi tersebut (biasanya sudah ada). Jika masih bermasalah, cek log ServBay atau PostgreSQL untuk detil error, dan pastikan Anda login sebagai user dengan hak akses cukup (misal user servbay
).
T: Bagaimana menentukan nilai tolerance pada fungsi pgr_createTopology
?
J: Nilai tolerance mengikuti ketelitian (presisi) data Anda. Tolerance adalah jarak minimum dua vertex dianggap satu node—untuk data presisi tinggi (misal GPS), gunakan nilai kecil (misal 0.000001 atau kurang). Untuk data kurang presisi atau hasil kompilasi beragam sumber, boleh gunakan nilai lebih besar. Jika terlalu besar, bisa terjadi segmen tak terkait malah tergabung.
T: Bagaimana menangani jalan satu arah atau aturan larangan putar/berbalik?
J: Kolom cost
dan reverse_cost
di tabel ways
memang untuk hal ini. Untuk one way, isi reverse_cost
dengan NULL
atau angka sangat besar (artinya tidak bisa dilalui berlawanan arah). Larangan putar (no U-turn) umumnya memerlukan model jaringan lebih kompleks atau diproses secara pasca-routing, meski pgRouting mendukung beberapa fitur lanjut untuk kasus ini.
Kesimpulan
Dengan ServBay, membangun database PostgreSQL lokal yang mendukung pgRouting
jadi sangat mudah. Hanya dengan beberapa perintah SQL Anda dapat mengaktifkan ekstensi, mengelola data jaringan, serta membuat topologi—dan segera menggunakan analisis rute spasial yang kuat dari pgRouting
. Dipadukan dengan aplikasi GIS desktop maupun pustaka peta web, hasil analisis rute pun dapat divisualisasikan dengan mudah untuk mendukung aplikasi web atau proyek spasial Anda. ServBay menyederhanakan setup lingkungan sehingga Anda dapat lebih fokus pada logika dan fitur aplikasi.