GNSS szervíz refraktorálás, hibajavítás, PhoneGpsConnection osztály

This commit is contained in:
2026-05-17 15:04:48 +02:00
parent ee0f90e247
commit 24a6b7d513
8 changed files with 221 additions and 112 deletions
@@ -3,11 +3,9 @@ import 'dart:convert';
import 'dart:io';
import 'dart:math';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:file_picker/file_picker.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_bluetooth_serial/flutter_bluetooth_serial.dart';
import 'package:flutter_map/flutter_map.dart';
// import 'package:flutter_map_geojson/flutter_map_geojson.dart';
import 'package:flutter_map_polywidget/flutter_map_polywidget.dart';
@@ -16,25 +14,16 @@ import 'package:get/get.dart';
import 'package:intl/intl.dart';
// import 'package:location/location.dart';
import 'package:latlong2/latlong.dart';
import 'package:nmea/nmea.dart';
import 'package:path_provider/path_provider.dart';
import 'package:permission_handler/permission_handler.dart'
as permission_handler;
import 'package:share_plus/share_plus.dart';
import 'package:supabase_flutter/supabase_flutter.dart';
import 'package:terepi_seged/controls/geoid_grid.dart';
import 'package:terepi_seged/eov/convert_coordinate.dart';
import 'package:terepi_seged/eov/eov.dart';
import 'package:terepi_seged/gnss_sentences/gngga.dart';
import 'package:terepi_seged/gnss_sentences/gngst.dart';
import 'package:terepi_seged/gnss_sentences/gnrmc.dart';
import 'package:terepi_seged/models/measured_point.dart';
import 'package:terepi_seged/models/point_to_measure.dart';
import 'package:terepi_seged/models/point_with_description_model.dart';
import 'package:proj4dart/proj4dart.dart' as proj4;
import 'package:shared_preferences/shared_preferences.dart';
import 'package:terepi_seged/pages/map_survey/presentations/views/measured_points_table_dialog.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:terepi_seged/services/coord_converter_service.dart';
import 'package:terepi_seged/services/gnss/gnss_connection.dart';
import 'package:terepi_seged/services/gnss/gnss_device_service.dart';
@@ -195,7 +184,6 @@ class MapSurveyController extends GetxController {
void onReady() async {
super.onReady();
await _initPhoneGps();
await _initStorage();
gpsHeightController.text = '1.8';
@@ -255,11 +243,6 @@ class MapSurveyController extends GetxController {
currentLongitude.value = lon;
_updateCurrentLocationMarker();
// Telefon GPS leállítása ha külső GPS van
if (_phoneLocationSub != null) {
_stopPhoneGps();
}
// NTRIP GGA küldés
NtripService.to.onGgaReceived(
_gnss.lastGgaLine.value,
@@ -271,66 +254,6 @@ class MapSurveyController extends GetxController {
// Telefon GPS fallback
// ─────────────────────────────────────────────────────────────────
Future<void> _initPhoneGps() async {
// Egyszeri kezdő pozíció
try {
final last = await Geolocator.getLastKnownPosition();
if (last != null) {
currentLatitude.value = last.latitude;
currentLongitude.value = last.longitude;
GnssService.to.latitude.value = last.latitude;
GnssService.to.longitude.value = last.longitude;
GnssService.to.gpsQuality.value = 1;
mapController.move(
LatLng(last.latitude, last.longitude),
currentZoom.value,
);
_updateCurrentLocationMarker();
}
} catch (_) {}
// Folyamatos stream ha nincs külső GPS
if (_gnss.connectionState.value != GnssConnectionState.connected) {
await _startPhoneGps();
}
}
Future<void> _startPhoneGps() async {
if (_phoneLocationSub != null) return;
final permission = await Geolocator.checkPermission();
if (permission == LocationPermission.denied ||
permission == LocationPermission.deniedForever) return;
final serviceEnabled = await Geolocator.isLocationServiceEnabled();
if (!serviceEnabled) return;
_phoneLocationSub = Geolocator.getPositionStream(
locationSettings: const LocationSettings(
accuracy: LocationAccuracy.high,
distanceFilter: 0,
),
).listen((pos) {
// Leáll ha közben csatlakozott a külső GPS
if (_gnss.connectionState.value == GnssConnectionState.connected) {
_stopPhoneGps();
return;
}
currentLatitude.value = pos.latitude;
currentLongitude.value = pos.longitude;
GnssService.to.latitude.value = pos.latitude;
GnssService.to.longitude.value = pos.longitude;
GnssService.to.gpsQuality.value = 1;
_updateCurrentLocationMarker();
});
}
void _stopPhoneGps() {
_phoneLocationSub?.cancel();
_phoneLocationSub = null;
GnssService.to.gpsQuality.value = 0;
}
// ─────────────────────────────────────────────────────────────────
// Térkép vezérlők
// ─────────────────────────────────────────────────────────────────