
- Geospatial Data Engineering
- problem-solving
- solution-design
- geo-tech
Saat Celah Poligon Menjadi Celah Pendapatan
Celah di antara dua poligon area layanan merugikan dua kali: booking yang tidak bisa terjadi, dan booking yang terjadi tetapi tidak terhitung. Begini cara kami menemukan dan menutup keduanya.
Berapa kerugian dari celah di antara dua poligon?
Kerugiannya dua kali. Celah di service border berarti penumpang yang berdiri di situ sama sekali tidak bisa memesan: pendapatan hilang. Celah di tabel geohash di belakangnya berarti perjalanan yang sudah terjadi tidak tercatat ke area mana pun: pendapatannya ada, tetapi tidak muncul di tempat bisnis melihatnya.
Di Grab, kedua lapisan itu berupa poligon di peta, dan keduanya punya lubang. Artikel ini membahas bagaimana lubang itu muncul, bagaimana kami menemukan lokasinya dengan tepat, dan kenapa memperbaiki satu lapisan tanpa yang lain hanya menyelesaikan separuh masalah.
Bagaimana celah di service border terdeteksi?
Service border adalah poligon yang menyalakan sebuah layanan untuk suatu area. Saat sebuah kota berekspansi, border baru digambar dan dikonfigurasi, dan semua yang ada di dalamnya bisa dipesan. Saat border itu berlubang, gejalanya jarang berbunyi "poligon".
- Penumpang tidak bisa memesan dari satu titik, tetapi setelah berjalan 500 meter sampai satu kilometer, layanannya tiba-tiba menyala. Pola itu hampir selalu berarti ada celah di antara dua border, atau border yang berhenti terlalu pendek.
- Merchant tidak muncul bagi pelanggan yang berada di sisi garis yang salah.
- Driver atau merchant melaporkannya, tetapi jarang, dan biasanya dari area kecil seperti pelabuhan atau kawasan dekat pantai.
- Pemakaian anjlok tiba-tiba di satu area. Ini terjadi saat sebuah kota dipecah menjadi dua area operasional dan pemecahannya tidak berjalan mulus: konfigurasi yang salah atau file border yang rusak membuat sebagian kota berada di luar keduanya.
- Rute mengambil jalan memutar yang aneh saat sebuah celah memotong di antara dua ruas jalan, sehingga rute yang disarankan mengitarinya alih-alih melewatinya.
Buka ukuran penuhGejala pertama yang paling mahal. Celah di atas sebuah apartemen, perumahan, atau pusat perbelanjaan adalah permintaan yang nyata dan tidak bisa dilayani.
Kenapa celah itu bisa ada?
Sebagian besar karena bisnis tumbuh lebih cepat daripada data petanya. Banyak service border digambar per kota, sebelum ada tim map operations khusus, oleh orang-orang yang tugasnya meluncurkan layanan, bukan menjaga topologi poligon tetap rapi. Border yang bertetangga digambar terpisah, sehingga tepinya tidak benar-benar bertemu.
Ekspansi menambahnya. Area baru bisa sudah berjalan sebelum rencananya sampai ke tim peta, dan pemecahan kota berarti mengedit border yang sudah dipakai sistem lain. Tidak ada satu pihak pun yang salah dalam hal ini. Inilah yang terjadi ketika geometri diperlakukan sebagai konfigurasi, bukan sebagai data yang punya aturan.
Apa itu geohash, dan kenapa ada di tabel booking?
Geohash adalah kode pendek yang menamai sebuah sel persegi panjang di peta. Setiap karakter tambahan membuat selnya lebih kecil:
| Presisi | Contoh | Perkiraan ukuran sel |
|---|---|---|
| 5 | qqguy |
4,9 km × 4,9 km |
| 6 | qqguyb |
1,2 km × 0,6 km |
| 7 | qqguybp |
150 m × 150 m |
Buka ukuran penuhEnam karakter adalah ukuran yang praktis untuk operasional: cukup kecil untuk memisahkan satu lingkungan dari lingkungan sebelahnya, cukup besar untuk diagregasi. Di data kami, setiap booking membawa geohash 6 karakter dari titik jemputnya, dan sebuah tabel terpisah memetakan setiap geohash ke sebuah area. Pendapatan dan GMV dihitung per geohash, sehingga dorongan promo bisa diarahkan tepat ke sel yang membutuhkannya.
Desain itu punya satu titik lemah: tabel pemetaannya harus mencakup setiap sel di dalam setiap service border. Sebuah laporan biasanya menggabungkan booking dengan tabel itu:
-- Simplified illustration (not production code)
select g.area_name,
count(*) as bookings,
sum(b.gmv) as gmv
from bookings b
join geohash_area g
on g.geohash6 = b.pickup_geohash6
group by g.area_name;
Kalau sebuah sel tidak ada di geohash_area, setiap booking di sel itu diam-diam hilang dari total ini. Tidak ada error. Perjalanannya terjadi, uangnya berpindah, dan laporan area itu sekadar lebih kecil dari kenyataan. left join juga tidak menyelesaikan masalah bisnisnya; booking yang sama hanya pindah ke kelompok "unknown" yang tidak dimiliki siapa pun.
Buka ukuran penuhKarena itulah ekspansi harus dirilis sebagai satu paket: border yang benar dan tabel geohash lengkap yang mencakupnya, dirilis bersamaan.
Bagaimana menemukan lokasi celahnya dengan tepat?
Melihat peta saja tidak cukup; celah beberapa meter tidak terlihat di zoom level kota. Kami bekerja dari datanya.
- Ekstrak border dari konfigurasi layanan sebagai GeoJSON, supaya bisa di-query seperti tabel lain.
- Temukan lubangnya dengan menggabungkan border yang bertetangga lalu mendaftar setiap lubang yang tersisa di dalam hasilnya.
- Gabungkan titik booking dan kode area dengan border dan tabel geohash, untuk melihat di mana aktivitas nyata jatuh di luar border atau di dalam sel yang tidak punya area.
- Cek topologi di QGIS: overlap, celah, dan geometri yang tidak valid, tepi demi tepi.
- Perbaiki geometrinya, lalu buat ulang tabel geohash dari border yang sudah diperbaiki, supaya kedua lapisan kembali cocok.
-- Simplified illustration: holes left between neighbouring service borders
with merged as (
select (st_dump(st_union(geom))).geom as geom
from service_borders
),
holes as (
select st_makepolygon(st_interiorringn(geom, n)) as hole
from merged,
generate_series(1, st_numinteriorrings(geom)) as n
)
select hole,
st_area(hole::geography) as area_m2
from holes
order by area_m2 desc;
Trade-off-nya ada di langkah 5. Menyatukan tepi border yang bertetangga dengan snapping bertoleransi menutup celah tipis dengan cepat, tetapi toleransi yang terlalu longgar juga menarik border ke tempat yang seharusnya tidak dilayani, misalnya area pelabuhan yang dibatasi. Snapping otomatis menangani celah yang tipis; yang lebih besar dicek manual sebelum diaktifkan.
Bagaimana rangkaian insiden berubah menjadi sebuah proyek?
Awalnya tim saya hanya berada di posisi penerima: insiden masuk, kami menemukan lubangnya, kami memperbaikinya. Ketika kasusnya terus berdatangan, kami berhenti menanganinya satu per satu. Kami menyisir seluruh kota untuk mencari celah, mengeskalasi polanya, dan menjadikannya proyek dengan prosedur standar, pengecekan kualitas, dan cara tercepat yang sudah teruji untuk setiap jenis celah.
Buka ukuran penuhBagian yang saya bangun sendiri adalah yang membuat anggota tim lain bisa bergerak tanpa menunggu saya:
- Geohash extractor yang mengubah poligon border menjadi daftar lengkap sel geohash-nya, memangkas alur manual dua hari menjadi 3–5 menit. Saya menuliskannya di tool geohash self-service untuk tim non-GIS.
- Template query untuk mengecek border dan cakupan geohash, cukup sederhana untuk dijalankan sendiri oleh tim yang saya pimpin.
- Model QGIS yang merangkai langkah-langkah pembersihan, sehingga setiap border melewati pengecekan yang sama dengan urutan yang sama.
Tujuan ketiganya sama: perbaikan yang hanya bisa dijalankan satu orang bukanlah perbaikan, melainkan antrean.
Apa pola yang bisa dipakai ulang?
Setiap sistem yang membagi aktivitas ke dalam area punya dua lapisan yang sama: satu yang menentukan apa yang boleh terjadi di mana, dan satu yang menentukan di mana sesuatu dihitung. Zona pengiriman, wilayah sales, distrik pajak, dan area waralaba semuanya bekerja seperti ini.
- Rilis batas wilayah sebagai pasangan. Perubahan border dan tabel lookup-nya dirilis bersamaan, atau tidak sama sekali.
- Validasi topologi di setiap edit, bukan setelah ada keluhan. Celah dan overlap murah untuk ditangkap saat perubahan terjadi.
- Ukur apa yang jatuh di luar. Booking di luar semua border dan baris tanpa sel yang cocok adalah metrik, bukan noise.
- Jangan percaya join yang diam. Kalau tabel dimensi bisa tidak lengkap, laporan yang dibangun di atasnya bisa salah tanpa error apa pun.
- Buat pengecekannya bisa dijalankan tim. Template dan model mengubah penilaian satu ahli menjadi rutinitas.
Artikel berikutnya dalam seri ini beralih dari geometri ke metrik: angka yang salah bukan karena rumusnya, melainkan karena apa yang dimasukkan ke dalamnya.
FAQ
Apa itu geohash?
String pendek yang menamai sebuah sel persegi panjang di peta. String yang lebih panjang menamai sel yang lebih kecil, dan sel dengan awalan yang sama letaknya berdekatan, sehingga geohash mudah disimpan, diindeks, dan dikelompokkan di database biasa.
Kenapa memakai geohash 6 karakter untuk pendapatan?
Dengan ukuran sekitar 1,2 km × 0,6 km, sel 6 karakter cukup kecil untuk menyasar satu lingkungan dan cukup besar untuk mengagregasi booking secara bermakna. Sel yang lebih kecil memberi penargetan lebih halus, tetapi tabel lookup-nya jauh lebih besar.
Apa itu sliver polygon?
Celah atau overlap tipis, biasanya tidak disengaja, di antara dua poligon yang seharusnya berbagi tepi yang sama. Sliver muncul karena bentuk yang bertetangga digambar terpisah, dan sering tidak terlihat sampai di-zoom atau dicek topologinya.
Referensi
- Geohash, Wikipedia
- ST_GeoHash, dokumentasi PostGIS
- Dari 2 hari jadi 5 menit: tool geohash self-service untuk tim non-GIS, artikel sebelumnya di situs ini
- Ketergantungan Data Tersembunyi yang Terungkap Saat Migrasi Peta, artikel sebelumnya dalam seri ini
Terakhir diperbarui: 29 Oktober 2026.