Dokumen ini menjelaskan apa yang dimaksud dengan pembatasan wilayah sisi klien, kapan harus menggunakannya, dan cara menerapkannya untuk kasus penggunaan di aplikasi seluler. Panduan ini juga menunjukkan cara menerapkan contoh di Android menggunakan Google Navigation SDK.
Perusahaan sering kali perlu mengetahui kapan perangkat seluler memasuki atau meninggalkan area tersebut. Hal ini dicapai dengan mempertahankan batas geografis virtual, atau pembatasan wilayah, yang memungkinkan software memicu peristiwa saat perangkat melewati batas.
Memahami kapan kendaraan tertentu melintasi batas merupakan hal penting untuk beberapa kasus penggunaan seperti:
- Customer engagement: Bisnis dapat menggunakan pembatasan wilayah untuk mengirim notifikasi push kepada pengguna akhir tentang penawaran spesial, acara, atau produk baru.
- Keamanan dan keselamatan: Bisnis dapat menggunakan pembatasan wilayah untuk membuat perimeter virtual di sekitar area sensitif, seperti pusat data atau warehouse, dan memberi tahu staf keamanan jika seseorang memasuki atau meninggalkan area tersebut.
- Transportasi: Bisnis dapat menggunakan pembatasan wilayah untuk melacak lokasi kendaraan dan mengoptimalkan rute dan jadwal.
Oleh karena itu, Anda harus mengetahui cara merepresentasikan zona tersebut (poligon) di dalam aplikasi yang ditampilkan kepada klien. Aplikasi ini harus melacak lokasi perangkat dan memeriksa apakah perangkat melanggar pembatasan wilayah tertentu.
Cakupan
Dokumen ini berfokus pada penerapan pembatasan wilayah sisi klien. Artinya, aplikasi klien harus memiliki:
- Poligon yang perlu diperiksa untuk mengetahui pelanggaran;
- Lokasi real time pengguna
- Logika untuk memeriksa apakah lokasi saat ini berada di dalam atau di luar poligon.
Panduan ini menyertakan contoh di Android, tetapi ada cara yang setara untuk melakukannya di iOS. Layanan Lokasi Android memiliki implementasi bawaan untuk pembatasan wilayah melingkar yang dapat dilihat di sini. Kode dan deskripsi referensi di bawah adalah titik awal untuk implementasi yang lebih kompleks.
Navigation SDK
Navigation SDK adalah library native Android / iOS yang ditambahkan ke aplikasi driver. Yang bertanggung jawab untuk:
- Mendapatkan lokasi jalan yang diikat dari aplikasi yang menjalankannya. Fitur ini lebih tepat daripada FusedLocationProvider (FLP) Android karena menggunakan jaringan jalan Google untuk memindahkan lokasi ke segmen jalan terdekat sehingga PWT jauh lebih akurat, dan informasi lain dari FLP.
- Pengalaman belokan demi belokan yang memungkinkan pengemudi untuk berkendara secara efisien dari titik A ke titik B dengan memperhitungkan lalu lintas real-time dan pembatasan rute lainnya.
- Memicu peristiwa melalui pemroses peristiwa dan callback terdaftar.
Pemroses
Navigation SDK memiliki banyak pemroses yang dapat Anda gunakan. Di antaranya:
- Perubahan lokasi melalui penyedia RoadSnappedLocation.
- Mengubah rute peristiwa (pengguna melewatkan putar balik, belokan kiri, dll., dan menyimpang dari rute yang direkomendasikan) melalui ReroutingListener.
- Peristiwa kedatangan (pengguna tiba di tujuan yang direncanakan) melalui ArrivalListener.
- Peristiwa jarak yang tersisa dan perkiraan waktu tiba (diberi tahu saat pengemudi akan tiba di tujuan - berdasarkan meter, diberi tahu saat pengemudi akan tiba di tujuan - berdasarkan waktu) keduanya tersedia melalui .RemainingTimeOrDistanceChangedListener
Dalam panduan ini, hanya Penyedia RoadSnappedLocation dan LocationListener-nya yang digunakan.
Solusi Pembatasan Wilayah Sisi Klien
Sekarang, mari kita bahas langkah-langkah untuk membuat kemampuan pembatasan wilayah sisi klien. Pada contoh di bawah, kita memiliki Navigation SDK yang beroperasi dalam mode belokan demi belokan dan poligon yang ditentukan dalam rute yang mewakili pembatasan wilayah kita.
- Pagar virtual disimpan di BigQuery dan diambil oleh backend Anda.
- Backend secara berkala mendorong pembatasan wilayah ke aplikasi drive.
- Pengemudi menavigasi dan aplikasi pengemudi secara rutin memeriksa pembatasan wilayah untuk menemukan pemicu.
- Aplikasi Pengemudi memberi tahu backend tentang peristiwa pemicu agar dapat bertindak.
Saat kendaraan bergerak di sepanjang rute, aplikasi secara rutin memeriksa apakah poligon telah dilanggar. Saat aplikasi mendeteksi bahwa aplikasi telah melewati pembatasan wilayah, pesan akan ditampilkan di UI yang bertuliskan: Pembatasan wilayah dilanggar.
Mengonfigurasi Dependensi untuk Android-Maps-Utils
Solusi ini menggunakan Android-Maps-Utils, sebuah library open-source yang berisi utilitas yang berguna untuk berbagai aplikasi yang menggunakan Google Maps Android API.
Library ini bersifat publik dan dihosting di GitHub serta dapat diakses di:
- Android: https://github.com/googlemaps/android-maps-utils
- iOS: https://github.com/googlemaps/google-maps-ios-utils
Untuk menyertakan library ini di aplikasi Android (cakupan dokumen ini), Anda harus mengubah file build.gradle untuk menyertakannya. Perhatikan bahwa file build.gradle ini ditujukan untuk modul (aplikasi) yang Anda build, bukan di tingkat project.
dependencies {
...
// Utilities for Maps SDK for Android (requires Google Play Services)
implementation 'com.google.maps.android:android-maps-utils:2.3.0'
}
Kemudian, setelah menyinkronkan Gradle dengan file build.gradle terbaru, Anda dapat mengimpor com.google.maps.android.PolyUtil di file Java:
import com.google.android.gms.maps.model.PolygonOptions;
import com.google.maps.android.PolyUtil;
Menentukan Pembatasan Wilayah Anda
Perhatikan bahwa di sini PolygonOptions
juga sedang diimpor. Alasannya adalah ini yang digunakan untuk merepresentasikan poligon:
mPolygonOptions = new PolygonOptions()
.add(new LatLng(29.4264525,-98.4948758))
.add(new LatLng(29.4267029,-98.4948758))
.add(new LatLng(29.4273742,-98.4945822))
.add(new LatLng(29.4264562,-98.4943592))
.fillColor(0x0000ff36)
.strokePattern(Arrays.asList(new Dash(45.0f), new Gap(10.0f)))
.strokeColor(Color.BLUE)
.strokeWidth(5);
Seperti yang dapat Anda lihat di atas, di sini kita mendefinisikan poligon tetap dengan pasangan koordinat - (lintang, bujur) yang telah ditetapkan sebelumnya. Namun dalam skenario nyata, koordinat dan definisi poligon tersebut sering kali berasal dari endpoint backend dan mungkin akan diambil dari jarak jauh. Ini berarti bahwa poligon harus dibuat dengan cepat oleh aplikasi.
Untuk mengetahui detail selengkapnya tentang hal yang dapat ditentukan di PolygonOptions
, lihat di sini.
Anda harus menentukan poligon selama pembuatan Fragmen atau Aktivitas. Contoh:
protected void onCreate(Bundle savedInstanceState) {
...
mPolygonOptions = new PolygonOptions()
.add(new LatLng(29.4264525,-98.4948758))
.add(new LatLng(29.4267029,-98.4948758))
.add(new LatLng(29.4273742,-98.4945822))
.add(new LatLng(29.4264562,-98.4943592))
.fillColor(0x0000ff36)
.strokePattern(Arrays.asList(new Dash(45.0f), new Gap(10.0f)))
.strokeColor(Color.BLUE)
.strokeWidth(5);
...// more code here
}
Memproses Pembaruan Lokasi
Setelah menentukan pembatasan wilayah, Anda hanya perlu membuat pemroses pembaruan lokasi untuk berlangganan ke peristiwa yang disebutkan di atas di SDK Navigasi bernama RoadSnappedLocationProvider
yang akan menampilkan lokasi terbaru perangkat.
mLocListener = new RoadSnappedLocationProvider.LocationListener() {
@Override
public void onLocationChanged(Location snapped) {
LatLng snappedL = new LatLng(snapped.getLatitude(), snapped.getLongitude());
if(PolyUtil.containsLocation(snappedL, mPolygonOptions.getPoints(), true) && !mGeofenceBreached){
Log.d("Geofence", "Vehicle has breached the polygon");
}
}
@Override
public void onRawLocationUpdate(Location location) {
}
};
Dengan Android-Maps-Utils, Anda dapat menggunakan PolyUtil.containsLocation
untuk memeriksa apakah lokasi yang diterima berada di dalam poligon yang telah ditentukan sebelumnya. Dalam contoh di bawah, poligon yang telah ditentukan sebelumnya, yang mewakili pembatasan wilayah, digunakan, tetapi dalam praktiknya Anda mungkin memiliki beberapa poligon dan loop akan diperlukan.
Pendekatan Alternatif
Dokumen ini berfokus pada aplikasi yang ditampilkan kepada klien yang memeriksa pelanggaran pembatasan wilayah (poligon) kustom. Namun, ada beberapa skenario yang mungkin mengharuskan Anda melakukan pemeriksaan tersebut di backend.
Artinya, aplikasi akan melaporkan pembaruan lokasi ke backend, dan backend ini kemudian akan memeriksa apakah kendaraan tersebut melanggar poligon tertentu, sehingga tidak bergantung pada aplikasi klien untuk melakukan validasi.
Kemungkinan solusinya adalah sebagai berikut:
[Execution Environment] Arsitektur pembatasan wilayah sisi server
Contoh arsitektur yang menunjukkan pendekatan sisi server untuk pembatasan wilayah.
- Aplikasi pengemudi, menggunakan Driver SDK, mengirimkan pembaruan lokasi ke Fleet Engine. Pembaruan lokasi dan navigasi dalam aplikasi dilakukan melalui Navigation SDK.
- Fleet Engine menghasilkan update tersebut ke Cloud Logging atau Pub/Sub.
- Backend mengumpulkan sinyal lokasi tersebut.
- Pagar virtual disimpan di BigQuery untuk dianalisis oleh backend.
- Setelah memicu pembatasan wilayah, notifikasi akan dikirim ke Aplikasi Pengemudi.
Dalam arsitektur ini, Driver SDK dan Fleet Engine digunakan. Fleet Engine dapat memunculkan update PubSub dan membuat entri log di Cloud Logging. Dalam kedua kasus tersebut, lokasi kendaraan dapat diambil.
Backend kemudian dapat memantau antrean PubSub atau membaca log dan mengawasi update kendaraan. Kemudian, setiap kali update terjadi (atau setiap beberapa detik, menit, bergantung pada kekritisannya), backend dapat memanggil fungsi GIS BigQuery untuk menentukan apakah kendaraan tertentu berada di dalam atau di luar pembatasan wilayah. Jika satu atau beberapa pembatasan wilayah telah dilanggar, backend dapat bertindak dan memicu pipeline internal atau alur kerja relevan lainnya.
Kesimpulan
Pembatasan wilayah adalah alat canggih yang dapat digunakan untuk berbagai tujuan. Bisnis dapat menggunakan pembatasan wilayah untuk menargetkan pengguna akhir dengan iklan dan promosi yang relevan, menyediakan layanan berdasarkan lokasi, serta meningkatkan keamanan dan keselamatan.
Navigation SDK menyediakan pemroses peristiwa yang berguna dan dapat mendeteksi banyak momen penting selama perjalanan. Perusahaan sering kali memerlukan pembatasan wilayah kustom untuk kasus penggunaan tertentu. Dalam dokumen ini kami mendemonstrasikan cara untuk mencapainya, tetapi kemungkinannya tidak terbatas. Kami menantikan kreasi Anda.
Tindakan Berikutnya
- Lihat webinar Jelajahi, pelajari, dan dapatkan inspirasi dari apa saja yang dapat dilakukan dengan Google Maps Platform.
Bacaan Lebih Lanjut yang Disarankan: