70 lines
2.0 KiB
TypeScript
70 lines
2.0 KiB
TypeScript
import { RedisService } from '../common/redis.service';
|
|
export interface ArtilleryMissionRequest {
|
|
gunLat: number;
|
|
gunLng: number;
|
|
targetLat: number;
|
|
targetLng: number;
|
|
gunElevationOffset?: number;
|
|
targetElevationOffset?: number;
|
|
chargeType?: string;
|
|
muzzleVelocity?: number;
|
|
caliber?: string;
|
|
}
|
|
export interface TacticalSymbol {
|
|
id: string;
|
|
type: 'friendly' | 'hostile' | 'neutral' | 'unknown' | 'radar' | 'artillery' | 'minefield' | 'checkpoint' | 'hlz' | 'op';
|
|
name: string;
|
|
name_ar: string;
|
|
lat: number;
|
|
lng: number;
|
|
elevation?: number;
|
|
notes?: string;
|
|
timeAdded: string;
|
|
}
|
|
export declare class TacticalService {
|
|
private readonly redisService;
|
|
private readonly logger;
|
|
constructor(redisService: RedisService);
|
|
calculateArtilleryFireMission(dto: ArtilleryMissionRequest): Promise<{
|
|
fireMissionId: string;
|
|
caliber: string;
|
|
muzzleVelocityMs: number;
|
|
distanceMeters: number;
|
|
distanceKm: number;
|
|
azimuthDegrees: number;
|
|
azimuthMils: number;
|
|
gunElevationMeters: number;
|
|
targetElevationMeters: number;
|
|
apexAltitudeMeters: number;
|
|
timeOfFlightSeconds: number;
|
|
lowAngle: {
|
|
degrees: number;
|
|
mils: number;
|
|
};
|
|
highAngle: {
|
|
degrees: number;
|
|
mils: number;
|
|
};
|
|
hasCrestClearance: boolean;
|
|
criticalObstacle: any;
|
|
trajectoryPoints: any[];
|
|
}>;
|
|
assessHelicopterLandingZones(lat: number, lng: number, radiusMeters?: number): Promise<{
|
|
centerLat: number;
|
|
centerLng: number;
|
|
searchRadiusMeters: number;
|
|
totalAssessed: number;
|
|
suitableCount: number;
|
|
zones: any[];
|
|
}>;
|
|
saveScenario(name: string, symbols: TacticalSymbol[]): Promise<{
|
|
success: boolean;
|
|
count: number;
|
|
name: string;
|
|
}>;
|
|
getScenario(name: string): Promise<TacticalSymbol[]>;
|
|
private haversineDistance;
|
|
private calculateBearing;
|
|
private estimateElevation;
|
|
}
|