feat: Add Intaleq Native Android Kotlin & iOS Swift SDKs, Incline slope routing, Topographic contours and modular tactical app
This commit is contained in:
@@ -0,0 +1,114 @@
|
||||
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,
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user