Lewati ke isi
Profil penulisSeri Buku GIS Kehutanan dan Pertanian/ M2
Tampilkan bagian untuk:

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.
Ilustrasi 3.1: Simpul, ruas, dan biaya
Skema graf sederhana empat simpul A sampai D dengan lima ruas dan tabel ruas berisi id, source, target, dan cost

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

  1. Muat Jalan.gpkg dan Fasilitas.gpkg.
  2. Buka Processing ► Toolbox, cari Shortest path (point to point).
  3. Isi Vector layer representing network dengan Jalan. Pilih Path type to calculate: Shortest.
  4. Klik tombol titik di Start point, lalu klik di dekat Pos Jaga 1. Lakukan hal serupa untuk End point di Pos Jaga 4.
  5. 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:

SkenarioHasil
Terpendek, semua ruas (termasuk yang ditutup)2.987,7 m
Terpendek, ruas ditutup dibuang3.316,2 m
Tercepat, ruas ditutup dibuang6,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.

Ilustrasi 3.2: Rute terpendek di jaringan sintetis
Peta jaringan jalan KPH Contoh dengan rute terpendek Pos Jaga 1 ke Pos Jaga 4 digambar tebal biru dan ruas ditutup digambar merah putus-putus

#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:

KeadaanJarak
Jaringan benar3.316,2 m
Jaringan bercelah 4 m, Topology tolerance = 03.351,3 m
Jaringan bercelah 4 m, Topology tolerance = 53.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

  1. Cari Service area (from point).
  2. Pilih jaringan, strategi Shortest, dan Travel cost 500 (meter).
  3. Isi Start point di dekat Kantor KPH. Centang Include upper/lower bound points bila Anda ingin titik batasnya.
  4. 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.

  1. Aktifkan ekstensi:
sql
CREATE EXTENSION IF NOT EXISTS pgrouting;
  1. Buat tabel simpul dari ujung-ujung ruas, lalu tabel ruas yang tahu simpul awal (source) dan akhir (target):
sql
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).

  1. Cari simpul terdekat dari tiap fasilitas:
sql
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.

  1. Rute terpendek dengan algoritma Dijkstra:
sql
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.

  1. Jangkauan layanan dari Kantor KPH:
sql
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.

  1. Periksa apakah jaringan terputus:
sql
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:

UkuranQGISpgRouting
Terpendek3.296,93 m3.296,93 m
Tercepat6,373 menit6,373 menit
Persimpangan terjangkau 500 m33
Persimpangan terjangkau 1.000 m1010

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.

  1. Salin Jalan ke geodatabase, di dalam sebuah feature dataset. [CEK]
  2. Jalankan alat Create Network Dataset, pilih feature class jalan sebagai sumber, dan atur atribut biaya (panjang dan waktu). Bangun jaringan dengan Build Network. [CEK]
  3. Jalankan Make Route Analysis Layer dengan jaringan itu. Tambahkan lokasi lewat Add Locations (Pos Jaga 1 dan 4), lalu Solve. [CEK]
  4. Untuk area layanan, pakai Make Service Area Analysis Layer, isi Cutoffs dengan 500 dan 1000, lalu Add Locations dan Solve. [CEK]
  5. 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

  1. Aktifkan ekstensi Network Analyst (Customize ► Extensions), lalu tampilkan toolbar Network Analyst. [CEK]
  2. Buat network dataset dari feature class jalan di ArcCatalog (klik kanan feature dataset ► New ► Network Dataset). [CEK]
  3. Di toolbar, pilih New Route atau New Service Area, tambahkan lokasi, lalu klik Solve. [CEK]

#Cek paham

  1. Mengapa rute dari QGIS dan pgRouting bisa berbeda beberapa belas meter bila titik awalnya tidak sama?
  2. Satu ruas jalan berhenti 4 m sebelum persimpangan. Apa akibatnya pada rute, dan apa dua cara memperbaikinya?
  3. pgr_connectedComponents mengembalikan dua komponen. Apa artinya?

Jawaban:

  1. QGIS menempelkan titik ke titik jalan terdekat, sedangkan pgRouting mulai dari simpul. Selisih kecil itu adalah ruas pendek di antara keduanya.
  2. Ruas itu tidak dianggap tersambung, jadi rute memutar atau tidak ditemukan. Perbaiki dengan toleransi topologi atau dengan merapikan geometri (snap) sebelum analisis.
  3. 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

PekerjaanQGISPostGIS dan pgRoutingArcGIS ProArcMap 10.8
Rute terpendekShortest path (point to point)pgr_dijkstraMake Route Analysis Layer [CEK]New Route [CEK]
Area layananService area (from point)pgr_drivingDistanceMake Service Area Analysis Layer [CEK]New Service Area [CEK]
Bentuk jaringanlayer garis biasatabel source dan targetnetwork datasetnetwork dataset
Syarat tambahantidak adaekstensi pgRoutingekstensi Network Analystekstensi Network Analyst