Files
maps-saas/packages/tactical_app/lib/models/landmark.dart
T

115 lines
2.7 KiB
Dart

import 'package:flutter/material.dart';
enum LandmarkType {
minaret,
tower,
waterTank,
fort,
mountain,
militaryBase,
grainSilo,
}
class TacticalLandmark {
final String id;
final String name;
final String region;
final LandmarkType type;
final double lat;
final double lng;
final int elevationM;
final String description;
const TacticalLandmark({
required this.id,
required this.name,
required this.region,
required this.type,
required this.lat,
required this.lng,
required this.elevationM,
required this.description,
});
IconData get typeIcon {
switch (type) {
case LandmarkType.minaret:
return Icons.mosque;
case LandmarkType.tower:
return Icons.cell_tower;
case LandmarkType.waterTank:
return Icons.water_drop;
case LandmarkType.fort:
return Icons.castle;
case LandmarkType.mountain:
return Icons.terrain;
case LandmarkType.militaryBase:
return Icons.shield;
case LandmarkType.grainSilo:
return Icons.inventory_2;
}
}
String get typeLabelArabic {
switch (type) {
case LandmarkType.minaret:
return 'مئذنة / مسجد';
case LandmarkType.tower:
return 'برج اتصالات / إرسال';
case LandmarkType.waterTank:
return 'خزان مياه عالي';
case LandmarkType.fort:
return 'قلعة / موقع أثري';
case LandmarkType.mountain:
return 'قمة جبل / نقطة مثلثة';
case LandmarkType.militaryBase:
return 'قاعدة / مطار عسكري';
case LandmarkType.grainSilo:
return 'صوامع حبوب / منشأة عالية';
}
}
Map<String, dynamic> toMap() {
return {
'id': id,
'name': name,
'region': region,
'type': type.name,
'lat': lat,
'lng': lng,
'elevationM': elevationM,
'description': description,
};
}
}
class ResectionObservation {
final TacticalLandmark landmark;
final double observedAzimuthDeg;
final double trueAzimuthDeg;
final DateTime timestamp;
ResectionObservation({
required this.landmark,
required this.observedAzimuthDeg,
required this.trueAzimuthDeg,
DateTime? timestamp,
}) : timestamp = timestamp ?? DateTime.now();
}
class ResectionResult {
final double lat;
final double lng;
final double estimatedAccuracyMeters;
final List<ResectionObservation> observations;
final Map<String, double> distanceToLandmarksKm;
const ResectionResult({
required this.lat,
required this.lng,
required this.estimatedAccuracyMeters,
required this.observations,
required this.distanceToLandmarksKm,
});
}