Update README.md
This commit is contained in:
parent
5a72d447cb
commit
2e92377eae
203
README.md
203
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<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 🇮🇩
|
||||
Loading…
x
Reference in New Issue
Block a user