MobilApp/lib/models/satellite_info.dart

67 lines
2.1 KiB
Dart
Raw Normal View History

import 'dart:math' as math;
// ─── SatelliteInfo modell ──────────────────────────────────────────────────
/// Egyetlen látható műhold adatai — a skyplot és az SNR diagram alapja.
class SatelliteInfo {
/// Műhold PRN/SVID azonosítója
final int prn;
/// Eleváció fokban (090°, 90 = zenit)
final int elevation;
/// Azimut fokban (0359°, 0/360 = É, 90 = K)
final int azimuth;
/// Jelerősség dB-Hz-ben (099, 0 = nem tracking)
final int snr;
/// Rendszer neve: GPS, GLONASS, Galileo, BeiDou, Mixed
final String system;
const SatelliteInfo({
required this.prn,
required this.elevation,
required this.azimuth,
required this.snr,
required this.system,
});
// ── Minősítési segédek ────────────────────────────────────────────
/// Erős jel — fixben megbízhatóan részt vesz
bool get isStrong => snr >= 40;
/// Használható jel — fixben részt vesz
bool get isUsed => snr >= 30;
/// Gyenge de látható jel
bool get isWeak => snr > 0 && snr < 30;
/// Egyáltalán látható-e (snr > 0)
bool get isVisible => snr > 0;
// ── Polár koordináta számítás a skyplot CustomPainter-hez ────────
/// Normalizált sugár (0.0 = zenit, 1.0 = horizont)
double get polarRadius => 1.0 - (elevation / 90.0);
/// Szög radiánban a polár koordinátához
/// (azimut → matematikai szög: É=felső, K=jobb)
double get polarAngleRad => (azimuth - 90) * math.pi / 180.0;
/// Polár koordináta pixel pozíciójának kiszámítása
/// [center] a kör középpontja, [radius] a horizont kör sugara
({double dx, double dy}) toOffset(
double centerX, double centerY, double radius) {
return (
dx: centerX + radius * polarRadius * math.cos(polarAngleRad),
dy: centerY + radius * polarRadius * math.sin(polarAngleRad),
);
}
@override
String toString() =>
'SatelliteInfo($system PRN$prn elev=$elevation° az=$azimuth° snr=$snr)';
}