Lompat ke konten
20 menit bacamateri 84 dari 96

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.

Ditinjau 26 Oktober 2026

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:

  1. Hitung jarak bertanda d dari posisi ke tepi poligon (positif di dalam, negatif di luar).
  2. d ≥ 25 m berarti pasti di dalam, d ≤ -25 m pasti di luar, sisanya tidak pasti.
  3. Status berubah menjadi DI_DALAM hanya setelah dua pembacaan berurutan pasti di dalam (sekitar 8 detik pada ping 4 detik). Status kembali ke DI_LUAR hanya setelah dua pembacaan pasti di luar.
  4. Pembacaan tidak pasti tidak mengubah status.
  5. Penagihan memakai kunci unik (driver_id, zone_id, kunjungan). Satu kunjungan baru dimulai setelah status DI_LUAR bertahan 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

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.

Isi · System Design