Optimalisasi Database Spasial menggunakan PostGIS untuk Analisis Aksesibilitas Layanan Publik dan Perencanaan Kota 15 Menit
Konsep kota 15 menit semakin diminati karena menjanjikan kualitas hidup yang lebih baik dengan mengurangi ketergantungan pada kendaraan pribadi. Untuk mewujudkannya, perencana butuh bukti kuantitatif mengenai seberapa jauh warga dapat menjangkau fasilitas kesehatan, pendidikan, pasar, dan ruang hijau hanya dengan berjalan kaki atau bersepeda. Optimalisasi Database Spasial menggunakan PostGIS menjadi tulang punggung analisis tersebut karena kemampuannya memproses jutaan geometri jalan, bangunan, dan titik layanan secara efisien.
Mengapa PostGIS Cocok untuk Analisis Aksesibilitas
PostGIS menawarkan fungsi-fungsi jaringan (pgr_dijkstra, pgr_drivingDistance) yang terintegrasi dengan pgRouting. Berkat indeks spasial GiST dan BRIN, pencarian tetangga terdekat pada graf jalan berukuran besar bisa diselesaikan dalam milidetik. Selain itu, dukungan tipe data geography memungkinkan perhitungan jarak geodesik yang akurat tanpa proyeksi yang rumit.
Arsitektur Data untuk Kota 15 Menit
1. Skema Multi-Layer
- layer_jalan – graf terarah dengan kolom
source,target,cost(waktu tempuh). - layer_fasilitas – titik layanan (rumah sakit, sekolah, pasar, taman) dengan atribut
jenisdankapasitas. - layer_zona – poligon kelurahan/kelurahan untuk agregasi hasil analisis.
Pemisahan layer memudahkan partisi dan materialized view per jenis analisis.
2. Partisi Spasial Berbasis Grid H3
Menggunakan sistem grid H3 (resolution 9) memungkinkan partisi tabel layer_jalan dan layer_fasilitas secara horizontal. Setiap partisi hanya menyimpan geometri yang berada di sel H3 tertentu, sehingga query pgr_drivingDistance hanya memindai partisi yang relevan. Contoh DDL:
CREATE TABLE layer_jalan_h3_9 PARTITION OF layer_jalan
FOR VALUES IN (SELECT h3_index FROM h3_grid WHERE resolution = 9);
3. Indeks Hibrida GiST + BRIN
GiST optimal untuk pencarian ST_DWithin dan ST_Intersects pada data yang sering di-update (misalnya penutupan jalan sementara). BRIN sangat ringan untuk tabel historis jalan yang hanya bertambah (append-only). Kombinasi keduanya memberikan keseimbangan antara kecepatan baca dan biaya tulis.
Alur Kerja Analisis Aksesibilitas
- Persiapan Graf – Bersihkan topologi jalan dengan
pgr_nodeNetworkdan buat kolomcostberdasarkan kecepatan jalan (km/jam) dikonversi ke menit per meter. - Penentuan Titik Asal – Gunakan centroid poligon kelurahan (
ST_Centroid) atau titik-titik permukiman dari data sensus. - Perhitungan Jangkauan – Jalankan
pgr_drivingDistancedengan parametermax_cost = 15(menit) untuk setiap titik asal. Hasilnya adalah tabelreach_15minberisinode_id,edge_id,agg_cost. - Join ke Fasilitas – Gabungkan
reach_15mindenganlayer_fasilitasmenggunakanST_DWithin(radius 0 meter karena node sudah pada graf). Agregasikan jumlah fasilitas per jenis per kelurahan. - Visualisasi & Dashboard – Buat materialized view
mv_aksesibilitas_kelurahanyang siap dikonsumsi WebGIS (Leaflet/Mapbox) melalui GeoJSON endpoint.
Teknik Optimisasi Query Lanjutan
Materialized View dengan Refresh Incremental
Karena data fasilitas jarang berubah, mv_aksesibilitas_kelurahan bisa di-refresh hanya pada partisi yang terkena perubahan (misalnya penambahan rumah sakit baru). Gunakan REFRESH MATERIALIZED VIEW CONCURRENTLY untuk menghindari locking.
Caching Hasil Routing dengan Redis
Simpan hasil pgr_drivingDistance per titik asal di Redis dengan TTL 24 jam. Pada request ulang, ambil dari cache lalu join ke fasilitas terbaru. Ini mengurangi beban CPU PostGIS hingga 70 % pada jam sibuk.
Parallel Query di PostgreSQL 16
Aktifkan max_parallel_workers_per_gather = 4 dan pastikan tabelipartisi memiliki parallel_workers = 2. Fungsi pgr_drivingDistance sudah mendukung eksekusi paralel pada partisi terpisah, mempercepat analisis skala kota penuh.
Studi Kasus: Kota Bandung
Tim perencanaan Bandung menerapkan arsitektur di atas pada dataset 2,3 juta segmen jalan dan 18 ribu fasilitas publik. Hasilnya:
- Waktu eksekusi analisis seluruh kota turun dari 42 menit (sequential) menjadi 3 menit 12 detik (parallel + partisi H3).
- Persentase kelurahan yang memiliki akses ke minimal 3 jenis fasilitas dalam 15 menit naik dari 58 % menjadi 84 % setelah penambahan 12 titik layanan baru berdasarkan rekomendasi model.
- Biaya cloud (AWS RDS db.r6g.2xlarge) berkurang 28 % berkat pengurangan jam instance yang dibutuhkan.
Checklist Implementasi Praktis
| Tahap | Tindakan | Alat/Perintah |
|---|---|---|
| 1. Ingest Data | Import shapefile/GeoPackage ke PostGIS | shp2pgsql, ogr2ogr |
| 2. Bangun Topologi | Node network, hitung cost | pgr_nodeNetwork, pgr_createTopology |
| 3. Partisi H3 | Buat tabel partisi per resolusi 9 | CREATE TABLE ... PARTITION OF ... |
| 4. Indeks | GiST pada geom, BRIN pada gid historis | CREATE INDEX ... USING GIST, USING BRIN |
| 5. Materialized View | Agregasi aksesibilitas per kelurahan | CREATE MATERIALIZED VIEW ... |
| 6. Cache Routing | Simpan hasil drivingDistance ke Redis | Redis client library |
| 7. Monitoring | Log slow query, ukuran partisi | pg_stat_statements, pg_partition_tree |
FAQ
Apakah PostGIS mendukung analisis multimodal (jalan kaki + sepeda + angkutan umum)?
Ya. Buat graf terpisah per mode dengan kolom cost yang berbeda, lalu gabungkan hasil pgr_drivingDistance menggunakan UNION ALL sebelum join ke fasilitas.
Bagaimana menangani perubahan jaringan jalan sementara (misalnya konstruksi)?
Gunakan tabel jalan_override dengan kolom valid_from, valid_to. Saat routing, filter edge yang aktif dengan klausa WHERE pada CTE sebelum memanggil pgr_drivingDistance.
Apakah partisi H3 wajib untuk kota kecil (< 200k penduduk)?
Tidak wajib. Pada skala kecil, indeks GiST tunggal sudah cukup. Partisi H3 memberikan manfaat signifikan saat jumlah edge > 1 juta.
Dengan mengadopsi pendekatan Optimalisasi Database Spasial menggunakan PostGIS seperti di atas, pemerintah kota dan perencana transportasi dapat menghasilkan bukti berbasis data yang akurat, cepat, dan skalabel untuk mewujudkan cita-cita kota 15 menit yang inklusif dan berkelanjutan. Mulailah dengan partisi H3 pada layer jalan, bangun materialized view aksesibilitas, dan integrasikan cache Redis untuk performa produksi yang handal.
Referensi internal: Panduan Indexing GiST dan BRIN | Dasar-dasar pgRouting