first commit
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
/// نموذج بيانات إحداثية 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)';
|
||||
}
|
||||
Reference in New Issue
Block a user