
- Solution Architecture
- solution-design
- problem-solving
- geo-tech
Dari 2 hari jadi 5 menit: tool geohash self-service untuk tim non-GIS
Tim non-GIS butuh daftar geohash untuk zona layanan dan harus menunggu dua hari karena alurnya manual dan bergantung pada spesialis GIS. Saya merancang tool self-service Python dan Streamlit yang memangkasnya jadi 3–5 menit: gambar, tempel, atau unggah poligon, lalu unduh.
Jawaban singkat
Tim tanpa keahlian GIS butuh daftar geohash untuk zona layanan baru, dan untuk mendapatkannya mereka harus melewati alur manual selama dua hari yang dijalankan spesialis GIS. Saya merancang dan membangun tool self-service dengan Python dan Streamlit yang mengubah poligon menjadi daftar geohash dalam 3–5 menit: gambar, tempel, atau unggah bentuknya, pilih presisi, lalu unduh. Tool ini masih dipakai di production dan masuk top-5 finalis di hackathon Product Ops internal.
Pelajarannya bukan soal geohash, tetapi soal solution design: alur kerja tercepat adalah alur yang bisa dijalankan sendiri oleh tim yang meminta.
Apa itu geohash, dan kenapa tim butuh daftarnya
Geohash adalah string pendek yang menamai sebuah sel persegi panjang di peta, misalnya qqguy. Setiap karakter tambahan membuat selnya lebih kecil: presisi 5 kira-kira seukuran lingkungan (~5 km), presisi 6 seukuran blok (~1,2 km), presisi 7 seukuran ruas jalan (~150 m).
Sistem operasional memakai daftar geohash sebagai cara sederhana yang ramah database untuk menyebut "area ini": zona layanan, geofence untuk notifikasi, cakupan dispatch, atau partition key di data warehouse. Saat tim kota meluncurkan zona baru, seseorang harus mengubah poligon di peta menjadi daftar itu.
Masalahnya: antrean dua hari untuk pekerjaan lima menit
Alur lama bergantung pada spesialis dan copy-paste:
- Tim bisnis atau operasional meminta cakupan zona baru ke tim GIS.
- Spesialis GIS mengekspor poligon, menjalankan script, mengecek hasilnya di peta, dan merapikan output.
- Daftarnya disalin manual ke sistem tujuan.
Setiap langkahnya kecil, tetapi antrean di sekitarnya memakan sekitar dua hari, dan setiap zona baru atau revisi mengulang semuanya dari awal. Hambatan sebenarnya bukan menghitung geohash, melainkan karena hanya spesialis GIS yang bisa menjalankan langkah-langkahnya.
Prinsip desain
Saya menetapkan empat aturan sebelum menulis kode:
- Tidak perlu keahlian GIS. Kalau pengguna harus tahu arti EPSG:4326, tool-nya gagal.
- Terima input di tempat ia sudah berada. Ada yang punya bentuk di kepala, ada yang punya koordinat di spreadsheet, ada yang punya file GeoJSON. Ketiganya harus bisa.
- Tampilkan dulu sebelum diekspor. Setiap hasil digambar di peta, sehingga peminta mengecek cakupannya sendiri, bukan sekadar percaya pada CSV.
- Ekspor dalam format penerimanya. Daftarnya dipakai di database, query, API, dan tool GIS, jadi harus tersedia dalam satu klik untuk setiap format.
Arsitekturnya
Buka ukuran penuhPerhatikan bagaimana ketiga jalur input bertemu di satu poligon Shapely sebelum langkah lain dijalankan. Keputusan itu membuat logika konversi cukup ada di satu tempat:
- Input. Menggambar di peta Folium/Leaflet (dengan ekstensi
NewDrawbuatan sendiri yang mempertahankan bentuk yang digambar), menempel koordinat, atau mengunggah file GeoJSON. - Konversi.
polygeohashermengubah poligon menjadi sel geohash pada presisi yang dipilih (1–12), dalam mode inner (sel yang sepenuhnya di dalam batas) atau full coverage (setiap sel yang menyentuh batas). - Output. Sel digambar di peta dengan warna sesuai presisi, ditambah jumlah sel dan statistik cakupan, lalu bisa diunduh.
Lima mode, satu cara berpikir
| Mode | Input | Output | Kegunaan umum |
|---|---|---|---|
| Gambar poligon | Bentuk bebas di peta | Daftar geohash + overlay | Zona layanan baru, geofence |
| Salin koordinat | Lat/lng dipisah koma | Daftar geohash + peta | Data koordinat yang sudah ada |
| Ekstraksi massal | Unggah GeoJSON | Cakupan untuk seluruh area | Cakupan kota atau regional |
| Visualisasi geohash | Tempel string geohash | Sel di peta | QA daftar yang sudah ada |
| GeoJSON → CSV | Poligon GeoJSON | Koordinat dalam CSV | Pra-pemrosesan pipeline |
Mode visualisasi ternyata sama pentingnya dengan konverter: siapa pun bisa mengecek daftar buatan orang lain, sehingga satu lagi bolak-balik ke tim GIS hilang.
Memilih presisi
| Presisi | Ukuran sel (kira-kira) | Contoh pemakaian |
|---|---|---|
| 5 | ~5 km | Kecamatan / lingkungan |
| 6 | ~1,2 km | Blok (default) |
| 7 | ~150 m | Ruas jalan |
| 8 | ~38 m | Gedung |
Default-nya 6, ukuran setingkat blok yang masuk akal untuk sebagian besar pekerjaan zona. Presisi lebih tinggi melipatgandakan jumlah sel dengan cepat, jadi tool ini punya pembatas jumlah sel agar peta tetap responsif di area besar.
Trade-off
- Streamlit, bukan web app custom. Native Python dan cepat dirilis, tanpa kode front-end yang harus dirawat. Konsekuensinya kontrol UI lebih terbatas, dan itu bisa diterima untuk tool internal yang lebih mementingkan kecepatan iterasi daripada kesempurnaan tampilan.
- Geohash, belum H3. Sistem penerima mengharapkan daftar geohash, jadi geohash didahulukan. Dukungan H3 ada di roadmap.
- Ekspor, bukan integrasi. Unduhan (CSV, TXT dipisah koma/baris, JSON array, GeoJSON, ZIP) sudah bekerja dengan semua sistem penerima hari ini. Push langsung ke PostGIS atau BigQuery dan wrapper API adalah langkah berikutnya.
Hasil
- Siklus permintaan dua hari menjadi pekerjaan self-service 3–5 menit.
- Tim tanpa pelatihan GIS bisa membuat dan memvalidasi cakupan geohash mereka sendiri.
- Tool ini masih dipakai di production dan masuk top-5 finalis di hackathon Product Ops internal.
Kemenangan yang lebih besar tidak terlihat di metrik: tim GIS tidak lagi menjadi antrean untuk konversi rutin, dan waktunya bisa dipakai untuk pekerjaan yang memang membutuhkan mereka.
FAQ
Apa bedanya inner dan full coverage? Inner coverage hanya menyimpan sel yang sepenuhnya berada di dalam poligon, jadi tidak ada yang meluber keluar zona. Full coverage menyimpan setiap sel yang menyentuh poligon, jadi tidak ada bagian zona yang terlewat. Geofence untuk notifikasi biasanya memakai inner; cakupan dispatch biasanya memakai full.
Presisi geohash berapa yang sebaiknya dipakai untuk zona layanan? Presisi 6 (sekitar 1,2 km) adalah default yang baik untuk zona layanan kota. Pakai 7 untuk detail setingkat jalan dan 5 untuk cakupan regional yang luas. Setiap naik satu tingkat, jumlah sel bertambah 32 kali lipat.
Apakah bisa dicoba? Bisa. Versi publiknya live di Streamlit, dan kodenya ada di GitHub dengan lisensi MIT.
Stack: Python 3.12, Streamlit, Folium + Leaflet.draw, GeoPandas, Shapely, polygeohasher. Terakhir diperbarui: 20 Oktober 2026.