diff --git a/README.md b/README.md index e29475c..31f7bfd 100644 --- a/README.md +++ b/README.md @@ -1,82 +1,150 @@ # dumon-geolocation -Plugin Capacitor Android untuk positioning real-time berbasis GNSS multi-konstelasi, Wi-Fi RTT/RSSI, dan IMU (Accelerometer + Gyroscope), dilengkapi dengan sensor fusion (Kalman Filter) dan deteksi lokasi palsu. +Capacitor Plugin untuk Android yang menyediakan **real-time high-accuracy positioning** menggunakan kombinasi: +- ๐Ÿ“ก **GNSS multi-konstelasi** (GPS, GLONASS, BeiDou, Galileo) +- ๐Ÿ“ถ **Wi-Fi RTT / RSSI** +- ๐ŸŽฏ **IMU Sensor** (Accelerometer, Gyroscope, Rotation) +- โš™๏ธ **Kalman Filter Fusion** dan **Forward Prediction** +- ๐Ÿ›ก๏ธ **Deteksi Lokasi Palsu (Mock Location Detection)** -## ๐Ÿ“ฆ Install +--- + +## ๐Ÿ“ฆ Instalasi ```bash -npm install dumon-geolocation +npm install git+https://git.jayacita.com/wengki/dumon-geolocation.git +``` + +Jika terjadi konflik dependency: +```bash +npm install git+https://git.jayacita.com/wengki/dumon-geolocation.git --legacy-peer-deps +``` + +Kemudian: +```bash npx cap sync ``` -## ๐Ÿš€ API +--- -### ๐Ÿ“ก startPositioning() +## Permissions -```ts -startPositioning() => Promise -``` +Plugin ini memerlukan izin berikut: +- ACCESS_FINE_LOCATION +- ACCESS_COARSE_LOCATION +- ACCESS_WIFI_STATE +- CHANGE_WIFI_STATE +- NEARBY_WIFI_DEVICES (untuk Android 13+) -Memulai pengambilan data posisi secara real-time dari GNSS, Wi-Fi, dan IMU. +Gunakan API checkAndRequestPermissions() sebelum memulai positioning. --- -### ๐Ÿ›‘ stopPositioning() +## API -```ts -stopPositioning() => Promise +### startPositioning() + +```typescript +startPositioning(): Promise ``` -Menghentikan semua sensor dan positioning. +Memulai pengambilan data lokasi dari GNSS, Wi-Fi, dan IMU secara simultan. + +### stopPositioning() + +```typescript +stopPositioning(): Promise +``` + +Menghentikan semua sensor dan proses positioning. + +### getLatestPosition() + +```typescript +getLatestPosition(): Promise +``` + +Mengembalikan posisi terkini yang telah melalui proses fusion/prediksi. + +### addListener(โ€˜onPositionUpdateโ€™, โ€ฆ) + +```typescript +addListener('onPositionUpdate', (data: PositioningData) => void): PluginListenerHandle +``` + +Menerima update posisi secara real-time (dengan debounce + threshold perubahan posisi/speed/direction). + +### checkAndRequestPermissions() + +```typescript +checkAndRequestPermissions(): Promise +``` + +Memeriksa dan meminta semua permission yang dibutuhkan oleh plugin. + +### configureEdgeToEdge() + +```typescript +configureEdgeToEdge(options: { + bgColor: string; + style: 'DARK' | 'LIGHT'; + overlay?: boolean; +}): Promise +``` + +Mengatur status bar dan navigasi bar agar transparan, dengan warna dan icon style sesuai UI. --- -### ๐Ÿ“ getLatestPosition() +## Interfaces -```ts -getLatestPosition() => Promise -``` +PositioningData -Mengembalikan data posisi terkini yang telah difusi. - ---- - -### ๐Ÿ”„ addListener('onPositionUpdate', ...) - -```ts -addListener(eventName: 'onPositionUpdate', listenerFunc: (data: PositioningData) => void): PluginListenerHandle -``` - -Listener untuk update posisi secara berkala (real-time). - ---- - -## ๐Ÿงพ Interfaces - -### PositioningData - -```ts +```typescript interface PositioningData { - source: 'GNSS' | 'WIFI' | 'FUSED' | 'MOCK'; + source: 'GNSS' | 'WIFI' | 'FUSED' | 'MOCK' | 'PREDICTED'; + timestamp: number; latitude: number; longitude: number; accuracy: number; speed: number; acceleration: number; directionRad: number; - timestamp: number; isMocked: boolean; - - // Optional raw sensor data (available internally) - // imuData?: ImuData; - // gnssData?: SatelliteStatus; - // wifiData?: WifiAp[]; + predicted?: boolean; } ``` -### ImuData +PermissionStatus + +```typescript +interface PermissionStatus { + location: 'granted' | 'denied'; + wifi: 'granted' | 'denied'; +} +``` + +--- + +## Fusion dan Prediksi + +- Fusion posisi dilakukan menggunakan Kalman Filter sederhana untuk latitude & longitude. +- Saat GNSS tidak tersedia (signal hilang), plugin akan melakukan forward prediction berbasis speed + heading dari IMU selama 1 detik ke depan. + +--- + +## Detail Sensor (untuk pengembangan lanjutan) + +> gnssData, imuData, dan wifiData tersedia dalam payload internal dan bisa diaktifkan untuk debug. + +```typescript +// Dapat disertakan di masa depan: +interface SatelliteStatus { + satellitesInView: number; + usedInFix: number; + constellationCounts: { [key: string]: number }; +} -```ts interface ImuData { accelX: number; accelY: number; @@ -88,21 +156,7 @@ interface ImuData { acceleration: number; directionRad: number; } -``` -### SatelliteStatus - -```ts -interface SatelliteStatus { - satellitesInView: number; - usedInFix: number; - constellationCounts: { [key: string]: number }; -} -``` - -### WifiAp - -```ts interface WifiAp { ssid: string; bssid: string; @@ -111,23 +165,28 @@ interface WifiAp { } ``` -### PluginListenerHandle +--- -```ts -interface PluginListenerHandle { - remove: () => Promise; -} -``` +## Catatan + +- Hanya mendukung platform Android. +- Gunakan bersama @capacitor/geolocation jika ingin membandingkan hasil native vs Dumon. +- Posisi dipancarkan setiap 1000ms atau saat terjadi perubahan signifikan (jarak, kecepatan, arah). +- directionRad dalam radian relatif terhadap utara. +- Fitur Mock Location Detection aktif secara default. --- -## โ„น๏ธ Catatan -- Plugin hanya mendukung platform Android saat ini. -- Ideal digunakan bersama dengan plugin `Geolocation` bawaan Capacitor untuk fallback atau perbandingan. -- Sensor fusion berbasis Kalman Filter (versi sederhana). -- `directionRad` merujuk arah dalam radian relatif terhadap utara (azimuth). -- Output `isMocked` berguna untuk deteksi lokasi palsu. +## Testing (example-app) + +Contoh implementasi tersedia di folder /example-app dengan tombol: + +- Start Positioning +- Stop Positioning +- Get Latest Position +- Realtime log via onPositionUpdate --- -Lisensi: MIT โ€“ Dibuat oleh Tim Dumon \ No newline at end of file +Lisensi: MIT +Dibuat oleh: Tim Dumon ๐Ÿ‡ฎ๐Ÿ‡ฉ \ No newline at end of file