Langsung ke konten
MSP
Sampul: dari 2 hari menjadi 5 menit, poligon yang digambar di atas grid sel geohash
  • Solution Architecture
  • solution-design
  • problem-solving
  • geo-tech

Dari 2 hari jadi 5 menit: tool geohash self-service untuk tim non-GIS

Mahardi Setyoso Pratomo4 mnt bacaBahasa Indonesia

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:

  1. Tim bisnis atau operasional meminta cakupan zona baru ke tim GIS.
  2. Spesialis GIS mengekspor poligon, menjalankan script, mengecek hasilnya di peta, dan merapikan output.
  3. 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:

  1. Tidak perlu keahlian GIS. Kalau pengguna harus tahu arti EPSG:4326, tool-nya gagal.
  2. 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.
  3. Tampilkan dulu sebelum diekspor. Setiap hasil digambar di peta, sehingga peminta mengecek cakupannya sendiri, bukan sekadar percaya pada CSV.
  4. Ekspor dalam format penerimanya. Daftarnya dipakai di database, query, API, dan tool GIS, jadi harus tersedia dalam satu klik untuk setiap format.

Arsitekturnya

Arsitektur: input gambar, tempel, dan unggah menjadi satu poligon Shapely, polygeohasher mengubahnya jadi sel geohash, lalu Folium menampilkan peta dan tool mengekspor CSV, TXT, JSON, GeoJSON, ZIPBuka ukuran penuh
Gambar 1. Semua jalur input bertemu di satu poligon, satu langkah konversi, dan satu peta.

Perhatikan bagaimana ketiga jalur input bertemu di satu poligon Shapely sebelum langkah lain dijalankan. Keputusan itu membuat logika konversi cukup ada di satu tempat:

  1. Input. Menggambar di peta Folium/Leaflet (dengan ekstensi NewDraw buatan sendiri yang mempertahankan bentuk yang digambar), menempel koordinat, atau mengunggah file GeoJSON.
  2. Konversi. polygeohasher mengubah 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).
  3. 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.