Új nmea mondatok: gsa, gsv, műhold info osztály
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
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)';
|
||||
}
|
||||
Reference in New Issue
Block a user