Bentuk Kota
Atlas yang mengukur 33 lingkungan Indonesia dua kali, dengan mobil dan jalan kaki, untuk memperlihatkan celah metrik mobil

- lokasi, diukur dengan mobil dan jalan kaki
- 33
- lokasi ditandai karena cakupan gang tipis
- 9
- calon lokasi ditolak, disertai alasannya
- 22
- panggilan jaringan saat runtime
- 0
Di halaman ini
Masalahnya
Peneliti yang membandingkan pola jalan kota umumnya memakai satu ukuran: entropi orientasi dari makalah Geoff Boeing tahun 2019. Ukuran ini dihitung dari jaringan jalan untuk kendaraan. Di Indonesia, cara itu melewatkan sebagian besar cara orang bergerak. Kampung dijalin gang, lorong sempit untuk pejalan kaki yang tidak pernah muncul di peta mobil. Perumahan berpagar mudah dimasuki mobil, tetapi pintunya cuma satu atau dua dan jalan buntunya di mana-mana. Kalau diukur dengan mobil saja, keduanya keluar salah, dengan arah yang berlawanan.
Saya membuat Bentuk Kota untuk perencana kota, pemeta OpenStreetMap, dan pembaca yang penasaran dengan kota-kota Indonesia. Aplikasi ini mengukur lingkaran yang sama di lingkungan yang sama dua kali: sekali sebagai jaringan kendaraan, sekali sebagai jaringan pejalan kaki. Keduanya lalu disandingkan. Selisih di antara keduanya itulah temuannya.
Kampung dan perumahan membawa nuansa kelas sosial di Indonesia. Karena itu saya menetapkan satu aturan untuk seluruh produk: aplikasi ini menggambarkan, tidak pernah menilai. Tidak ada peringkat, nilai kelayakan jalan kaki, atau indeks layak huni di mana pun.
Yang saya bangun
Matematika jalannya saya tulis sendiri
Pengukurannya adalah inti proyek ini, jadi saya tidak memakai pustaka graf, grafik, atau peta. Membangun jaringan, membaca arah jalan, dan menghitung entropi, rasio jalan memutar, serta jumlah simpang semuanya kode saya sendiri. Saya menulisnya langsung dari makalahnya, lengkap dengan rujukan bagiannya. Kode pengukurnya hanya menerima angka dan mengembalikan angka, sehingga kode yang sama jalan di pipeline data dan di tes.
Tes memakai jalan yang jawabannya sudah diketahui
Tidak ada yang tahu entropi Bendungan Hilir yang sebenarnya, jadi tesnya tidak berpura-pura tahu. Tes membangun jaringan yang jawabannya sudah pasti: kisi sempurna, kisi yang sama diputar 29°, jaringan acak, dan pohon murni. Lalu tes memastikan angka hasil ukurnya kembali benar. Setiap grafik, buatan maupun nyata, juga harus lolos cek matematika dasar, misalnya tetap sama saat diputar 180°.
Asumsi terbesar jadi sakelar yang bisa diubah pembaca
Tag OpenStreetMap mana yang dihitung sebagai jalan kendaraan atau jalan kaki mengubah setiap angka di situs. Saya menaruh pilihan itu di satu tempat yang terdokumentasi dan menampilkannya di halaman asumsi, sebagai sakelar antara tiga pemetaan. Pembaca bisa melihat seberapa besar setiap kesimpulan bergantung padanya.
Lokasi dipilih dengan mengukur cakupan peta
Rencana awal saya adalah daftar pilihan tangan. Dua putaran tebakan hanya menghasilkan 10 lokasi yang layak dari 49 tebakan, dan yang gagal pun tidak membuktikan apa-apa. Jadi saya menulis penyisir untuk 56 kota yang mengurutkan calon area berdasarkan seberapa banyak jalan setapak yang benar tercatat di peta. Penyisir ini menemukan 14 dari 33 lokasi akhir, termasuk lokasi pertama di Papua, Lombok, dan Kalimantan.
Aturan untuk cakupan yang menyesatkan
Jalan setapak di peta tidak bisa membedakan gang dari jalur taman. Calon terbaik di Bogor, dengan cakupan 40,9%, ternyata kebun raya. Calon terbaik di Jakarta 78% berada di dalam satu taman. Pelajaran itu saya jadikan aturan. Saya juga menambah cek bahwa hasil survei harus menebak hasil pipeline dengan selisih paling banyak satu poin persen. Cek ini menangkap dua lokasi yang dimasukkan dengan koordinat lama.
Hasilnya
Bentuk Kota sudah live dan terbuka untuk umum, dalam bahasa Indonesia dan Inggris. Situs ini memuat 33 lokasi, masing-masing diukur sebagai dua jaringan dengan tiga pemetaan tag, dipilih dari 126 calon titik yang disurvei di 56 kota; 22 dari calon itu ditolak dan tetap dipublikasikan, lengkap dengan alasannya, bukan dihapus. Setiap lokasi menunjukkan seberapa lengkap gangnya terpetakan, dan 9 dari 33 lokasi ditandai karena cakupannya tipis, supaya data peta yang hilang tidak memalsukan temuan.
Batasan itu ikut menyentuh perbandingan utamanya. Semua calon perumahan berpagar datanya tipis, dengan cakupan 0,9–4,4%, sehingga perbandingan kampung dan perumahan bertumpu pada dua dari tiga lokasi perumahan yang terbaca. Halamannya menyebut angka itu. Situs tidak memanggil jaringan sama sekali setelah dimuat. Saya membangun versi pertamanya dalam delapan hari pada Agustus 2026, lalu terus mengerjakannya sampai akhir September.
Di balik layarDetail teknis untuk engineer
- Metode: entropi orientasi Boeing (2019) pada histogram arah 36 bin ("mawar"), indikator keteraturan orientasi φ, sampel circuity, statistik derajat simpul, dan cakupan footway. Penerapan ganda kendaraan/jalan kaki adalah gagasan saya.
- Inti pengukuran di
lib/morphology/(1.029 baris) berupa TypeScript murni: tanpa DOM, tanpa React, tanpa jam, tanpa jaringan. - Tes sintetis: kisi sempurna, kisi diputar 29°, graf acak, pohon murni. Invarian dicek di setiap histogram: simetri 180°, circuity ≥ 1, proporsi derajat berjumlah 1.
- Pemetaan tag OSM ada di satu modul dengan 3 pilihan yang bisa diganti; sensitivitasnya dilaporkan di
/asumsi. Metode, batasan, dan atribusi ODbL ada di/metode. - Aturan cakupan: porsi taman di atas 25% tidak dihitung sebagai kawasan kota;
landuse=grassdiambil lalu diabaikan karena pemeta memakainya untuk jalur hijau di tepi jalan. - Data diambil lewat kueri Overpass yang terarah saat build, di-cache dan diberi jeda. PRD awalnya memakai PBF Geofabrik Indonesia (~1 GB); 33 lingkaran berjari-jari satu kilometer hanya beberapa megabyte, dan membaca PBF berarti menambah dependensi protobuf untuk data yang dipakai sekali.
- Static export Next.js 14 di GitHub Pages. Empat dependensi runtime (Next.js, React, React DOM, Zod). Kartu, pengurutan, mode kepadatan, dan sorotan antarkartu dirender di server sebagai HTML dan CSS dengan state di URL; satu-satunya komponen klien adalah helper kecil untuk navigasi.
- Halaman lempeng berukuran ~4,7 MB HTML, ~59% di antaranya flight payload App Router. Tanda penggaris dipangkas dari 165 menjadi 66 byte; sisanya adalah tabel data tersembunyi untuk pembaca layar.
- Rasio kontras dan skala huruf dihitung ulang oleh unit test dari nilai hex-nya (
palette.test.ts,type-scale.test.ts). Satu tes khusus menjaga agar penggaris distribusi tidak terbaca sebagai peringkat. - 585 tes di 16 file. Suite sintetis, invarian, dan validasi data, ditambah audit aksesibilitas, menjadi gerbang setiap deploy.
- Dwibahasa (id/en), bisa dipasang sebagai PWA, semua milestone M0–M6 selesai.
- Sekitar 13.840 baris TypeScript, 101 commit antara 20 Agustus dan 27 September 2026.
Tangkapan layar
Sedang merekrut, atau membangun hal serupa?
Saya terbuka untuk posisi full-time dan proyek freelance tertentu.