Update README.md
This commit is contained in:
parent
5a72d447cb
commit
2e92377eae
203
README.md
203
README.md
@ -1,82 +1,150 @@
|
|||||||
# dumon-geolocation
|
# 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
|
```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
|
npx cap sync
|
||||||
```
|
```
|
||||||
|
|
||||||
## 🚀 API
|
---
|
||||||
|
|
||||||
### 📡 startPositioning()
|
## Permissions
|
||||||
|
|
||||||
```ts
|
Plugin ini memerlukan izin berikut:
|
||||||
startPositioning() => Promise<void>
|
- 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
|
### startPositioning()
|
||||||
stopPositioning() => Promise<void>
|
|
||||||
|
```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
|
PositioningData
|
||||||
getLatestPosition() => Promise<PositioningData>
|
|
||||||
```
|
|
||||||
|
|
||||||
Mengembalikan data posisi terkini yang telah difusi.
|
```typescript
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 🔄 addListener('onPositionUpdate', ...)
|
|
||||||
|
|
||||||
```ts
|
|
||||||
addListener(eventName: 'onPositionUpdate', listenerFunc: (data: PositioningData) => void): PluginListenerHandle
|
|
||||||
```
|
|
||||||
|
|
||||||
Listener untuk update posisi secara berkala (real-time).
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🧾 Interfaces
|
|
||||||
|
|
||||||
### PositioningData
|
|
||||||
|
|
||||||
```ts
|
|
||||||
interface PositioningData {
|
interface PositioningData {
|
||||||
source: 'GNSS' | 'WIFI' | 'FUSED' | 'MOCK';
|
source: 'GNSS' | 'WIFI' | 'FUSED' | 'MOCK' | 'PREDICTED';
|
||||||
|
timestamp: number;
|
||||||
latitude: number;
|
latitude: number;
|
||||||
longitude: number;
|
longitude: number;
|
||||||
accuracy: number;
|
accuracy: number;
|
||||||
speed: number;
|
speed: number;
|
||||||
acceleration: number;
|
acceleration: number;
|
||||||
directionRad: number;
|
directionRad: number;
|
||||||
timestamp: number;
|
|
||||||
isMocked: boolean;
|
isMocked: boolean;
|
||||||
|
predicted?: boolean;
|
||||||
// Optional raw sensor data (available internally)
|
|
||||||
// imuData?: ImuData;
|
|
||||||
// gnssData?: SatelliteStatus;
|
|
||||||
// wifiData?: WifiAp[];
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### 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 {
|
interface ImuData {
|
||||||
accelX: number;
|
accelX: number;
|
||||||
accelY: number;
|
accelY: number;
|
||||||
@ -88,21 +156,7 @@ interface ImuData {
|
|||||||
acceleration: number;
|
acceleration: number;
|
||||||
directionRad: number;
|
directionRad: number;
|
||||||
}
|
}
|
||||||
```
|
|
||||||
|
|
||||||
### SatelliteStatus
|
|
||||||
|
|
||||||
```ts
|
|
||||||
interface SatelliteStatus {
|
|
||||||
satellitesInView: number;
|
|
||||||
usedInFix: number;
|
|
||||||
constellationCounts: { [key: string]: number };
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### WifiAp
|
|
||||||
|
|
||||||
```ts
|
|
||||||
interface WifiAp {
|
interface WifiAp {
|
||||||
ssid: string;
|
ssid: string;
|
||||||
bssid: string;
|
bssid: string;
|
||||||
@ -111,23 +165,28 @@ interface WifiAp {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### PluginListenerHandle
|
---
|
||||||
|
|
||||||
```ts
|
## Catatan
|
||||||
interface PluginListenerHandle {
|
|
||||||
remove: () => Promise<void>;
|
- 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
|
## Testing (example-app)
|
||||||
- Plugin hanya mendukung platform Android saat ini.
|
|
||||||
- Ideal digunakan bersama dengan plugin `Geolocation` bawaan Capacitor untuk fallback atau perbandingan.
|
Contoh implementasi tersedia di folder /example-app dengan tombol:
|
||||||
- Sensor fusion berbasis Kalman Filter (versi sederhana).
|
|
||||||
- `directionRad` merujuk arah dalam radian relatif terhadap utara (azimuth).
|
- Start Positioning
|
||||||
- Output `isMocked` berguna untuk deteksi lokasi palsu.
|
- 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