/// نموذج بيانات إحداثية 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 toMap() { return { 'latitude': latitude, 'longitude': longitude, 'altitude': altitude, 'accuracy': accuracy, 'speed': speed, 'heading': heading, 'timestamp': timestamp.toIso8601String(), }; } factory GpsCoordinate.fromMap(Map 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)'; }