Pertanyaan yang Memakan Sehari di GIS
Seorang perencana kota ditanya apakah sebuah kecamatan benar-benar "kota 15 menit": bisakah warga berjalan kaki ke rumah sakit, sekolah, taman, dan pasar dalam seperempat jam? Pemerintah kota mendengar bahwa jembatan di jalan nasional akan ditutup enam bulan, lalu harus menjawab seberapa lama perjalanan ke ibu kota kabupaten jadinya, dan siapa yang kehilangan jalan ke rumah sakit terdekat. Tim properti ingin menulis "walkable" di sebuah iklan dan bisa mempertanggungjawabkannya. Tim ketahanan bencana bertanya lingkungan mana yang terputus dari layanan kesehatan saat satu-satunya jembatan atau jalan mereka terendam.
Semuanya pertanyaan yang sama jenisnya, tentang waktu tempuh berjalan kaki atau berkendara di jaringan jalan, dan dalam praktiknya dijawab dengan tangan. Seseorang mengunduh jaringan jalan dan titik minat (POI) dari OpenStreetMap (OSM), membersihkan grafnya, menempelkan setiap rumah sakit dan taman ke simpul jalan terdekat, menghitung rute terpendek dari masing-masing, mengubah hasilnya jadi area, mengulanginya untuk tiap kategori dan untuk lingkungan kedua, lalu mengulang semuanya begitu ada yang bertanya "bagaimana kalau jembatannya ditutup?". Di GIS desktop, itu berjam-jam sampai berhari-hari per pertanyaan, dan jawabannya tersimpan di berkas proyek yang tak bisa dijalankan ulang orang lain. Kesalahannya senyap: jalan satu arah dihitung dua arah, taman dijangkau dari titik tengahnya menembus pagar, lingkaran digambar di peta padahal jaringan jalan berkata lain.
Semua ini tidak butuh computer vision atau model yang dilatih. OSM sudah berupa data vektor, jaringan jalan adalah graf, dan algoritma yang tepat adalah rute terpendek dari tujuan. Yang belum ada sama dengan yang belum ada di open-satellite-analysis dan pid-parser: perekat antara "ini petanya" dan "sekian persen area ini, sekian orang, dan inilah yang tidak bisa dikatakan angka itu". Saya membuat open-urban-analysis sebagai skill yang bisa dipakai agen: skrip kecil yang melakukan pengukuran, dan instruksi yang memberi tahu agen cara memakainya. Beri alamat atau koordinat dan sebuah pertanyaan, dan hasilnya angka, peta, dan gambar, beserta batasan yang berlaku. Saya mengujinya pada lima pertanyaan tentang tempat di Jakarta, Tangerang Selatan, dan Tulungagung.
Kode: github.com/dzakybd/open-urban-analysis (MIT) · Demo: huggingface.co/spaces/dzakybd/open-urban-analysis
TL;DR
- Apa itu: skill yang dipasang ke agen agar bisa menjawab pertanyaan tentang sebuah kota dari data OpenStreetMap gratis. Dua versi, seperti skill lainnya: untuk coding agent (
npx skills add dzakybd/open-urban-analysis) dan versi LangChain Deep Agents.- Caranya: enam skrip kecil: menentukan tempat, statistik jaringan jalan, akses berjalan kaki atau berkendara ke rumah sakit, sekolah, taman, pasar, dan transit, cakupan POI, perbandingan walkability berdampingan, dan penutupan jalan atau jembatan. Rute dihitung NetworkX di graf jalan OSM; OSMnx, GeoPandas, dan momepy mengerjakan sisanya. Tanpa akun, tanpa API key, tanpa pelatihan model, jadi setiap angka bisa dijalankan ulang.
- Data yang bisa diulang: run yang dipublikasikan membaca ekstrak Geofabrik bertanggal untuk Jawa (27 Oktober 2026) lewat
osmium, bukan Overpass API langsung.- Seberapa baik: hanya penutupan jembatan yang punya sumber independen (jalur pengalihan yang diumumkan), dan model mereproduksi arahnya tetapi bukan panjangnya. Empat kasus lain adalah apa yang dicatat OSM sendiri, dan tiap bagian menyebut di mana pengecekan tidak ada.
- Kelemahannya: fasilitas yang belum dipetakan terlihat seperti tidak ada, OSM tidak punya kualitas trotoar, keteduhan, atau keamanan, dan tidak ada skor walkability tunggal, dengan sengaja.

Berguna untuk Apa
Apa saja yang diawali "seberapa jauh, berjalan kaki atau lewat jalan, dari sini ke sana, untuk semua orang di area ini?":
| Siapa yang bertanya | Pertanyaannya | Skrip |
|---|---|---|
| Perencana kota | Apakah kecamatan ini kota 15 menit? Layanan mana yang jadi celah? | accessibility.py |
| Pemerintah kota dan kabupaten | Apa dampak penutupan jembatan pada perjalanan, dan siapa yang kehilangan akses ke rumah sakit? | closure.py |
| Properti | Apakah lingkungan ini ramah pejalan kaki, dan dibandingkan dengan apa? | walkability.py |
| Operator transportasi | Di mana gurun transit? | accessibility.py |
| Kesehatan publik dan ketahanan bencana | Siapa yang tinggal di luar jangkauan jalan kaki ke taman atau klinik, atau kehilangan jalan ke sana? | accessibility.py --population, closure.py |
Cara Kerjanya, Langkah demi Langkah
Skill ini sebuah folder: SKILL.md berisi instruksi, dan skrip mandiri yang dijalankan dengan uv run serta memasang dependensinya sendiri. Agen membaca instruksi, memilih skrip, menjalankannya, dan membaca keluarannya. Agen hanya mengorkestrasi; setiap rute, jarak, dan metrik berasal dari skrip, jadi hasilnya bisa diulang.
| Langkah | Skrip | Keluaran |
|---|---|---|
| 1. Tentukan tempat | locate.py (Nominatim, atau --lat/--lng) | aoi.json, sebuah lingkaran di sekitar titik |
| 2. Jaringan jalan | network_stats.py | panjang dan kepadatan jalan, kepadatan persimpangan, jalan buntu, circuity, meshedness, gamma |
| 3. Akses berjalan kaki (atau berkendara) | accessibility.py | persentase area dalam 5, 10, dan 15 menit per kategori, isokron, populasi GHSL opsional |
| 4. Cakupan POI | poi_coverage.py | jumlah dan kepadatan per km², jangkauan jaringan dibanding garis lurus |
| 5. Bandingkan tempat | walkability.py | sepuluh metrik berdampingan pada lingkaran sama besar, tanpa skor |
| 6. Simulasi penutupan | closure.py | jalur memutar untuk perjalanan acak dan bernama, pengecekan --landmark terhadap pengalihan yang diumumkan, sel yang kehilangan akses |
| 7. Bagikan hasil | semua skrip | metrics.json, map.html (Folium), figure.png (matplotlib) |
npx skills add dzakybd/open-urban-analysis
uv run locate.py --lat -6.2345 --lng 106.8560 --radius-m 1500 --name "Tebet, Jakarta Selatan" --out work/aoi.json
uv run accessibility.py work/aoi.json --categories hospital,school,park,market --minutes 15 --population --out work/accessApa tambahannya dibanding kueri OSMnx biasa
OSMnx sudah mengunduh graf dan POI. Skill ini mencakup langkah-langkah di sekitarnya, tempat agen dan manusia sering keliru:
- Jarak jaringan, bukan lingkaran garis lurus. Lingkaran 1.200 m di sekitar stasiun kereta dekat Tebet mengklaim 90,9% area; menyusuri jalan hanya 48,2%, karena sungai, koridor rel, dan jalan tol adalah penghalang (
poi_coverage.py). - Jalan satu arah dihitung dengan arah yang benar. Akses menjalankan Dijkstra pada graf terbalik, sehingga waktunya adalah waktu menuju tujuan. Kalau tidak, segmen satu arah memalsukan simetri.
- POI dimasuki dari garis luarnya. Taman atau kompleks rumah sakit dijangkau dari titik-titik tiap 100 m di sepanjang batasnya, bukan dari titik tengah menembus pagar. POI sampai 1.500 m di luar lingkaran ikut dihitung, supaya tepi area tidak dirugikan.
- Grid, dengan sel di luar jaringan dikeluarkan. Area dibagi grid 100 m; sel yang lebih dari 200 m dari jalan mana pun (air, emplasemen rel) dibuang dan dilaporkan, bukan diam-diam dihitung sebagai tak terjangkau.
- Berjalan kaki 80 m per menit (4,8 km/jam), kecepatan perencanaan yang lazim untuk kota 15 menit. Berkendara memakai kecepatan arus bebas asumsi menurut kelas jalan bila
maxspeedtidak ditandai (trunk 45, primary 35, secondary 30, tertiary 25, residential 20 km/jam), dinyatakan sebagai asumsi untuk mengurutkan rute, bukan lalu lintas terukur. - Dibobot menurut siapa yang tinggal di sana, jika perlu.
--populationmenambahkan grid GHSL GHS-POP 100 m ke setiap angka cakupan, jadi "35,2% penduduk" tidak sama dengan "34,6% sel". - Unduhan yang bisa diulang. Atur
OUA_PBFke ekstrak Geofabrik bertanggal dan graf serta POI dipotong darinya denganosmium. Overpass API langsung adalah layanan relawan bersama yang sering penuh dan berubah tiap hari; skrip menunggu dan berganti mirror, tetapi run yang dipublikasikan menghindarinya sama sekali. - Tanpa skor walkability. Satu angka menyembunyikan asumsi mana yang menentukan peringkat.

Pengaturan Eksperimen
Semua yang di bawah berasal dari cases.sh, yang menjalankan ulang kelima kasus dari awal:
| Data | OSM, java-latest.osm.pbf per 27 Oktober 2026 (Geofabrik), dipotong dengan osmium; Nominatim hanya untuk mencari tempat |
| Area | lingkaran sama besar per pertanyaan: 1,5 km (7,07 km²) untuk Tebet, Menteng, BSD City, dan Tambora, 2 km (12,57 km²) untuk pasangan transit, 8 km untuk jaringan jalan Gondang |
| Berjalan kaki | 4,8 km/jam di trotoar, jalan setapak, dan jalan; batas 15 menit (10 untuk transit, taman, dan walkability) |
| Berkendara | arus bebas, kecepatan menurut kelas jalan; tanpa kemacetan |
| Populasi | GHSL GHS-POP R2023A, 100 m, epoch 2020 (model, bukan sensus) |
| Pengecekan | sumber terbit bila ada; selain itu backend OSM kedua atau run sensitivitas |
Hasil Sekilas
| Pertanyaan | Tempat | Hasil | Dicek dengan |
|---|---|---|---|
| Siapa yang berada dalam jarak jalan kaki 15 menit dari rumah sakit, sekolah, taman, dan pasar? | Tebet, Jakarta Selatan | 65,4% area menjangkau keempatnya; 44.245 penduduk (35,2%) tak menjangkau minimal satu; rumah sakit jadi celahnya (70,8%) | backend OSM lain (±4 poin); tanpa daftar fasilitas resmi |
| Bagaimana kalau jembatan ditutup? | Jembatan Gondang I, Tulungagung–Trenggalek | mobil: 20,5% perjalanan lebih lambat, median +3,6 menit; bus di jalan berklasifikasi: median +8,6 menit, terburuk +37,2 menit | pengalihan yang diumumkan (berita): arah cocok, panjang tidak |
| Lingkungan mana yang lebih ramah pejalan kaki? | Menteng vs BSD City | 4,35 vs 1,66 dari 5 kebutuhan dasar dalam 10 menit; 400 vs 319 persimpangan per km² | tidak ada (apa yang dicatat OSM) |
| Apakah ini gurun transit? | Jagakarsa vs Dukuh Atas | rel dalam 10 menit: 0% vs 34,8%; halte berlabel TransJakarta: 93% vs 95,1% | peta rute TransJakarta, sebagian |
| Siapa yang tinggal di luar jarak jalan kaki 10 menit dari taman? | Tambora, Jakarta Barat | 70,9% area dalam 10 menit; 54.350 orang (30,0%) di luarnya | tidak ada (apa yang dicatat OSM) |
Lima Kasus
1. Kota 15 menit: Tebet, Jakarta Selatan
Resepnya, mengikuti gagasan kota 15 menit dari Moreno dkk. (2021): lingkaran 1,5 km di sekitar -6.2345, 106.8560 (7,07 km², 125.859 penduduk menurut GHSL), berjalan kaki 4,8 km/jam dengan batas 15 menit, ke rumah sakit, sekolah, taman, dan pasar.
| Kategori | POI terpetakan di area | Dalam 15 menit | Median jalan kaki | Penduduk di luarnya |
|---|---|---|---|---|
| Rumah sakit | 7 | 70,8% | 11,5 menit | 37.258 |
| Sekolah | 79 | 99,7% | 3,1 menit | 334 |
| Taman | 23 | 97,2% | 7,3 menit | 4.543 |
| Pasar | 5 | 89,7% | 9,2 menit | 13.203 |
65,4% area menjangkau keempatnya dalam 15 menit, dan 0,1% tak menjangkau satu pun. Jaringan jalan di baliknya, dari network_stats.py, adalah 409,8 km jalan (58,0 km/km²), 532,6 persimpangan per km², 11,9% jalan buntu, dan circuity 1,09: grid yang rapat dan halus, dengan penghalang berupa rel, sungai, dan jalan tol, bukan pola jalannya. Pada gambar pertama di atas, sel merah yang tak menjangkau minimal satu kategori membentuk pita di tengah lingkaran, dan panel rumah sakit menjelaskan sebabnya: rumah sakit yang terpetakan berada di dekat tepi, dan bagian tengah lingkaran berjarak 10 sampai 15 menit dari yang terdekat.
Analisis kegagalan: satu klinik gigi. Dihitung apa adanya, 80,4% area menjangkau rumah sakit. Satu dari delapan titik yang oleh tag mentah disebut rumah sakit di dalam lingkaran adalah "Ocean Dental Tebet", klinik gigi yang ditandai amenity=hospital di OSM. Dengan titik itu dihitung, porsi rumah sakit jadi 80,4% dan porsi area yang menjangkau keempat kategori naik dari 65,4% ke 75,0%; porsi penduduk yang tak menjangkau minimal satu turun dari 35,2% (44.245 orang) ke 26,8% (33.668). Satu titik yang salah tag menggeser angka utama hampir sembilan poin. Skrip kini punya --exclude-name untuk membuang POI menurut nama, run yang dipublikasikan memakainya, dan run tanpa itu disimpan (access-raw) sebagai pengecekan sensitivitas. Alat tidak bisa menemukan titik seperti itu sendiri, itulah sebabnya setiap jawaban mendaftar POI yang dihitung.
Analisis kegagalan: dua backend OSM. Run yang sama terhadap Overpass API langsung, bukan ekstrak bertanggal, memberi jumlah POI yang identik dan 61,6% alih-alih 65,4% untuk keempat kategori (rumah sakit 68,9% vs 70,8%, pasar 93,2% vs 89,7%). Dua pembangun graf berbeda pada beberapa tautan pendek (penyaringan akses pejalan kaki dan jalan layanan), dan Overpass dua hari lebih maju dalam suntingan dibanding snapshot. Baca setiap persentase tunggal dengan pita ±4 poin persentase; urutan kategorinya (rumah sakit jadi celah, sekolah dan taman aman) sama di keduanya.

Lingkaran melebih-lebihkan jangkauan. Untuk kereta, lingkaran 1.200 m di sekitar stasiun mengklaim 90,9% area; menyusuri jalan hanya 48,2%, dengan 4 stasiun terpetakan di dalam lingkaran dan median jalan kaki 15,5 menit. Selisihnya adalah apa yang disingkirkan koridor rel, sungai, dan jalan tol.
2. Jembatan ditutup: Jembatan Gondang I, Tulungagung
Jembatan Gondang I membawa jalan nasional antara Tulungagung dan Trenggalek di Jawa Timur. Jembatan ini ditutup untuk dibangun ulang pada 2 Juni 2026 dan diumumkan tertutup sampai 11 Desember. Saya mensimulasikan penutupannya pada jaringan jalan berkendara 8 km di sekitarnya: buang setiap ruas jalan dalam 150 m dari jembatan (--close-near=-8.0717,111.84665,150), lalu ukur apa yang terjadi pada 62.250 perjalanan acak di dalam area, dua rute bernama (Terminal Gayatri Tulungagung ke Durenan, Trenggalek; Tulungagung ke Trenggalek), dan waktu ke rumah sakit terdekat dari 7 yang terpetakan.
| Skenario | Perjalanan lebih lambat lebih dari 1 menit | Median tambahan | p90 | Maks | Terputus |
|---|---|---|---|---|---|
| Mobil, semua jalan OSM | 20,5% | +3,6 menit | +4,0 menit | +8,2 menit | 0% |
Bus, hanya trunk, primary, secondary, dan tertiary (--classes) | 14,7% | +8,6 menit | +16,0 menit | +37,2 menit | 1,6% |
Kedua rute bernama bertambah 3,6 sampai 3,7 menit dengan mobil dan 8,1 menit dengan bus. Untuk rumah sakit, waktu median nyaris tak bergeser (13,2 jadi 13,6 menit dengan mobil), tetapi 22,0% sel grid jadi lebih lambat lebih dari satu menit, dan 0,8% kehilangan akses ke rumah sakit dalam 30 menit dengan mobil (1,1% dengan bus, dengan tambahan sampai 20,8 menit).

Dibandingkan dengan pengalihan yang diumumkan. Polisi mengalihkan kendaraan ringan lewat jalan-jalan kecil di sekitar Mojoarum dan Kalangbret, dan kendaraan berat (bus, truk enam roda) ke selatan lewat Simpang Tamanan–Campurdarat–Pakel–Bandung, sekitar 10 km lebih panjang (detik, 2 Jun 2026; Antara, 2 Jun 2026; Kompas, 2 Jun 2026; Kompas soal pengalihan bus, 9 Jun 2026). Model tidak diberi tahu jalan mana yang mana, tetapi tetap mereproduksi pembagiannya: jalur memutar mobil bertahan di jalan-jalan kecil dekat Mojoarum dan Kalangbret (titik terdekatnya 538 m dan 627 m), dan pada jalan berklasifikasi saja jalur bus berayun ke selatan lewat koridor Campurdarat (pengecekan landmark: titik terdekat rute bus ke Mojoarum berubah dari 11 m jadi 3,6 km dan ke Bendungan dari 124 m jadi 3,4 km, sedangkan Campurdarat dari 6,8 km jadi 5,8 km).
Yang tak bisa dikatakan pengecekan ini: panjangnya. Jalur bus model justru 1,1 km lebih pendek daripada rute langsung (14,8 dibanding 15,9 km, 8,1 menit lebih lambat di jalan yang lebih kecil), sedangkan rute berat yang diumumkan menambah sekitar 10 km. Kedua rute bernama berakhir di dalam lingkaran analisis 8 km, jadi perjalanan keluar dari lingkaran jauh sebelum menelusuri seluruh putaran yang diumumkan: perbandingan ini memvalidasi koridornya, bukan jaraknya. Sebagian selisih juga bisa nyata: polisi memilih putaran panjang karena lebar dan bobot jalan, yang tidak dilihat model arus bebas OSM. Jembatan dibuka kembali untuk lalu lintas pada 24 Oktober 2026 sementara pekerjaan penyelesaian berlanjut (Antara Jatim), jadi simulasi menggambarkan masa penutupan.
Analisis kegagalan: menutup jembatannya adalah bagian tersulit. OSM menggambar jembatan ini sebagai poligon kecil man_made=bridge, dengan jalan di bawahnya tanpa tag dan beberapa jembatan gang kecil di sebelahnya. Tiga percobaan membentuk alatnya:
--bridge-onlydalam 80 m membuang empat jalan kecil dan tidak mengubah rute apa pun, karena tak ada yang cocok dengan bentang sebenarnya.- Menutup hanya jalan trunk dalam 30 m dilewati lewat jembatan gang dalam hitungan meter.
- Menutup semua jalan dalam 150 m memutus penyeberangan (34 ruas, 3,2 km jalan untuk kasus mobil; 16 ruas, 1,4 km untuk kasus bus).
Itulah sebabnya skrip menutup sebuah radius, mencetak ruas yang dibuang (closed.geojson), dan memeriksa jarak --landmark: penutupan yang tidak mengubah rute bernama adalah penutupan yang salah, bukan efek kecil.
3. Walkability dibandingkan: Menteng vs BSD City
Menteng (ditata pada 1920-an) dan BSD City (kota baru terencana tahun 2000-an di Tangerang Selatan), lingkaran 1,5 km sama besar, sepuluh metrik berdampingan.
| Metrik | Menteng | BSD City |
|---|---|---|
| Kepadatan jalan | 49,3 km/km² | 41,6 km/km² |
| Kepadatan persimpangan | 400,1 /km² | 318,9 /km² |
| Porsi jalan buntu | 10,8% | 11,1% |
| Circuity | 1,08 | 1,14 |
| Meshedness | 0,19 | 0,13 |
| Jalur khusus pejalan kaki | 9,5 km/km² | 7,7 km/km² |
| Penyeberangan terpetakan | 26,4 /km² | 7,6 /km² |
| Trotoar terpetakan | 4,9% dari panjang | 2,7% |
| Kebutuhan dasar dalam 10 menit | 4,35 dari 5 | 1,66 dari 5 |
| Kelimanya dalam 10 menit | 49,6% area | 2,8% area |

Petanya menceritakan apa yang diringkas angka: Menteng adalah grid halus dengan sekolah dan pasar di dalam blok; BSD adalah gugus jalan buntu yang mengalir ke lingkar arteri, dengan petak besar yang masih kosong di dalam lingkaran. Kebutuhan dasarnya adalah sekolah, pasar, taman, klinik, dan halte transit.
Analisis kegagalan: angka mana yang mengukur tempatnya, dan mana yang mengukur pemetanya. Metrik jalan (kepadatan persimpangan, circuity, meshedness) berasal dari graf jalan dan tidak bergantung pada berapa banyak POI yang dipetakan; arahnya sama. Sisanya kurang aman:
- Trotoar dan penyeberangan terpetakan mengukur usaha pemeta sama banyaknya dengan mengukur trotoar. Jakarta jauh lebih rapi dipetakan daripada kota baru tahun 2000-an, jadi 26,4 dibanding 7,6 penyeberangan per km² sebagian membaca pemetanya.
- Jumlah kebutuhan dasar bergantung pada berapa banyak POI yang dipetakan. BSD City punya 1 pasar dan 1 klinik terpetakan di dalam lingkaran, dibanding 11 dan 30 di Menteng, dan 14 sekolah dibanding 45. Pasar atau klinik yang ada tetapi tak bertag menurunkan skor BSD. Saya tidak mengecek di lapangan berapa yang hilang, jadi 1,66 adalah bacaan batas bawah untuk BSD; selisih pada taman (89,4% dibanding 64,7% dalam 10 menit) dan transit (97,3% dibanding 48,3%) ada pada kategori yang lebih baik dipetakan, dan sejalan dengan pola jalannya.
- OSM tidak mencatat apa pun tentang keteduhan, lebar trotoar, kecepatan lalu lintas, atau keamanan.
Itulah sebabnya skrip mencetak sepuluh metrik yang transparan, bukan satu skor: skor akan mencampur metrik yang mengukur tempatnya dengan yang mengukur pemetanya, dan menyembunyikan mana yang menentukan peringkat.
4. Akses transit: Jagakarsa vs Dukuh Atas
Lingkaran 2 km sama besar, jalan kaki 10 menit, ke stasiun rel OSM, halte berlabel TransJakarta, dan semua halte bus. Jagakarsa di Jakarta Selatan adalah tersangka gurun transit; Dukuh Atas, tempat empat jalur rel dan koridor BRT bertemu, adalah pembandingnya.
| Jagakarsa | Dukuh Atas (pembanding) | |
|---|---|---|
| Rel dalam 10 menit | 0% (0 stasiun terpetakan) | 34,8% (10 stasiun, median 12,4 menit) |
| Halte berlabel TransJakarta | 93,0% (121) | 95,1% (185) |
| Halte bus mana pun | 93,0% (126) | 95,6% (197) |


Pasangan ini membuat jebakannya terlihat. Jagakarsa tak punya rel dalam jangkauan (tiga stasiun yang dimiliki OSM tepat di luar lingkaran berjarak median 51 menit jalan kaki) dan cakupan "TransJakarta" 93%, yang tampak seperti kebalikan dari gurun. Alasannya ada di tag: angkot feeder Mikrotrans ditandai network=TransJakarta, jadi kategori ini mengukur jaring feeder minibus, bukan koridor BRT. Gurunnya nyata tetapi spesifik: tak ada transportasi cepat dalam jarak jalan kaki 10 menit, dengan halte feeder yang rapat. Pembandingnya menunjukkan betapa tingginya standar: bahkan di sekitar Dukuh Atas hanya 34,8% lingkaran berada dalam jarak jalan kaki 10 menit dari halte rel, karena lingkaran 2 km itu besar dan stasiunnya sedikit. Koridornya dicek silang dengan peta rute TransJakarta; jumlah halte feeder hanya dari OSM dan tidak dicek independen.
5. Ruang hijau dengan populasi: Tambora, Jakarta Barat
Lingkaran 1,5 km, jalan kaki 10 menit ke taman (tag OSM park, garden, dan playground), dibobot grid populasi GHSL.
Tambora memuat sekitar 181.000 orang dalam lingkaran 7,07 km², sekitar 25.600 per km², termasuk yang terpadat di Jakarta, dan 17 taman yang terpetakan adalah taman saku kecil yang mengumpul ke arah tepi lingkaran. 70,9% area berada dalam jarak jalan kaki 10 menit dari salah satunya, dengan median jalan kaki 7,7 menit dan persentil ke-90 12,8. Sisa 29,1% adalah inti putih pada gambar, dan di sanalah sebagian besar penduduk berada: 54.350 penduduk (30,0%) tinggal lebih jauh dari 10 menit jalan kaki dari taman terpetakan mana pun.

Yang tak bisa dikatakan pengecekan ini. Tak ada kebenaran lapangan independen untuk akses taman di sini, jadi angkanya adalah apa yang dicatat OSM. Lapangan kecil lingkungan dan ruang terbuka tingkat RT adalah persis yang paling sering dilewatkan pemeta, jadi 30,0% lebih mungkin melebih-lebihkan celahnya daripada meremehkannya. Taman masuk ke perhitungan dari titik-titik di sepanjang garis luarnya, jadi taman yang berpagar atau terkunci dihitung di tempat gerbangnya berada, yang tak bisa dibedakan tag.
Bertanya ke Deep Agent
Skripnya sama, dijalankan orang atau agen. Versi LangChain Deep Agents memuat SKILL.md yang sama, jadi perbaikan pada skill sampai ke keduanya. Ia berjalan di langganan ChatGPT lewat provider sign in with ChatGPT, jadi tak perlu API key.
git clone https://github.com/dzakybd/open-urban-analysis
cd open-urban-analysis && uv sync
# sekali: masuk dengan akun ChatGPT
uv run python -c "from langchain_openai.chatgpt_oauth import login_chatgpt; login_chatgpt()"
uv run python agent/run.py runs/my-question \
"What share of Tebet, South Jakarta is within a 15-minute walk of a hospital, school, park and market? Use -6.2345, 106.8560 with a 1.5 km radius."Agen menulis answer.md dan run.json (waktu, jumlah pemanggilan tool, token). Kelima kasus di atas saya jalankan langsung lewat skrip dengan cases.sh; saya belum menguji seberapa baik agen memilih di antara skrip pada pertanyaan-pertanyaan ini, jadi saya tidak membuat klaim soal itu di sini.
Batasan Data OSM
- Celah bukan berarti fasilitas tidak ada. Skrip mengukur akses ke POI yang dimiliki OSM. Sekolah, klinik, atau pasar yang tak dipetakan terlihat seperti celah; yang dipetakan di tempat salah, atau diberi tag salah seperti klinik gigi tadi, terlihat seperti akses. Pasar dan klinik kecil adalah kategori yang paling tak lengkap, jadi setiap jawaban menyebut berapa POI yang ditemukan dan menamainya.
- Tanpa skor walkability tunggal, dan tanpa kualitas trotoar, keteduhan, penerangan, kecepatan lalu lintas, atau keamanan. Porsi trotoar terpetakan sebagian besar mengukur usaha pemeta.
- Waktu berjalan adalah jarak jaringan pada 4,8 km/jam. Tanpa tangga, kemiringan, menunggu menyeberang, atau banjir. Penghalang yang terpetakan (sungai, rel, jalan tol) dihormati; yang tak terpetakan tidak.
- Waktu berkendara adalah arus bebas. Jalur memutar saat lalu lintas padat lebih lama daripada menit yang dilaporkan, dan jalan belakang yang tak ada di OSM membuat jalur memutar tampak lebih panjang daripada sebenarnya.
- Area adalah lingkaran pada grid 100 m. Itu area, bukan orang, kecuali
--populationdipakai, dan GHSL adalah model, bukan sensus. - Dua backend berbeda beberapa poin. 65,4% dibanding 61,6% pada metrik semua kategori Tebet, dari filter graf dan dari suntingan antara snapshot dan API langsung.
- Tag bukan benda aslinya.
network=TransJakartacocok dengan angkot Mikrotrans, danamenity=hospitalcocok dengan klinik gigi.
Coba Sendiri
- Pasang skill:
npx skills add dzakybd/open-urban-analysis, lalu tanyakan ke agen Anda sesuatu seperti "berapa persen kecamatan ini berada dalam jarak jalan kaki 15 menit dari rumah sakit, sekolah, taman, dan pasar?" atau "apa yang terjadi kalau jembatan ini ditutup?" - Jelajahi lima kasusnya di Space demo: gambar, peta interaktif, dan angka, langsung di browser.
- Baca skrip dan runner Deep Agents: dzakybd/open-urban-analysis. Semua yang disentuhnya gratis.
Kalau Anda bekerja dengan layanan sebuah kecamatan, jaringan jalan, atau pasar properti: tempat mana yang akan Anda tanyakan lebih dulu, dan apa di OSM yang akan membuatnya salah? Saya ingin tahu di mana ia cocok dan di mana tidak.
Dibangun di Atas
Tidak ada yang dibangun dari nol. Skill ini adalah perekat di sekitar karya terbuka orang lain:
| Bagian | Fungsinya di sini |
|---|---|
| OSMnx (Boeing, 2017) | Mengunduh dan membangun graf jalan dan POI dari OpenStreetMap |
| NetworkX, GeoPandas, momepy | Rute terpendek, geometri, serta indeks meshedness dan gamma |
| folium, matplotlib | Peta interaktif dan gambar |
| osmium-tool dan ekstrak Geofabrik | Backend OSM offline yang bertanggal |
| OpenStreetMap dan Nominatim | Data peta (© kontributor OpenStreetMap, ODbL) dan geocoder |
| GHSL GHS-POP R2023A (Komisi Eropa, JRC) | Grid populasi 100 m |
| LangChain Deep Agents dan skills CLI | Runner agen dan instalasi npx skills add |
Polanya berasal dari open-satellite-analysis dan pid-parser sebelumnya: skrip yang mengukur, dan SKILL.md yang memberi tahu agen cara memakainya.
Referensi
- Boeing, G. (2017). OSMnx: New methods for acquiring, constructing, analyzing, and visualizing complex street networks. Computers, Environment and Urban Systems, 65, 126–139.
- Moreno, C. dkk. (2021). Introducing the "15-Minute City": Sustainability, resilience and place identity in future post-pandemic cities. Smart Cities, 4(1), 93–111.
- Schiavina, M. dkk. (2023). GHS-POP R2023A, GHS population grid multitemporal (1975–2030). Komisi Eropa, Joint Research Centre.
- Kontributor OpenStreetMap. Data planet via Geofabrik,
java-latest.osm.pbf, 27 Oktober 2026 (ODbL). - Berita yang dipakai sebagai kebenaran lapangan untuk kasus Gondang ditautkan di bagian itu: detik, Antara, Kompas, Antara Jatim.