62 lines
1.5 KiB
Dart
62 lines
1.5 KiB
Dart
import 'dart:async';
|
||
|
||
/// Egyetlen mért pozíció egységes reprezentációja.
|
||
/// Mindkét forrás (telefon GPS, BLE GNSS) ezt adja vissza.
|
||
class SourcePosition {
|
||
final double latitude;
|
||
final double longitude;
|
||
|
||
/// Ellipszoidi magasság [m] — telefonnál a platform adja,
|
||
/// BLE GNSS-nél a NMEA h = H + N értéke.
|
||
final double? altitude;
|
||
|
||
/// Vízszintes pontossági becslés [m] (1σ).
|
||
final double? accuracy;
|
||
|
||
/// Vertikális pontossági becslés [m].
|
||
final double? verticalAccuracy;
|
||
|
||
/// Pillanatnyi sebesség [m/s].
|
||
final double? speed;
|
||
|
||
/// Irányszög [fok, 0–360, É=0].
|
||
final double? heading;
|
||
|
||
final DateTime timestamp;
|
||
|
||
/// Forrás azonosítója a naplókhoz.
|
||
final String source;
|
||
|
||
const SourcePosition({
|
||
required this.latitude,
|
||
required this.longitude,
|
||
this.altitude,
|
||
this.accuracy,
|
||
this.verticalAccuracy,
|
||
this.speed,
|
||
this.heading,
|
||
required this.timestamp,
|
||
required this.source,
|
||
});
|
||
|
||
@override
|
||
String toString() =>
|
||
'SourcePosition($source @ $latitude, $longitude, alt=${altitude?.toStringAsFixed(1)}m)';
|
||
}
|
||
|
||
/// Absztrakt helymeghatározási forrás.
|
||
/// Implementációk: [PhoneGpsSource], [BleGnssSource].
|
||
abstract class LocationSource {
|
||
/// Emberbarát név (pl. "Telefon GPS", "TiGNSS Rover").
|
||
String get displayName;
|
||
|
||
/// Elindítja a pozíció-streamet.
|
||
Stream<SourcePosition> get positionStream;
|
||
|
||
/// Igaz, ha a forrás jelenleg aktív / kapcsolódott.
|
||
bool get isAvailable;
|
||
|
||
/// Leállítja és felszabadítja az erőforrásokat.
|
||
Future<void> dispose();
|
||
}
|