BAB 3: Jalan Tercepat dan Jangkauan Layanan: Analisis Jaringan
#Studi kasus: "Berapa menit dari pos ke lokasi kejadian?"
Ada laporan tebangan liar di sisi timur wilayah. Kepala Seksi ingin tahu rute terbaik dari Pos Jaga 1 ke Pos Jaga 4 dan berapa lama perjalanannya. Ia juga bertanya, "Dari kantor, bagian mana yang bisa dicapai dalam jarak 500 meter dan 1 kilometer lewat jalan?" Garis lurus di peta tidak menjawabnya, karena kendaraan harus mengikuti jalan. Satu ruas jalan juga sedang ditutup.
#Konsep: jaringan dalam tiga kalimat
Analisis jaringan menghitung perjalanan menyusuri jalan, bukan melintas bebas. Bayangkan peta bus: titik-titik pemberhentian dihubungkan garis, dan tiap garis punya "ongkos" berupa jarak atau waktu. Komputer mencari jalur dengan ongkos total paling kecil.
Istilah baru:
- Jaringan (graf): kumpulan simpul dan ruas.
- Simpul: persimpangan atau ujung jalan.
- Ruas: potongan jalan di antara dua simpul.
- Biaya (cost): ongkos melewati ruas, bisa panjang (meter) atau waktu (detik).
- Area layanan: bagian jaringan yang bisa dicapai dari satu titik dengan biaya tertentu.

Syarat utama: ruas harus bersambung di simpul. Jalan yang berhenti 4 m sebelum persimpangan, bagi komputer, tidak tersambung.
#Bagian A: QGIS
#Bagian A: Jaringan di QGIS dan PostGIS
#A1. Rute terpendek dan tercepat di QGIS
- Muat
Jalan.gpkgdanFasilitas.gpkg. - Buka Processing ► Toolbox, cari Shortest path (point to point).
- Isi Vector layer representing network dengan
Jalan. Pilih Path type to calculate: Shortest. - Klik tombol titik di Start point, lalu klik di dekat Pos Jaga 1. Lakukan hal serupa untuk End point di Pos Jaga 4.
- Klik Run. Satu garis rute muncul. Catat nilai Travel cost di log.
Untuk waktu tempuh, ubah Path type menjadi Fastest, lalu isi Speed field dengan kecepatan_kmj. Biaya yang keluar dalam jam, jadi kalikan 60 untuk menit.
Alat yang sama dipanggil lewat skrip m2_03a_rute_qgis.py (native:shortestpathpointtopoint). Hasil uji:
| Skenario | Hasil |
|---|---|
| Terpendek, semua ruas (termasuk yang ditutup) | 2.987,7 m |
| Terpendek, ruas ditutup dibuang | 3.316,2 m |
| Tercepat, ruas ditutup dibuang | 6,4 menit |
Satu ruas yang ditutup menambah jarak sekitar 330 m. Cara membuangnya: sebelum memuat layer, beri filter status <> 'ditutup' (klik kanan layer ► Filter). Lewat skrip, tambahkan |subset=status<>'ditutup' di jalur layer.

#A2. Celah kecil, dampak besar
Muat Jalan_celah.gpkg. Satu ruas di dalamnya berhenti 4 m sebelum simpul. Ulangi rute terpendek (ruas ditutup dibuang). Hasil uji:
| Keadaan | Jarak |
|---|---|
| Jaringan benar | 3.316,2 m |
| Jaringan bercelah 4 m, Topology tolerance = 0 | 3.351,3 m |
| Jaringan bercelah 4 m, Topology tolerance = 5 | 3.316,2 m |
Dengan toleransi 0, rute memutar karena ruas itu tak tersambung (selisih 35,1 m). Topology tolerance (toleransi topologi) menganggap ujung yang berjarak hingga 5 satuan peta sebagai satu simpul. Satuan di sini meter, karena layernya UTM. Cara lain: rapikan datanya dengan Snap geometries to layer sebelum analisis.
#A3. Area layanan di QGIS
- Cari Service area (from point).
- Pilih jaringan, strategi Shortest, dan Travel cost 500 (meter).
- Isi Start point di dekat Kantor KPH. Centang Include upper/lower bound points bila Anda ingin titik batasnya.
- Klik Run. Anda mendapat garis jalan yang terjangkau.
Catatan hasil uji: garis keluaran berupa potongan jalan antar-titik-belok yang ujung awalnya terjangkau. Potongan terakhir bisa sedikit melewati batas. Jangan menghitung panjang jalan terjangkau dari garis itu begitu saja. Untuk batas yang tepat, pakai titik batas (bound points) atau pgRouting di bawah. [kemungkinan: kesimpulan dari pengamatan keluaran penulis]
#A4. Jaringan di PostGIS dengan pgRouting
pgRouting adalah ekstensi PostgreSQL untuk analisis jaringan. Skrip m2_03b_pgrouting.sql mengerjakan semuanya.
- Aktifkan ekstensi:
CREATE EXTENSION IF NOT EXISTS pgrouting;- Buat tabel simpul dari ujung-ujung ruas, lalu tabel ruas yang tahu simpul awal (
source) dan akhir (target):
CREATE TABLE kph.jalan_simpul AS
SELECT ROW_NUMBER() OVER (ORDER BY ST_X(g), ST_Y(g))::int AS id, g AS geom
FROM (SELECT DISTINCT ST_StartPoint(ST_GeometryN(geom, 1)) AS g FROM kph.jalan
UNION
SELECT DISTINCT ST_EndPoint(ST_GeometryN(geom, 1)) FROM kph.jalan) AS t;
CREATE TABLE kph.jalan_ruas AS
SELECT j.gid AS id, a.id AS source, b.id AS target,
ST_Length(j.geom) AS panjang_m,
ST_Length(j.geom) / (j.kecepatan_kmj * 1000.0 / 3600.0) AS waktu_dtk,
j.status, j.geom
FROM kph.jalan j
JOIN kph.jalan_simpul a ON ST_Equals(a.geom, ST_StartPoint(ST_GeometryN(j.geom, 1)))
JOIN kph.jalan_simpul b ON ST_Equals(b.geom, ST_EndPoint(ST_GeometryN(j.geom, 1)));Hasil uji: 37 ruas dan 25 simpul. Cara ini cocok bila ujung ruas persis sama. Untuk data yang ujungnya hampir sama, bersihkan dulu (Bagian A2).
- Cari simpul terdekat dari tiap fasilitas:
SELECT f.nama, (SELECT s.id FROM kph.jalan_simpul s ORDER BY s.geom <-> f.geom LIMIT 1) AS simpul_id
FROM kph.fasilitas f ORDER BY f.nama;Hasil uji: Kantor KPH simpul 11, Pos Jaga 1 simpul 5, Pos Jaga 4 simpul 24.
- Rute terpendek dengan algoritma Dijkstra:
SELECT MAX(agg_cost) AS panjang_m, COUNT(*) FILTER (WHERE edge > 0) AS jumlah_ruas
FROM pgr_dijkstra(
'SELECT id, source, target, panjang_m AS cost FROM kph.jalan_ruas WHERE status <> ''ditutup''',
5, 24, false);Argumen false berarti jaringan tak berarah (jalan dua arah). Hasil uji: 3.296,9 m lewat 7 ruas. Tanpa membuang ruas ditutup: 2.976,2 m lewat 6 ruas. Tercepat (kolom waktu_dtk sebagai biaya): 6,37 menit.
- Jangkauan layanan dari Kantor KPH:
SELECT COUNT(*) FROM pgr_drivingDistance(
'SELECT id, source, target, panjang_m AS cost FROM kph.jalan_ruas WHERE status <> ''ditutup''',
11, 500::float, false);Hasil uji: 3 simpul terjangkau dalam 500 m dan 10 simpul dalam 1.000 m.
- Periksa apakah jaringan terputus:
SELECT component, COUNT(*) FROM pgr_connectedComponents(
'SELECT id, source, target, panjang_m AS cost FROM kph.jalan_ruas')
GROUP BY component;Hasil uji: satu komponen berisi 25 simpul. Artinya semua simpul saling terhubung. Bila ada dua komponen atau lebih, ada jalan yang terputus.
#A5. Apakah QGIS dan pgRouting sepakat?
Titik awal di QGIS berasal dari fasilitas yang berjarak sekitar 25 m dari jalan, sehingga angkanya sedikit berbeda dari pgRouting (yang mulai dari simpul). Agar adil, skrip m2_03c_silang_jaringan.py memberi kedua alat titik yang sama persis (simpul 5 dan 24). Hasil uji:
| Ukuran | QGIS | pgRouting |
|---|---|---|
| Terpendek | 3.296,93 m | 3.296,93 m |
| Tercepat | 6,373 menit | 6,373 menit |
| Persimpangan terjangkau 500 m | 3 | 3 |
| Persimpangan terjangkau 1.000 m | 10 | 10 |
Hasilnya sama. Dua alat berbeda yang sepakat memberi rasa aman bahwa jaringan dan biayanya dibaca dengan benar.
#Bagian B: ArcGIS Pro
#Bagian B: ArcGIS Pro
Analisis jaringan di Pro memerlukan kumpulan data jaringan (network dataset) dan ekstensi Network Analyst. Dokumentasi Esri menyebut alat Make Route Analysis Layer dan Make Service Area Analysis Layer untuk membuat lapisan analisis. Pada alat yang kedua, parameter pentingnya adalah sumber data jaringan, Travel Mode, Travel Direction, dan Cutoffs. Penulis membaca ini dari dokumentasi, belum menjalankannya.
- Salin
Jalanke geodatabase, di dalam sebuah feature dataset. [CEK] - Jalankan alat Create Network Dataset, pilih feature class jalan sebagai sumber, dan atur atribut biaya (panjang dan waktu). Bangun jaringan dengan Build Network. [CEK]
- Jalankan Make Route Analysis Layer dengan jaringan itu. Tambahkan lokasi lewat Add Locations (Pos Jaga 1 dan 4), lalu Solve. [CEK]
- Untuk area layanan, pakai Make Service Area Analysis Layer, isi Cutoffs dengan 500 dan 1000, lalu Add Locations dan Solve. [CEK]
- Ruas ditutup dimasukkan sebagai barrier atau lewat pembatas (restriction) pada atribut jaringan. [CEK]
Pro tidak membaca tabel kph.jalan_ruas dari pgRouting sebagai jaringan. Tidak ada padanan langsung; analisis jaringan Pro bergantung pada network dataset.
#Bagian C: ArcMap 10.8
#Bagian C: ArcMap 10.8
- Aktifkan ekstensi Network Analyst (Customize ► Extensions), lalu tampilkan toolbar Network Analyst. [CEK]
- Buat network dataset dari feature class jalan di ArcCatalog (klik kanan feature dataset ► New ► Network Dataset). [CEK]
- Di toolbar, pilih New Route atau New Service Area, tambahkan lokasi, lalu klik Solve. [CEK]
#Cek paham
- Mengapa rute dari QGIS dan pgRouting bisa berbeda beberapa belas meter bila titik awalnya tidak sama?
- Satu ruas jalan berhenti 4 m sebelum persimpangan. Apa akibatnya pada rute, dan apa dua cara memperbaikinya?
pgr_connectedComponentsmengembalikan dua komponen. Apa artinya?
Jawaban:
- QGIS menempelkan titik ke titik jalan terdekat, sedangkan pgRouting mulai dari simpul. Selisih kecil itu adalah ruas pendek di antara keduanya.
- Ruas itu tidak dianggap tersambung, jadi rute memutar atau tidak ditemukan. Perbaiki dengan toleransi topologi atau dengan merapikan geometri (snap) sebelum analisis.
- Jaringan terbagi dua bagian yang tidak saling terhubung. Ada jalan yang terputus atau data yang salah.
#Kesalahan umum
- Mengira jalan yang tampak bersambung pasti tersambung. Periksa dengan komponen terhubung atau coba rute di dua sisi celah.
- Lupa membuang ruas yang ditutup. Rute melewati jalan yang tak bisa dipakai.
- Menjumlahkan panjang garis area layanan QGIS sebagai jarak terjangkau. Potongan terakhir dihitung utuh. Pakai titik batas.
- Mengira biaya "Fastest" QGIS dalam menit. Satuannya jam.
#Ringkasan dan latihan
Ringkasan: jaringan = simpul + ruas + biaya. Rute terpendek mencari biaya total terkecil. Area layanan mencari semua yang terjangkau dalam batas biaya. Syaratnya ruas bersambung di simpul.
Latihan: hitung rute terpendek dari Kantor KPH ke Pos Jaga 2 dan ke TPK, dengan dan tanpa ruas ditutup. Bandingkan hasil QGIS dan pgRouting memakai simpul yang sama.
#Tabel perbandingan: analisis jaringan
| Pekerjaan | QGIS | PostGIS dan pgRouting | ArcGIS Pro | ArcMap 10.8 |
|---|---|---|---|---|
| Rute terpendek | Shortest path (point to point) | pgr_dijkstra | Make Route Analysis Layer [CEK] | New Route [CEK] |
| Area layanan | Service area (from point) | pgr_drivingDistance | Make Service Area Analysis Layer [CEK] | New Service Area [CEK] |
| Bentuk jaringan | layer garis biasa | tabel source dan target | network dataset | network dataset |
| Syarat tambahan | tidak ada | ekstensi pgRouting | ekstensi Network Analyst | ekstensi Network Analyst |