MapSurvey - refraktorálás

This commit is contained in:
2026-05-24 14:50:31 +02:00
parent 53888c9dcb
commit ce8b539be3
5 changed files with 209 additions and 355 deletions
@@ -64,8 +64,8 @@ class MapSurveyController extends GetxController {
RxDouble get gpsLongitudeError => _gnss.longitudeError;
RxDouble get gpsAltitudeError => _gnss.altitudeError;
Rx<DateTime> get gpsDateTime => _gnss.gpsDateTime;
RxBool get gpsIsConnected =>
(_gnss.connectionState.value == GnssConnectionState.connected).obs;
bool get gpsIsConnected =>
_gnss.connectionState.value == GnssConnectionState.connected;
// NTRIP állapot
RxBool get ntripIsConnected => _ntrip.isConnected;
@@ -85,6 +85,9 @@ class MapSurveyController extends GetxController {
Rx<Eov> eov = Eov(0, 0).obs;
Rx<double?> eovHeight = (0.0 as double?).obs;
final eovY = 0.0.obs;
final eovX = 0.0.obs;
// DMS formátum
RxInt latDegree = 0.obs;
RxInt latMin = 0.obs;
@@ -101,17 +104,18 @@ class MapSurveyController extends GetxController {
RxBool isMapMoveToCenter = true.obs;
RxBool mapIsInitialized = false.obs;
late final MapController mapController;
final MapController mapController = MapController();
final currentLocationMarker = <Marker>[];
final pointNotesMarker = <Marker>[];
final pointsToMeasureMarker = <Marker>[];
final pointsToMeasureLabel = <PolyWidget>[];
final pointsToMeasureDropDownMenuItem = <DropdownMenuItem<int>>[];
final currentLocationMarker = <Marker>[].obs;
final pointNotesMarker = <Marker>[].obs;
final pointsToMeasureMarker = <Marker>[].obs;
final pointsToMeasureLabel = <PolyWidget>[].obs;
final pointsToMeasureDropDownMenuItem = <DropdownMenuItem<int>>[].obs;
// ── Pont adatok ───────────────────────────────────────────────────
List<PointToMeasure> pointsToMeasure = [];
List<PointWithDescription> pointWithDescriptionList = [];
final RxList<PointToMeasure> pointsToMeasure = <PointToMeasure>[].obs;
final RxList<PointWithDescription> pointWithDescriptionList =
<PointWithDescription>[].obs;
RxInt pointsToMeasureSelectedValue = (-1).obs;
RxDouble distance = 0.0.obs;
@@ -149,22 +153,17 @@ class MapSurveyController extends GetxController {
// ─────────────────────────────────────────────────────────────────
@override
void onInit() async {
void onInit() {
super.onInit();
_initAsync();
}
Future<void> _initAsync() async {
prefs = await SharedPreferences.getInstance();
geoidGrid = await GeoidGrid.load('assets/Grids/geoid_eht2014.gtx');
mapController = MapController();
// ── NTRIP RTCM adat → GNSS vevő ──────────────────────────────
NtripService.to.onRtcmData = (data) {
GnssService.to.sendToReceiver(data);
};
// ── GnssService pozíció változás → EOV, marker, NTRIP GGA ────
_gnssUpdateSub = _gnss.onDataUpdated.listen((_) {
_onGnssUpdate();
});
NtripService.to.onRtcmData = (data) => GnssService.to.sendToReceiver(data);
_gnssUpdateSub = _gnss.onDataUpdated.listen((_) => _onGnssUpdate());
// ── Supabase realtime ─────────────────────────────────────────
_supaChannel = Supabase.instance.client
@@ -193,18 +192,19 @@ class MapSurveyController extends GetxController {
}
@override
void onClose() async {
super.onClose();
void onClose() {
_phoneLocationSub?.cancel();
_gnssUpdateSub?.cancel();
await _supaChannel?.unsubscribe();
final f = _supaChannel?.unsubscribe();
if (f != null) unawaited(f);
pointIdController.dispose();
pointDescriptionController.dispose();
gpsHeightController.dispose();
pointPrefixController.dispose();
pointPostfixController.dispose();
super.onClose();
}
// ─────────────────────────────────────────────────────────────────
@@ -220,7 +220,11 @@ class MapSurveyController extends GetxController {
final sep = _gnss.geoidSeparation.value;
// EOV konverzió
eov.value = ConvertCoordinate.ConvertWgsToEov(lat, lon);
final converted = ConvertCoordinate.ConvertWgsToEov(lat, lon);
eov.value = converted;
eovY.value = converted.Y.toDouble();
eovX.value = converted.X.toDouble();
eovHeight.value = geoidGrid.toEovHeight(lat, lon, alt, sep);
// DMS
@@ -254,10 +258,6 @@ class MapSurveyController extends GetxController {
);
}
// ─────────────────────────────────────────────────────────────────
// Telefon GPS fallback
// ─────────────────────────────────────────────────────────────────
// ─────────────────────────────────────────────────────────────────
// Térkép vezérlők
// ─────────────────────────────────────────────────────────────────
@@ -288,21 +288,23 @@ class MapSurveyController extends GetxController {
}
void _updateCurrentLocationMarker() {
currentLocationMarker.clear();
currentLocationMarker.add(Marker(
point: LatLng(currentLatitude.value, currentLongitude.value),
width: 15.0,
height: 15.0,
child: Container(
currentLocationMarker.assignAll([
Marker(
point: LatLng(currentLatitude.value, currentLongitude.value),
width: 15.0,
height: 15.0,
decoration: BoxDecoration(
color: getCurrentLocationMarkerColor(_gnss.gpsQuality.value),
shape: BoxShape.circle,
border: Border.all(width: 1.5, color: Colors.white),
child: Container(
width: 15.0,
height: 15.0,
decoration: BoxDecoration(
color: getCurrentLocationMarkerColor(_gnss.gpsQuality.value),
shape: BoxShape.circle,
border: Border.all(width: 1.5, color: Colors.white),
),
),
),
));
)
]);
if (isMapMoveToCenter.value) {
mapController.move(
LatLng(currentLatitude.value, currentLongitude.value),
@@ -622,7 +624,7 @@ class MapSurveyController extends GetxController {
// ─────────────────────────────────────────────────────────────────
double calculateDistance(LatLng start, LatLng end) {
const r = 6371.0;
const r = 6371000.0;
final lat1 = start.latitude * (pi / 180);
final lon1 = start.longitude * (pi / 180);
final lat2 = end.latitude * (pi / 180);
@@ -1,13 +1,8 @@
import 'dart:io';
import 'dart:math';
import 'package:file_picker/file_picker.dart';
import 'package:flutter/material.dart';
import 'package:flutter_map_polywidget/flutter_map_polywidget.dart';
import 'package:get/get.dart';
import 'package:flutter_map/flutter_map.dart';
import 'package:latlong2/latlong.dart';
import 'package:rive/rive.dart';
import 'package:terepi_seged/pages/map_survey/presentations/controllers/map_survey_controller.dart';
import 'package:terepi_seged/pages/map_survey/presentations/views/settings_dialog.dart';
import 'package:terepi_seged/utils/rive_utils.dart';
@@ -24,12 +19,29 @@ class MapSurveyView extends GetView<MapSurveyController> {
@override
Widget build(BuildContext context) {
return Stack(children: [
const SharedMapWidget(),
SharedMapWidget(
mapController: controller.mapController,
currentZoom: controller.currentZoom,
onZoomIn: controller.mapZoomIn,
onZoomOut: controller.mapZoomOut,
onCenterOnGps: controller.isMapMoveToCenter,
),
Positioned(
top: 8,
right: 60,
left: 8,
child: CoordinatePanel.fromController(controller),
child: CoordinatePanel(
eovY: controller.eovY,
eovX: controller.eovX,
horError: controller.gpsLatitudeError,
vertError: controller.gpsAltitudeError,
altitudeMsl: controller.gpsAltitude,
geoidSeparation: controller.gpsGeoidSeparation,
ntripConnected: controller.ntripIsConnected,
ntripBytes: controller.ntripReceivedData,
ntripPackets: controller.ntripDataPacketNumbers,
ggaPackets: controller.ggaSenDataPacketNumber,
),
),
// Positioned(top: 8, left: 0, right: 0, child: _ModeSelector()),
// Positioned(