Files
fitness/mobile/lib/models/gps_coordinate.dart
T
2026-10-04 00:19:45 +03:00

67 lines
1.9 KiB
Dart

/// نموذج بيانات إحداثية GPS
/// يمثل نقطة واحدة مع بيانات الارتفاع والدقة والسرعة
class GpsCoordinate {
final double latitude;
final double longitude;
final double? altitude;
final double? accuracy;
final double? speed; // m/s from GPS sensor
final double? heading; // degrees from north
final DateTime timestamp;
GpsCoordinate({
required this.latitude,
required this.longitude,
this.altitude,
this.accuracy,
this.speed,
this.heading,
required this.timestamp,
});
Map<String, dynamic> toMap() {
return {
'latitude': latitude,
'longitude': longitude,
'altitude': altitude,
'accuracy': accuracy,
'speed': speed,
'heading': heading,
'timestamp': timestamp.toIso8601String(),
};
}
factory GpsCoordinate.fromMap(Map<String, dynamic> map) {
return GpsCoordinate(
latitude: (map['latitude'] as num).toDouble(),
longitude: (map['longitude'] as num).toDouble(),
altitude: map['altitude'] != null
? (map['altitude'] as num).toDouble()
: null,
accuracy: map['accuracy'] != null
? (map['accuracy'] as num).toDouble()
: null,
speed:
map['speed'] != null ? (map['speed'] as num).toDouble() : null,
heading: map['heading'] != null
? (map['heading'] as num).toDouble()
: null,
timestamp: DateTime.parse(map['timestamp'] as String),
);
}
/// Check if this coordinate has acceptable accuracy for tracking
bool get isAccurate => accuracy != null && accuracy! <= 25.0;
/// Check if this is a valid GPS coordinate
bool get isValid =>
latitude >= -90 &&
latitude <= 90 &&
longitude >= -180 &&
longitude <= 180;
@override
String toString() =>
'GpsCoordinate(lat: $latitude, lng: $longitude, alt: $altitude, spd: $speed)';
}