Új térkép widget, melyet több oldal is használ
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import 'dart:async';
|
||||
import 'dart:convert';
|
||||
import 'dart:io';
|
||||
import 'dart:math';
|
||||
import 'dart:math' as math;
|
||||
|
||||
import 'package:cloud_firestore/cloud_firestore.dart';
|
||||
import 'package:file_picker/file_picker.dart';
|
||||
@@ -26,6 +26,7 @@ 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;
|
||||
@@ -33,6 +34,11 @@ 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';
|
||||
|
||||
enum MapSurveyMode {
|
||||
measure, // Bemérés — ahol vagyok, azt rögzítem
|
||||
stakeout, // Kitűzés — adott ponthoz navigálok, majd rögzítem
|
||||
}
|
||||
|
||||
class MapSurveyController extends GetxController {
|
||||
// String gpsAddress = "E8:31:CD:14:8B:B2";
|
||||
// String gpsAddress = "98:CD:AC:62:FF:4E";
|
||||
@@ -140,6 +146,32 @@ class MapSurveyController extends GetxController {
|
||||
late Session? session;
|
||||
late User? user;
|
||||
|
||||
final mode = MapSurveyMode.measure.obs;
|
||||
|
||||
// ── Közös adatok ──────────────────────────────────────────────
|
||||
final currentEovY = 0.0.obs;
|
||||
final currentEovX = 0.0.obs;
|
||||
final currentEovZ = 0.0.obs;
|
||||
final accuracy = 0.0.obs;
|
||||
//final gpsQuality = 0.obs;
|
||||
|
||||
// ── Kitűzés adatok — csak stakeout módban aktív ───────────────
|
||||
final targetEovY = 0.0.obs;
|
||||
final targetEovX = 0.0.obs;
|
||||
final targetName = ''.obs;
|
||||
|
||||
// Eltérés — valós időben számolódik
|
||||
double get deltaY => currentEovY.value - targetEovY.value;
|
||||
double get deltaX => currentEovX.value - targetEovX.value;
|
||||
double get distanceToTarget => math.sqrt(deltaY * deltaY + deltaX * deltaX);
|
||||
|
||||
// Belül a célpont határán vagyunk-e (pl. 0.05 m)
|
||||
bool get isOnTarget => distanceToTarget < 0.05;
|
||||
|
||||
final measuredPoints1 = <MeasuredPoint>[].obs;
|
||||
|
||||
static MapSurveyController get to => Get.find();
|
||||
|
||||
@override
|
||||
void onInit() async {
|
||||
super.onInit();
|
||||
@@ -741,7 +773,8 @@ class MapSurveyController extends GetxController {
|
||||
eov.value.X,
|
||||
gpsLatitude.value,
|
||||
gpsLongitude.value,
|
||||
max(gpsLatitudeError.value, gpsLongitudeError.value),
|
||||
math.max(
|
||||
gpsLatitudeError.value, gpsLongitudeError.value),
|
||||
gpsAltitudeError.value));
|
||||
print(
|
||||
"pointWithDescriptionList -> ${pointWithDescriptionList.length}");
|
||||
@@ -760,7 +793,7 @@ class MapSurveyController extends GetxController {
|
||||
Border.all(width: 1.0, color: Colors.black)),
|
||||
)));
|
||||
await dataFile.writeAsString(
|
||||
"$pointId;$gpsDateTime;${pointDescriptionController.text};${formatEovForFile.format(eov.value.Y)};${formatEovForFile.format(eov.value.X)};$gpsLatitude;$gpsLongitude;$gpsAltitude;${max(gpsLatitudeError.value, gpsLongitudeError.value)};$gpsAltitudeError;${gpsHeightController.text}\r\n",
|
||||
"$pointId;$gpsDateTime;${pointDescriptionController.text};${formatEovForFile.format(eov.value.Y)};${formatEovForFile.format(eov.value.X)};$gpsLatitude;$gpsLongitude;$gpsAltitude;${math.max(gpsLatitudeError.value, gpsLongitudeError.value)};$gpsAltitudeError;${gpsHeightController.text}\r\n",
|
||||
mode: FileMode.append);
|
||||
|
||||
_measuredPoints.add({
|
||||
@@ -772,8 +805,8 @@ class MapSurveyController extends GetxController {
|
||||
"eovY": formatEovForFile.format(eov.value.Y),
|
||||
"eovX": formatEovForFile.format(eov.value.X),
|
||||
"description": pointDescriptionController.text,
|
||||
"horizontalError":
|
||||
max(gpsLatitudeError.value, gpsLongitudeError.value),
|
||||
"horizontalError": math.max(
|
||||
gpsLatitudeError.value, gpsLongitudeError.value),
|
||||
"verticalError": gpsAltitudeError.value,
|
||||
"gpsHeight": gpsHeightController.text
|
||||
});
|
||||
@@ -790,8 +823,8 @@ class MapSurveyController extends GetxController {
|
||||
'eovX': eov.value.X,
|
||||
'eovY': eov.value.Y,
|
||||
'poleHeight': double.tryParse(gpsHeightController.text),
|
||||
'horizontalError':
|
||||
max(gpsLatitudeError.value, gpsLongitudeError.value),
|
||||
'horizontalError': math.max(
|
||||
gpsLatitudeError.value, gpsLongitudeError.value),
|
||||
'verticalError': gpsAltitudeError.value,
|
||||
'description': pointDescriptionController.text,
|
||||
'isDeleted': false,
|
||||
@@ -932,4 +965,37 @@ class MapSurveyController extends GetxController {
|
||||
|
||||
final result = await SharePlus.instance.share(params);
|
||||
}
|
||||
|
||||
void switchMode(MapSurveyMode newMode) {
|
||||
mode.value = newMode;
|
||||
if (newMode == MapSurveyMode.measure) {
|
||||
// Kitűzési célpont törlése
|
||||
targetName.value = '';
|
||||
targetEovY.value = 0;
|
||||
targetEovX.value = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void setTarget(String name, double y, double x) {
|
||||
targetName.value = name;
|
||||
targetEovY.value = y;
|
||||
targetEovX.value = x;
|
||||
mode.value = MapSurveyMode.stakeout;
|
||||
}
|
||||
|
||||
Future<void> savePoint(String name, String note) async {
|
||||
// Mindkét módban ugyanaz a mentési logika
|
||||
// await AppDatabase.instance.insertMeasuredPoint(MeasuredPoint(
|
||||
// projectId: ProjectService.to.activeProjectId!,
|
||||
// name: name,
|
||||
// eovY: currentEovY.value,
|
||||
// eovX: currentEovX.value,
|
||||
// eovZ: currentEovZ.value,
|
||||
// accuracy: accuracy.value,
|
||||
// fixQuality: gpsQuality.value,
|
||||
// note: note,
|
||||
// timestamp: DateTime.now(),
|
||||
// ));
|
||||
// await FeedbackService.to.announcePointSaved(name);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user