Update README.md

This commit is contained in:
wengki81 2025-06-16 14:20:57 +08:00
parent 5a72d447cb
commit 2e92377eae

203
README.md
View File

@ -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<void>
```
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<void>
### startPositioning()
```typescript
startPositioning(): Promise<void>
```
Menghentikan semua sensor dan positioning.
Memulai pengambilan data lokasi dari GNSS, Wi-Fi, dan IMU secara simultan.
### stopPositioning()
```typescript
stopPositioning(): Promise<void>
```
Menghentikan semua sensor dan proses positioning.
### getLatestPosition()
```typescript
getLatestPosition(): Promise<PositioningData>
```
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<PermissionStatus>
```
Memeriksa dan meminta semua permission yang dibutuhkan oleh plugin.
### configureEdgeToEdge()
```typescript
configureEdgeToEdge(options: {
bgColor: string;
style: 'DARK' | 'LIGHT';
overlay?: boolean;
}): Promise<void>
```
Mengatur status bar dan navigasi bar agar transparan, dengan warna dan icon style sesuai UI.
---
### 📍 getLatestPosition()
## Interfaces
```ts
getLatestPosition() => Promise<PositioningData>
```
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<void>;
}
```
## 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
Lisensi: MIT
Dibuat oleh: Tim Dumon 🇮🇩