67 lines
2.1 KiB
Dart
67 lines
2.1 KiB
Dart
|
|
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 (0–90°, 90 = zenit)
|
|||
|
|
final int elevation;
|
|||
|
|
|
|||
|
|
/// Azimut fokban (0–359°, 0/360 = É, 90 = K)
|
|||
|
|
final int azimuth;
|
|||
|
|
|
|||
|
|
/// Jelerősség dB-Hz-ben (0–99, 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)';
|
|||
|
|
}
|