Tentukan geofence dengan aman
Mengubah 'di dalam area ini' menjadi aturan yang bisa dipercaya: batas poligon, posisi yang tidak pasti, histeresis, serta privasi dan retensi data lokasi.
Pertanyaan
Bagaimana memutuskan sebuah posisi berada di dalam area, saat posisinya sendiri tidak pasti, dan berapa lama data lokasi itu pantas disimpan?
Setelah baca ini, kamu bisa menulis aturan masuk dan keluar dengan histeresis, memakai sel sebagai filter kasar sebelum uji poligon, dan menetapkan retensi serta minimisasi data lokasi.
Prasyarat dan contoh
Kamu sudah paham representasi lokasi dan akurasi (M14.01), sel grid (M14.03), dan lokasi yang bergerak (M14.04).
Bandara memasang biaya penjemputan di area tertentu. Aplikasi menambahkan Rp10.000 saat driver masuk poligon "zona jemput bandara". Seorang driver menunggu di tepi zona. Akurasi GPS 25 m, jadi posisinya berpindah masuk dan keluar poligon beberapa kali per menit. Pelanggan melihat biaya muncul, hilang, muncul lagi.
Mekanisme
1. Uji titik dalam poligon. Algoritma ray casting menarik garis dari titik ke arah mana pun dan menghitung berapa kali memotong sisi poligon. Ganjil berarti di dalam, genap di luar. Biayanya sebanding jumlah sisi: poligon dengan 2.000 sisi berarti 2.000 pengecekan per titik. Dengan 25.000 ping per detik itu 50 juta pengecekan per detik, terlalu mahal untuk dijalankan tanpa saringan.
2. Sel sebagai filter kasar. Sebelum uji poligon, tutup poligon dengan sel (H3 atau S2 covering, atau sel geohash) dan simpan himpunannya. Titik yang selnya tidak ada di himpunan pasti di luar. Titik yang berada di sel yang sepenuhnya di dalam poligon pasti di dalam. Hanya titik di sel yang memotong tepi poligon yang butuh uji poligon penuh. Itu biasanya satu persen ping atau lebih kecil.
3. Aturan tepi. Titik tepat di garis batas harus punya aturan tertulis, misalnya "di dalam bila berada pada atau di dalam batas". Tanpa aturan, hasil bergantung pada urutan titik di poligon dan pembulatan floating point.
4. Posisi yang tidak pasti. Satu pembacaan adalah lingkaran, bukan titik. Dengan akurasi 25 m ada tiga kemungkinan:
- Pasti di dalam: lingkaran seluruhnya di dalam poligon (jarak ke tepi ≥ 25 m).
- Pasti di luar: lingkaran seluruhnya di luar.
- Tidak pasti: lingkaran memotong tepi.
Pada kasus tidak pasti, pertahankan status sebelumnya. Ini histeresis. Dikombinasikan dengan syarat dwell time (misalnya dua pembacaan berurutan pasti di dalam, atau 20 detik), flapping di tepi hilang. Biaya yang dibayar: masuk terdeteksi beberapa detik lebih lambat.
5. Privasi dan retensi. Lokasi adalah data pribadi yang sensitif: pola perjalanan membuka
rumah, tempat kerja, dan kebiasaan seseorang. Untuk geofence, yang dibutuhkan biasanya hanya
peristiwa (MASUK zona X pada 14:02), bukan jejak mentah. Aturan praktis:
- Simpan peristiwa, bukan seluruh jejak, bila tujuannya penagihan.
- Jejak mentah punya tujuan sendiri (sengketa, keselamatan), batas waktu sendiri (misalnya 30 hari), dan akses terbatas.
- Setelah itu kurangi presisi (bulatkan ke sel 7 karakter) atau hapus.
- Catat siapa yang membaca data lokasi.
Di Indonesia, data pribadi diatur oleh UU No. 27 Tahun 2022 tentang Pelindungan Data Pribadi. Ini catatan desain, bukan nasihat hukum: tentukan tujuan, dasar, dan masa simpan dengan tim hukum sebelum rilis.
Saat rancangan ini gagal
- Flapping di tepi. Satu driver menghasilkan 6 peristiwa masuk/keluar per menit. Biaya ditagih dan dibatalkan berulang, dan log peristiwa membengkak.
- Poligon terlalu detail. Garis pantai dengan 100.000 titik memperlambat tiap uji. Sederhanakan (Douglas-Peucker) ke toleransi di bawah akurasi GPS, misalnya 5 m.
- Poligon melintasi garis bujur 180° atau kutub. Tidak relevan di Indonesia, tapi library yang menganggap bidang datar bisa gagal. Uji dengan data di luar wilayahmu bila produkmu akan ekspansi.
- Menyimpan jejak "untuk jaga-jaga". Data yang tidak punya tujuan akan bocor, disalahgunakan, atau menjadi kewajiban saat ada permintaan hapus.
- Menggunakan geofence sebagai keputusan final. Tagihan berdasarkan satu pembacaan GPS tanpa jalur banding akan menghasilkan sengketa. Simpan bukti minimum (posisi, akurasi, waktu) untuk tinjauan.
Contoh tandingan: untuk notifikasi "paket hampir sampai" dalam radius 500 m, flapping nyaris tak berbahaya. Histeresis dan dwell time tidak perlu. Terapkan hanya ketika kesalahan punya biaya.
Latihan
Zona jemput bandara berupa poligon. Akurasi GPS driver 25 m. Biaya Rp10.000 ditagih saat driver terdeteksi masuk. Tulis aturan yang mencegah penagihan ganda karena flapping, dan sebut retensi data yang kamu pilih.
Lihat pembahasan
Aturan status:
- Hitung jarak bertanda
ddari posisi ke tepi poligon (positif di dalam, negatif di luar). d ≥ 25 mberarti pasti di dalam,d ≤ -25 mpasti di luar, sisanya tidak pasti.- Status berubah menjadi
DI_DALAMhanya setelah dua pembacaan berurutan pasti di dalam (sekitar 8 detik pada ping 4 detik). Status kembali keDI_LUARhanya setelah dua pembacaan pasti di luar. - Pembacaan tidak pasti tidak mengubah status.
- Penagihan memakai kunci unik
(driver_id, zone_id, kunjungan). Satu kunjungan baru dimulai setelah statusDI_LUARbertahan minimal 5 menit. Peristiwa masuk berulang pada kunjungan yang sama tidak menagih ulang.
Retensi: simpan peristiwa MASUK dan KELUAR (driver, zona, waktu, akurasi) selama masa
sengketa penagihan, misalnya 90 hari. Jejak mentah per ping disimpan 7 sampai 30 hari dengan akses
terbatas, lalu dihapus. Presisi dikurangi ke sel kasar bila perlu untuk analitik.
Kompromi yang dinyatakan: deteksi masuk terlambat sampai 8 detik, dan driver yang hanya menyentuh tepi zona 10 detik tidak ditagih. Itu pilihan produk yang harus disetujui.
Terkait
- Sebelumnya: M14.05 Cocokkan suplai dan permintaan.
- Kembali ke M14.03 Pilih grid spasial untuk covering poligon dengan S2 atau H3.
- Lab L14 dan rancangan D17 (yang membahas privasi lokasi) belum tersedia.
Catatan
- Asumsi: akurasi GPS dilaporkan perangkat sebagai radius, dan distribusi galat tidak dimodelkan.
- Yang nggak dibahas: geofence di perangkat versus server, Wi-Fi/cell positioning, dan spoofing lokasi.
- Rujukan hukum hanya penunjuk, bukan interpretasi. Periksa persyaratan terkini.
- Terakhir ditinjau: 26 Oktober 2026.